summaryrefslogtreecommitdiff
path: root/scripts/rl-system.init
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/rl-system.init')
-rwxr-xr-xscripts/rl-system.init307
1 files changed, 49 insertions, 258 deletions
diff --git a/scripts/rl-system.init b/scripts/rl-system.init
index 779a7610..96f648c1 100755
--- a/scripts/rl-system.init
+++ b/scripts/rl-system.init
@@ -24,248 +24,24 @@
ACTION=$1
-[[ $PATH == *${ofr_bindir}* ]] || PATH+=:${ofr_bindir}
-[[ $PATH == *${ofr_sbindir}* ]] || PATH+=:${ofr_sbindir}
+source /etc/default/vyatta
+
+: ${vyatta_prefix:=/opt/vyatta}
+: ${vyatta_bindir:=${vyatta_prefix}/bin}
+: ${vyatta_sbindir:=${vyatta_prefix}/sbin}
+: ${vyatta_sysconfdir:=${vyatta_prefix}/etc}
+
+[[ $PATH == *${vyatta_bindir}* ]] || PATH+=:${vyatta_bindir}
+[[ $PATH == *${vyatta_sbindir}* ]] || PATH+=:${vyatta_sbindir}
export PATH
. /lib/lsb/init-functions
-IPROUTE2IP=ip
-INIT_PID=$$
-IFTAB=/etc/iftab
-
## BOOTFILE is provided by ofr.init
: ${BOOTFILE:=$prefix/etc/config/config.boot}
-declare -a cfg_eth_hwid
-declare -a sys_eth_mac
-declare -a sys_vmnets
-
-# load hwid array from config file as follows
-# interface {
-# ...
-# ethernet eth# {
-# ...
-# hw-id: XX:XX:XX:XX:XX:XX
-# ...
-# }
-# }
-#
-# cfg_eth_hwid[#]=xx:xx:xx:xx:xx:xx
-
-load_cfg_eth_hwid ()
-{
- eval $( sed -n '
- /^interfaces {/,/^}/ {
- /^ *ethernet eth[0-9]* {/,/^ $/ {
- /^ *ethernet/ {
- s/.* eth\([0-9]\+\) {$/cfg_eth_hwid[\1]=/
-# hold interface name
- h
- }
- /^.*hw-id:/ {
-# translate field name
- s/.*hw-id: *//
-# tolower hex mac address
- y/ABCDEF/abcdef/
-# exchange hold and pattern space
- x
-# concatenate hold and pattern
- G
- s/\n//p
- }
- }
- }' $BOOTFILE )
-}
-
-# load system eth mac tabled from ip link
-
-load_sys_eth_mac ()
-{
- eval $( ip link show | sed -n '
- /^[0-9]*: eth[0-9]*: /,+1 {
-# combine 2 line interface output...
-# 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
-# link/ether 00:13:72:57:48:f9 brd ff:ff:ff:ff:ff:ff
- h
- n
- x
- G
- s/\n//
-# translate to:
-# #=00:13:72:57:48:f9
- s/^.*eth\([0-9]\+\):.*link\/ether \([0-9A-Fa-f:]\+\) .*$/sys_eth_mac[\1]=\2/p
- }' )
-}
-
-load_sys_vmnets ()
-{
- sys_vmnets=( $( ip link show |
- sed -n 's/^[0-9]*: \(vmnet[0-9]*\).*$/\1/p' ) )
-}
-
-
-have_cfg_eth_hwid ()
-{
- local mac=$1
-
- for hwid in ${cfg_eth_hwid[@]} ; do
- [ $hwid == $mac ] && return 0
- done
- false
-}
-
-have_sys_eth_mac ()
-{
- local hwid=$1
-
- for mac in ${sys_eth_mac[@]} ; do
- [ $hwid == $mac ] && return 0
- done
- false
-}
-
-# update cfg table with results from system mac detection
-# first remove cfg itfs that are no longer in sys table
-# if sys mac is already in cfg table, use cfg itf assignment;
-# if sys mac isnot in cfg table but given index has hwid of
-# another sys itf, add to cfg table in first available slot
-# otherwise, [re-]assign cfg eth hwid with sys mac
-
-update_cfg_eth_hwid ()
-{
- local -i i
-
- for i in ${!cfg_eth_hwid[@]} ; do
- if ! have_sys_eth_mac ${cfg_eth_hwid[$i]} ; then
- unset cfg_eth_hwid[$i]
- fi
- done
- for i in ${!sys_eth_mac[@]} ; do
- if ! have_cfg_eth_hwid ${sys_eth_mac[$i]} ; then
- if [ -n "${cfg_eth_hwid[$i]}" ] ; then
- # cfg[#] has mac of another sys itf;
- # so, add another cfg itf for this mac
- # to the first available slot
- for (( j=0 ; true ; j++ )) ; do
- if [ -z "${cfg_eth_hwid[$j]}" ] ; then
- cfg_eth_hwid[$j]=${sys_eth_mac[$i]}
- break 1
- fi
- done
- else
- cfg_eth_hwid[$i]=${sys_eth_mac[$i]}
- fi
- fi
- done
-}
-
-write_iftab ()
-{
- local -i i
-
- rm -f $IFTAB
- for i in ${!cfg_eth_hwid[@]} ; do
- echo "etha$i mac ${cfg_eth_hwid[$i]}" >> $IFTAB
- done
-}
-
-write_iftab_real ()
-{
- local -i i
-
- rm -f $IFTAB
- for i in ${!cfg_eth_hwid[@]} ; do
- echo "eth$i mac ${cfg_eth_hwid[$i]}" >> $IFTAB
- done
-}
-
-mod_bootfile_eth_hwid ()
-{
- local eth=$1 hwid=$2
-
- sed -i '/^interfaces {$/,/^}/ {
- /^ ethernet '"$eth"' {$/,/^ }$/ {
- /^ *hw-id/c\
- hw-id: '"$hwid"'
- }}' $BOOTFILE
-}
-
-add_bootfile_eth_hwid ()
-{
- local eth=$1 hwid=$2
-
- sed -i '/^interfaces {$/,/^}$/ {
- /^}$/i\
- ethernet '"$eth"' {\
- hw-id: '"$hwid"'\
- }
- }' $BOOTFILE
-}
-
-add_bootfile_eth_linkdetect ()
-{
- local eth=$1
-
- sed -i '/^interfaces {$/,/^}$/ {
- /^}$/i\
- ethernet '"$eth"' {\
- link-detect\
- }
- }' $BOOTFILE
-}
-
-update_bootfile_eths ()
-{
- local -i i
-
- for i in ${!cfg_eth_hwid[@]} ; do
- if grep -q "ethernet eth$i {" $BOOTFILE ; then
- mod_bootfile_eth_hwid eth$i ${cfg_eth_hwid[$i]}
- else
- add_bootfile_eth_hwid eth$i ${cfg_eth_hwid[$i]}
- add_bootfile_eth_linkdetect eth$i
- fi
- done
-}
-
-add_bootfile_vmnet ()
-{
- local vmnet=$1
-
- sed -i '/^interfaces {/,/^}$/ {
- /^}$/i\
- ethernet '"$vmnet"' {\
- }
- }' $BOOTFILE
-}
-
-update_bootfile_vmnets ()
-{
- for vmnet in ${sys_vmnets[@]} ; do
- if ! grep -q "ethernet $vmnet {" $BOOTFILE ; then
- add_bootfile_vmnet $vmnet
- fi
- done
-}
-
-itfmess ()
-{
- load_cfg_eth_hwid
- load_sys_eth_mac
- load_sys_vmnets
- update_cfg_eth_hwid
- write_iftab
- update_bootfile_eths
- update_bootfile_vmnets
-}
-
-maybe_ifrename () {
- if [ -e $IFTAB ] ; then
- ifrename -d -p
- fi
-}
+shopt -s extglob nullglob
search_config_if_wan () {
grep "\<serial\>.*\<$1\>" $BOOTFILE >/dev/null
@@ -290,56 +66,72 @@ add_new_serial_if () {
fi
}
-reset_promiscous_arp_response () {
+proc_flags ()
+{
+ # reset_promiscous_arp_response
echo 1 > /proc/sys/net/ipv4/conf/default/arp_filter
-}
-
-set_ip_forwarding () {
+ # set_ip_forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
-}
-## if a primary address is removed from an interface promote and
-## secondary available
-set_promote_secondaries () {
+ # if a primary address is removed from an interface promote and
+ # secondary available
echo 1 > /proc/sys/net/ipv4/conf/all/promote_secondaries
}
## Update the version information
update_version_info () {
- if [ -f ${ofr_sysconfdir}/version.master ]; then
- cp ${ofr_sysconfdir}/version.master ${ofr_sysconfdir}/version
+ if [ -f ${vyatta_sysconfdir}/version.master ]; then
+ cp ${vyatta_sysconfdir}/version.master ${vyatta_sysconfdir}/version
fi
}
## Clear out apt config file--it will be filled in by rtrmgr
clear_apt_config()
{
- >/etc/apt/sources.list
+ cat /dev/null >/etc/apt/sources.list || true
}
## snmp should be a separate package,
## but for now load the kernel module here
add_snmp_stats_module()
{
- modprobe ipt_rlsnmpstats
+ modprobe ipt_rlsnmpstats || true
}
set_reboot_on_panic()
{
- echo 1 > /proc/sys/kernel/panic_on_oops
- echo 60 > /proc/sys/kernel/panic
+ echo 1 > /proc/sys/kernel/panic_on_oops
+ echo 60 > /proc/sys/kernel/panic
+}
+
+clear_or_override_config_files ()
+{
+ for conf in motd.tail ntp.conf syslog.conf logrotate.d/messages \
+ snmp/snmpd.conf snmp/snmptrapd.conf keepalived/keepalived.conf \
+ ipvsadm.rules default/ipvsadm resolv.conf
+ do
+ if [ -f /etc/$conf ] ; then
+ cat /dev/null > /etc/$conf || true
+ fi
+ done
+ for conf in motd.tail syslog.conf; do
+ cp $vyatta_sysconfdir/$conf /etc/$conf
+ done
+ cp $vyatta_sysconfdir/logrotate_messages /etc/logrotate.d/messages
+ cp $vyatta_sysconfdir/default_ssh /etc/default/ssh
+ # ssh v1. remove the empty key file
+ rm -f /etc/ssh/ssh_host_key
}
start () {
- set_reboot_on_panic
- itfmess
- maybe_ifrename
- write_iftab_real
- maybe_ifrename
- add_new_serial_if
- reset_promiscous_arp_response
- set_ip_forwarding
- set_promote_secondaries
+ clear_or_override_config_files || \
+ log_failure_msg "can\'t reset config files"
+ set_reboot_on_panic || \
+ log_failure_msg "can\'t set reboot on panic"
+ add_new_serial_if || \
+ log_failure_msg "can\'t add serial interfaces"
+ proc_flags || \
+ log_failure_msg "can\'t reset proc flags"
update_version_info
clear_apt_config
add_snmp_stats_module
@@ -354,7 +146,6 @@ esac
exit $?
-
# Local Variables:
# mode: shell-script
# sh-indentation: 4