Initial commit
This commit is contained in:
128
customcd/files/etc/init.d/sysresccd
Normal file
128
customcd/files/etc/init.d/sysresccd
Normal file
@@ -0,0 +1,128 @@
|
||||
#!/sbin/runscript
|
||||
|
||||
source /sbin/livecd-functions.sh
|
||||
|
||||
depend()
|
||||
{
|
||||
before xdm autorun tigervnc
|
||||
after pwgen sshd portmap hald
|
||||
}
|
||||
|
||||
start()
|
||||
{
|
||||
ebegin "Performing the SystemRescueCd specific initializations"
|
||||
|
||||
CMDLINE="$(cat /proc/cmdline)"
|
||||
|
||||
# ---- create file /var/log/lastlog so that ssh does not complain in the logs ----
|
||||
touch /var/log/lastlog
|
||||
|
||||
# ---- create various directories ----
|
||||
mkdir -p /var/log/samba
|
||||
mkdir -p /var/cache/revdep-rebuild
|
||||
mkdir -p /var/run/dhcp
|
||||
chown dhcp:dhcp /var/run/dhcp
|
||||
|
||||
# ---- disable screensaver in the console
|
||||
setterm -blank 0 -powersave off
|
||||
|
||||
# ---- auto-detect software raid ----
|
||||
[ -n "$(which mdadm)" ] && mdadm --auto-detect 2>&1
|
||||
|
||||
# ---- change the root password if requested in cmdline ----
|
||||
for curopt in ${CMDLINE}
|
||||
do
|
||||
if echo "${curopt}" | grep -q -E '^rootpass=[^ ]{1,32}$'
|
||||
then
|
||||
newpass="$(echo ${curopt} | sed -r -e 's!^rootpass=([^ ]{1,32})$!\1!g')"
|
||||
( echo root:${newpass} ) | chpasswd 1>/dev/null 2>&1
|
||||
fi
|
||||
done
|
||||
|
||||
# ---- options to start/stop services ----
|
||||
for curopt in ${CMDLINE}
|
||||
do
|
||||
if echo "${curopt}" | grep -q -E '^initscript=[a-zA-Z0-9]{1,32}:[a-z]{1,32}$'
|
||||
then
|
||||
touch /var/log/initscript.log
|
||||
service="$(echo ${curopt} | sed -r -e 's!^initscript=([a-zA-Z0-9]{1,32}):([a-z]{1,32})$!\1!g')"
|
||||
action="$(echo ${curopt} | sed -r -e 's!^initscript=([a-zA-Z0-9]{1,32}):([a-z]{1,32})$!\2!g')"
|
||||
echo "initscript: found option ${curopt} (service=${service} and action=${action}" >| /var/log/initscript.log
|
||||
if [ -x "/etc/init.d/${service}" ]
|
||||
then
|
||||
cmd="/etc/init.d/${service} ${action}"
|
||||
${cmd} > /var/log/initscript-${service}.log 2>&1
|
||||
res=$?
|
||||
echo "initscript: ${cmd} --> ${res}" | tee -a /var/log/initscript.log
|
||||
else
|
||||
echo "initscript: /etc/init.d/${service} not found" | tee -a /var/log/initscript.log
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# ---- options to configure and start the vncserver ----
|
||||
# eg: "rescuecd vncserver=2:mYpAsWd" will create two vnc displays (display=1 on port 5900 and display=2 on port 5901)
|
||||
# and the two displays will use the same password and the root user account (password=mYpAsWd)
|
||||
# this option should be used only once, but in case of multiple usages the last vncserver option overwrite the previous ones
|
||||
vnclog='/var/log/vncserver.log'
|
||||
for curopt in ${CMDLINE}
|
||||
do
|
||||
case "${curopt}" in
|
||||
vncserver\=*)
|
||||
echo '' >| ${vnclog}
|
||||
vncopt="$(echo ${curopt} | cut -d= -f2)"
|
||||
echo "vncserver: found option vncserver=${vncopt}" | tee -a ${vnclog}
|
||||
if echo "${vncopt}" | grep -q -E '^[1-9]:[^ ]{6,12}$'
|
||||
then
|
||||
[ -f /root/.vnc/passwd ] && rm -f /root/.vnc/passwd
|
||||
[ ! -d /root/.vnc ] && mkdir -p /root/.vnc
|
||||
sed -i -e 's!^DISPLAYS=.*!!g' /etc/conf.d/tigervnc
|
||||
displaycnt="$(echo ${curopt} | sed -r -e 's!^vncserver=([1-9]):([^ ]{6,12})$!\1!g')"
|
||||
password="$(echo ${curopt} | sed -r -e 's!^vncserver=([1-9]):([^ ]{6,12})$!\2!g')"
|
||||
echo "vncserver: ${displaycnt} displays will be created" | tee -a ${vnclog}
|
||||
echo "vncserver: creating password file in /root/.vnc/passwd:" >>${vnclog}
|
||||
echo -e "${password}\n${password}\n" | vncpasswd /root/.vnc/passwd >>${vnclog} 2>&1
|
||||
|
||||
chmod 600 /root/.vnc/passwd
|
||||
echo "exec /usr/bin/startxfce4 >/dev/null 2>&1" >| /root/.vnc/xstartup
|
||||
chmod 700 /root/.vnc/xstartup
|
||||
displayopt=''
|
||||
for ((i=1; i <= displaycnt; i++))
|
||||
do
|
||||
echo "vncserver: preparing display number $i" | tee -a ${vnclog}
|
||||
displayopt="${displayopt} root:$i"
|
||||
displayopt="$(echo ${displayopt} | sed -e 's!^ !!g' | sed -e 's! $!!g')"
|
||||
done
|
||||
echo "DISPLAYS=\"${displayopt}\"" >> /etc/conf.d/tigervnc
|
||||
else
|
||||
echo "vncserver: invalid syntax (expected \"vncserver=x:mYpAsWd\")"
|
||||
echo " where x is the number of displays (1 or 2 in general)"
|
||||
echo " mYpAsWd is a password (between 6 and 12 characters)"
|
||||
sleep 2
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# ---- clean /etc/mtab ----
|
||||
if grep -q -F 'tmpfs /newroot' /etc/mtab
|
||||
then
|
||||
rm -f /etc/mtab.bak
|
||||
cp /etc/mtab /etc/mtab.bak
|
||||
sed -i -e "/ \/newroot/d" /etc/mtab
|
||||
fi
|
||||
|
||||
# ---- create a kernel options file ----
|
||||
if [ -f /proc/config.gz ]
|
||||
then
|
||||
cat /proc/config.gz | gzip -d > /root/kernel-$(uname -r).conf
|
||||
fi
|
||||
|
||||
# ---- fix inittab for serial consoles
|
||||
livecd_fix_inittab
|
||||
/sbin/telinit q &>/dev/null
|
||||
|
||||
# ---- mount tmpfs (important for backing store)
|
||||
mount -t tmpfs tmpfs /tmp
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user