Aggancia questa barra allo schermo |  Disattiva gli effetti grafici


Configurazione di Slackware


 

Automatizzare la prima configurazione di Slackware

Uno script da eseguire al primo avvio di Slackware.

script

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 22 volte, dimensione: 7 KB

È sufficiente eseguirlo da root in questo modo:

# ./slackonf

Vediamo 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.

Scritto da: Andrea Peluso (sya54M), . Ultimo aggiornamento: .

Commenti

Nessun commento.

I campi contrassegnati con * sono obbligatori.

Condividi sui tuoi social preferiti!

Facebook Linkedin Twitter Google+
.