|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
|
|
|
|
|
|
|
|
mkdir -m 0755 -p /run/initramfs/state/etc/sysconfig/network-scripts
|
|
|
|
|
|
|
|
function cms_write_config()
|
|
|
|
{
|
|
|
|
. /tmp/cms.conf
|
|
|
|
SUBCHANNELS="$(echo $SUBCHANNELS | sed 'y/ABCDEF/abcdef/')"
|
|
|
|
OLDIFS=$IFS
|
|
|
|
IFS=,
|
|
|
|
read -a subch_array <<< "indexzero,$SUBCHANNELS"
|
|
|
|
IFS=$OLDIFS
|
|
|
|
devbusid=${subch_array[1]}
|
|
|
|
if [ "$NETTYPE" = "ctc" ]; then
|
|
|
|
driver="ctcm"
|
|
|
|
else
|
|
|
|
driver=$NETTYPE
|
|
|
|
fi
|
|
|
|
|
|
|
|
DEVICE=$(cd /sys/devices/${driver}/$devbusid/net/ && set -- * && [ "$1" != "*" ] && echo $1)
|
|
|
|
|
|
|
|
uuid=$(cat /proc/sys/kernel/random/uuid)
|
|
|
|
|
|
|
|
IFCFGFILE=/run/initramfs/state/etc/sysconfig/network-scripts/ifcfg-$DEVICE
|
|
|
|
|
Specify strstr tightly, add strglob/strglobin.
By convention, strstr should be a literal string match. Previously, it
would match as a glob pattern. Some code used that, so add new
functions strglob and strglobin to do what that code expects, and
specify them tightly too. strglob tests whether the glob pattern
matches the entire string (the name strglob is also used in the yorick
language, and that's what it does there), while strglobin tests whether
the glob pattern matches anywhere in the string.
Also tightens str_starts, str_ends, and str_replace to deal with
literal strings only. In a quick grep I did not find code that depended
on these functions matching globs.
Changes the call sites where strstr was used with glob patterns to use
strglobin or strglob as the intention seemed to be (or, in one case,
strstr with the * removed as it did not affect the result anyway).
11 years ago
|
|
|
strglobin "$IPADDR" '*:*:*' && ipv6=1
|
|
|
|
|
|
|
|
# to please NetworkManager on startup in loader before loader reconfigures net
|
|
|
|
cat > /etc/sysconfig/network << EOF
|
|
|
|
HOSTNAME=$HOSTNAME
|
|
|
|
EOF
|
|
|
|
echo "$HOSTNAME" > /etc/hostname
|
|
|
|
if [ "$ipv6" ]; then
|
|
|
|
echo "NETWORKING_IPV6=yes" >> /etc/sysconfig/network
|
|
|
|
else
|
|
|
|
echo "NETWORKING=yes" >> /etc/sysconfig/network
|
|
|
|
fi
|
|
|
|
|
|
|
|
cat > $IFCFGFILE << EOF
|
|
|
|
DEVICE=$DEVICE
|
|
|
|
UUID=$uuid
|
|
|
|
ONBOOT=yes
|
|
|
|
BOOTPROTO=static
|
|
|
|
MTU=$MTU
|
|
|
|
SUBCHANNELS=$SUBCHANNELS
|
|
|
|
EOF
|
|
|
|
if [ "$ipv6" ]; then
|
|
|
|
cat >> $IFCFGFILE << EOF
|
|
|
|
IPV6INIT=yes
|
|
|
|
IPV6_AUTOCONF=no
|
|
|
|
IPV6ADDR=$IPADDR/$NETMASK
|
|
|
|
IPV6_DEFAULTGW=$GATEWAY
|
|
|
|
EOF
|
|
|
|
else
|
|
|
|
cat >> $IFCFGFILE << EOF
|
|
|
|
IPADDR=$IPADDR
|
|
|
|
NETMASK=$NETMASK
|
|
|
|
BROADCAST=$BROADCAST
|
|
|
|
GATEWAY=$GATEWAY
|
|
|
|
EOF
|
|
|
|
fi
|
|
|
|
if [ "$ipv6" ]; then
|
|
|
|
DNS1=$(set -- ${DNS/,/ }; echo $1)
|
|
|
|
DNS2=$(set -- ${DNS/,/ }; echo $2)
|
|
|
|
else
|
|
|
|
DNS1=$(set -- ${DNS/:/ }; echo $1)
|
|
|
|
DNS2=$(set -- ${DNS/:/ }; echo $2)
|
|
|
|
fi
|
|
|
|
# real DNS config for NetworkManager to generate /etc/resolv.conf
|
|
|
|
[ "$DNS1" != "" ] && echo "DNS1=$DNS1" >> $IFCFGFILE
|
|
|
|
[ "$DNS2" != "" ] && echo "DNS2=$DNS2" >> $IFCFGFILE
|
|
|
|
# just to please loader's readNetInfo && writeEnabledNetInfo
|
|
|
|
# which eats DNS1,DNS2,... and generates it themselves based on DNS
|
|
|
|
if [ "$ipv6" ]; then
|
|
|
|
[ "$DNS" != "" ] && echo "DNS=\"$DNS\"" >> $IFCFGFILE
|
|
|
|
else
|
|
|
|
[ "$DNS" != "" ] && echo "DNS=\"${DNS/:/,}\"" >> $IFCFGFILE
|
|
|
|
fi
|
|
|
|
# colons in SEARCHDNS already replaced with spaces above for /etc/resolv.conf
|
|
|
|
[ "$SEARCHDNS" != "" ] && echo "DOMAIN=\"$SEARCHDNS\"" >> $IFCFGFILE
|
|
|
|
[ "$NETTYPE" != "" ] && echo "NETTYPE=$NETTYPE" >> $IFCFGFILE
|
|
|
|
[ "$PEERID" != "" ] && echo "PEERID=$PEERID" >> $IFCFGFILE
|
|
|
|
[ "$PORTNAME" != "" ] && echo "PORTNAME=$PORTNAME" >> $IFCFGFILE
|
|
|
|
[ "$CTCPROT" != "" ] && echo "CTCPROT=$CTCPROT" >> $IFCFGFILE
|
|
|
|
[ "$MACADDR" != "" ] && echo "MACADDR=$MACADDR" >> $IFCFGFILE
|
|
|
|
optstr=""
|
|
|
|
for option in LAYER2 PORTNO; do
|
|
|
|
[ -z "${!option}" ] && continue
|
|
|
|
[ -n "$optstr" ] && optstr=${optstr}" "
|
|
|
|
optstr=${optstr}$(echo ${option} | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/')"="${!option}
|
|
|
|
done
|
|
|
|
# write single quotes since network.py removes double quotes but we need quotes
|
|
|
|
echo "OPTIONS='$optstr'" >> $IFCFGFILE
|
|
|
|
unset option
|
|
|
|
unset optstr
|
|
|
|
unset DNS1
|
|
|
|
unset DNS2
|
|
|
|
echo "files /etc/sysconfig/network-scripts" >> /run/initramfs/rwtab
|
|
|
|
echo "files /var/lib/dhclient" >> /run/initramfs/rwtab
|
|
|
|
}
|
|
|
|
|
|
|
|
[ -f /tmp/cms.conf ] && cms_write_config
|