Configurazione di Slackware
Automatizzare la prima configurazione di Slackware
Uno script da eseguire al primo avvio di Slackware.
Mi capita spesso di fare nuove installazioni di Slackware e di ripetere sempre le stesse operazioni atte ad una prima configurazione di base, come ad esempio l'italianizzazione o l'impostazione della corretta risoluzione framebuffer.
Per cui ho deciso di raggruppare tutte queste operazioni di base, che possono diventare noiose da ripetere se i pc sono molti, in uno script bash che per esempio può essere conservato in una pendrive e lanciato al primo avvio dopo una nuova installazione.
Sono configurazioni un po' personali, quindi alcuni potrebbero non essere daccordo su alcune cose, però anch'essi possono prendere spunto. Per esempio lo script installa Grub mentre qualcuno potrebbe preferire Lilo e viene rimpiazzato (dopo averne fatta una copia di backup) lo script rc.M con una versione snellita per velocizzare il boot.
slackonf
#!/bin/sh
# Copyright (C) 2014-2016, Andrea Peluso <sya54m@gmail.com>
# Tutti i diritti riservati.
lng="it"
COD="UTF-8"
if [ "$(whoami)" != "root" ]; then
echo -e "Permesso negato: eseguire come root.\n"
exit 1
fi
LNG=$(echo $lng | tr "[:lower:]" "[:upper:]")
sed -i "s|en_US|$lng\_$LNG.$COD|g" /etc/profile.d/lang.sh
if [ -r /usr/share/X11/xorg.conf.d/90-keyboard-layout.conf ]; then
cp /usr/share/X11/xorg.conf.d/90-keyboard-layout.conf /etc/X11/xorg.conf.d/
sed -i "s|\"us\"|\"$lng\"|g" /etc/X11/xorg.conf.d/90-keyboard-layout.conf
fi
if [ -r /etc/ntp.conf ]; then
sed -i "s|server\t127.127.1.0|#server\t127.127.1.0|g" /etc/ntp.conf
sed -i "s|fudge\t127.127.1.0|#fudge\t127.127.1.0|g" /etc/ntp.conf
sed -i "s|#server 0.pool.ntp.org|server europe.pool.ntp.org|g" /etc/ntp.conf
fi
if [ -r /etc/kde/kdm/kdmrc ]; then
sed -i "s|id:3:initdefault:|id:4:initdefault:|g" /etc/inittab
sed -i "s|#AntiAliasing=true|AntiAliasing=true|g" /etc/kde/kdm/kdmrc
sed -i "s|#NumLock=Off|NumLock=On|g" /etc/kde/kdm/kdmrc
sed -i "s|#Language=de_DE|Language=$lng|g" /etc/kde/kdm/kdmrc
sed -i "s|#BootManager=Grub|BootManager=Grub2|g" /etc/kde/kdm/kdmrc
sed -i "s|#AutoReLogin=true|AutoReLogin=true|g" /etc/kde/kdm/kdmrc
sed -i "s|#TerminateServer=true|TerminateServer=true|g" /etc/kde/kdm/kdmrc
adduser
elif [ -x /usr/bin/startx ]; then
echo "Autologin? [Si | No] "
while [ true ]
do
read -n 1 -s loginsn
if [ $loginsn == "s" -o $loginsn == "S" ]; then
adduser
UTENTE=$(awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd |head -n 1)
sed -i "s|c1:12345:respawn:/sbin/agetty --noclear 38400 tty1 linux|#c1:12345:respawn:/sbin/agetty --noclear 38400 tty1 linux\nc1:12345:respawn:/bin/login -f $UTENTE tty1 </dev/tty1 >/dev/tty1 2>\&1|g" /etc/inittab
echo "startx 2> /dev/null" >> /home/$UTENTE/.bash_profile
break
elif [ $loginsn == "n" -o $loginsn == "N" ]; then
break
else
echo "Scelta non valida."
fi
done
fi
if [ -r /etc/gtk-2.0/gtkrc -a -r /usr/share/themes/oxygen-gtk/gtk-2.0/gtkrc ]; then
sed -i "s|GTK+|oxygen-gtk|g" /etc/gtk-2.0/gtkrc
fi
if [ -r /etc/gtk-3.0/gtkrc -a -r /usr/share/themes/oxygen-gtk/gtk-3.0/gtkrc ]; then
sed -i "s|Adwaita|oxygen-gtk|g" /etc/gtk-3.0/gtkrc
fi
if [ -r /etc/default/grub ]; then
DIS=$(cat /etc/mtab | grep " / " | cut -d " " -f1 | sed s/.$//)
RES=$(fbset | grep 'mode "' | cut -d '"' -f2)"x32"
if [ $RES == "x32" ]; then
RES="1024x768x32"
fi
grub-install --recheck $DIS
sed -i "s|#GRUB_GFXMODE=1024x768x32|GRUB_GFXMODE=$RES\nGRUB_GFXPAYLOAD_LINUX=keep|g" /etc/default/grub
grub-mkconfig -o /boot/grub/grub.cfg 2> /dev/null
fi
if [ -r /etc/xdg/autostart/hplip-systray.desktop ]; then
rm /etc/xdg/autostart/hplip-systray.desktop
fi
if [ -r /etc/xdg/autostart/blueman.desktop ]; then
rm /etc/xdg/autostart/blueman.desktop
fi
mv /etc/rc.d/rc.M /etc/rc.d/rc.M~
cat > /etc/rc.d/rc.M <<EOF
#!/bin/sh
# Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
# Heavily modified by Patrick Volkerding <volkerdi@slackware.com>
# Heavily modified by Andrea Peluso <sya54m@gmail.com>
if [ -r /etc/HOSTNAME ]; then
/bin/hostname \$(cat /etc/HOSTNAME | cut -f1 -d .)
else
echo "darkstar.example.net" > /etc/HOSTNAME
/bin/hostname darkstar
fi
if [ -r /proc/sys/kernel/dmesg_restrict ]; then
if [ \$(cat /proc/sys/kernel/dmesg_restrict) = 1 ]; then
touch /var/log/dmesg
chmod 640 /var/log/dmesg
fi
else
touch /var/log/dmesg
chmod 644 /var/log/dmesg
fi
/bin/dmesg -s 65536 > /var/log/dmesg
if [ -x /etc/rc.d/rc.syslog -a -x /usr/sbin/syslogd -a -d /var/log ]; then
. /etc/rc.d/rc.syslog start
fi
if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then
if ! grep -wq nohotplug /proc/cmdline ; then
if [ -x /etc/rc.d/rc.udev ]; then
/bin/sh /etc/rc.d/rc.udev start
fi
fi
fi
. /etc/rc.d/rc.inet1
sh /etc/rc.d/rc.messagebus start
if [ -x /etc/rc.d/rc.bluetooth ]; then
sh /etc/rc.d/rc.bluetooth start &
fi
if [ -x /etc/rc.d/rc.networkmanager ]; then
sh /etc/rc.d/rc.networkmanager start &
fi
. /etc/rc.d/rc.inet2 &
mount -a -v 2> /dev/null | grep -v -e "already mounted" -e "ignored" | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done
if [ -x /etc/rc.d/rc.ntpd ]; then
sh /etc/rc.d/rc.ntpd start &
fi
/bin/rm -f /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /tmp/core /core 2> /dev/null
/bin/rm -rf /var/spool/cron/cron.?????? 2> /dev/null
if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then
/bin/rm -f /tmp/hunt*
fi
chmod 755 / 2> /dev/null
chmod 1777 /tmp /var/tmp
. /etc/rc.d/rc.acpid start
if [ -x /etc/rc.d/rc.cpufreq ]; then
. /etc/rc.d/rc.cpufreq start &
fi
if find /usr/share/icons 2> /dev/null | grep -q icon-theme.cache ; then
for theme_dir in /usr/share/icons/* ; do
if [ -r \${theme_dir}/icon-theme.cache ]; then
/usr/bin/gtk-update-icon-cache -t -f \${theme_dir} 1> /dev/null 2> /dev/null &
fi
done
if [ -r /usr/share/icons/icon-theme.cache ]; then
rm -f /usr/share/icons/icon-theme.cache
fi
fi
if [ -x /usr/bin/update-mime-database -a -d /usr/share/mime ]; then
/usr/bin/update-mime-database /usr/share/mime 1> /dev/null 2> /dev/null &
fi
if [ -x /etc/rc.d/rc.consolekit ]; then
sh /etc/rc.d/rc.consolekit start &
fi
if [ -x /etc/rc.d/rc.pulseaudio ]; then
. /etc/rc.d/rc.pulseaudio start &
fi
if [ -x /usr/bin/update-gtk-immodules ]; then
/usr/bin/update-gtk-immodules --verbose
fi
if [ -x /usr/bin/update-gdk-pixbuf-loaders ]; then
/usr/bin/update-gdk-pixbuf-loaders --verbose
fi
if [ -x /usr/bin/update-pango-querymodules ]; then
/usr/bin/update-pango-querymodules --verbose
fi
if [ -x /usr/bin/glib-compile-schemas ]; then
/usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas >/dev/null 2>&1
fi
if [ -x /etc/rc.d/rc.dnsmasq ]; then
/etc/rc.d/rc.dnsmasq start &
fi
if [ -x /etc/rc.d/rc.snmpd ]; then
/etc/rc.d/rc.snmpd start &
fi
if [ -x /etc/rc.d/rc.cups ]; then
/etc/rc.d/rc.cups start &
fi
/usr/sbin/smartd &
if [ -x /sbin/accton -a -r /var/log/pacct ]; then
chmod 640 /var/log/pacct
/sbin/accton /var/log/pacct
fi
/usr/sbin/crond -l notice
/usr/sbin/atd -b 15 -l 1
if grep -q quota /etc/fstab ; then
for quotafs in \$(awk '/quota/ {print \$2}' /etc/fstab) ; do
/bin/rm -f \$quotafs/{a,}quota.{group,user}.new
done
if [ -x /sbin/quotacheck ]; then
/sbin/quotacheck -avugm
fi
if [ -x /sbin/quotaon ]; then
/sbin/quotaon -avug
fi
fi
if [ -x /etc/rc.d/rc.saslauthd ]; then
. /etc/rc.d/rc.saslauthd start &
fi
if [ -x /etc/rc.d/rc.sendmail ]; then
. /etc/rc.d/rc.sendmail start &
fi
. /etc/rc.d/rc.alsa &
if [ -x /etc/rc.d/rc.font ]; then
. /etc/rc.d/rc.font &
fi
. /etc/rc.d/rc.keymap &
if [ -x /etc/rc.d/rc.mysqld ]; then
. /etc/rc.d/rc.mysqld start &
fi
if [ -x /etc/rc.d/rc.httpd ]; then
. /etc/rc.d/rc.httpd start &
fi
if [ -x /etc/rc.d/rc.openldap ]; then
. /etc/rc.d/rc.openldap start &
fi
if [ -x /etc/rc.d/rc.samba ]; then
. /etc/rc.d/rc.samba start &
fi
if [ -x /etc/rc.d/rc.gpm ]; then
. /etc/rc.d/rc.gpm start &
fi
if [ -x /etc/rc.d/rc.sysvinit ]; then
. /etc/rc.d/rc.sysvinit &
fi
if [ -x /etc/rc.d/rc.local ]; then
. /etc/rc.d/rc.local &
fi
EOF
chmod +x /etc/rc.d/rc.M
Scarica [.sh]
...scaricato 41 volte,
dimensione: 7 KB È sufficiente eseguirlo da root in questo modo:
# ./slackonfVediamo nel dettaglio quali file vengono modificati.
Per prima cosa viene italianizzato il sistema impostando la lingua nel file /etc/profile.d/lang.sh e viene impostata la mappatura della tastiera per xorg grazie ad una copia del file /usr/share/X11/xorg.conf.d/90-keyboard-layout.conf in /etc/X11/xorg.conf.d/ in cui viene sostituito il valore "us" con quello settato nella variabile lng.
Dopodiché viene cambiato il runlevel predefinito da 3 a 4 per avviare xorg in automatico e viene configurato il demone ntp per la sincronizzazione dell'orologio su internet.
Poi viene configurato il display manager KDM, viene cambiato il tema gtk-2 e gtk-3 per uniformare la grafica di tale toolkit a quella di KDE, viene rilevato il disco in cui è installato il sistema e la risoluzione attuale della console framebuffer che vengono poi usati per configurare Grub che viene installato al posto di Lilo. Questa scelta l'ho fatta per avere una console ad alta risoluzione fin dall'inizio e non solo dopo che sia stato caricato il driver video. Ho ritenuto corretto infatti rilevare la risoluzione attuale proprio perché al momento dell'esecuzione dello script dovrebbe già essere stato caricato il driver video e quindi la risoluzione è quella corretta.
Infine vengono eliminati dall'autoavvio hplip e blueman, perché ripeto, è uno script abbastanza soggettivo e viene fatta una copia di backup dello script /etc/rc.d/rc.M che viene sostituito da una mia versione snellita in cui molti servizi vengono lanciati in background o sono stati tolti per accelerare l'avvio di Slackware.
Condividi sui tuoi social preferiti!
Telegram Facebook Linkedin Twitter Pinterest