#!/bin/bash # # /etc/rc.sysinit # unset HOSTNAME . /etc/rc.conf . /etc/rc.d/functions LOCALE="$LANG" LANG=C LC_ALL=C if [[ -z $HOSTNAME && -s /etc/hostname ]]; then HOSTNAME=$(< /etc/hostname) fi # don't let all the systemd tools be too verbose export SYSTEMD_LOG_LEVEL="notice" # Prints distro name and URL print_welcome # mount the API filesystems # /proc, /sys, /run, /dev, /run/lock, /dev/pts, /dev/shm mountpoint -q /proc || mount -t proc proc /proc -o nosuid,noexec,nodev mountpoint -q /sys || mount -t sysfs sys /sys -o nosuid,noexec,nodev mountpoint -q /run || mount -t tmpfs run /run -o mode=0755,nosuid,nodev mountpoint -q /dev || mount -t devtmpfs dev /dev -o mode=0755,nosuid mkdir -p /dev/{pts,shm} mountpoint -q /dev/pts || mount /dev/pts &>/dev/null || mount -t devpts devpts /dev/pts -o mode=0620,gid=5,nosuid,noexec mountpoint -q /dev/shm || mount /dev/shm &>/dev/null || mount -t tmpfs shm /dev/shm -o mode=1777,nosuid,nodev # log all console messages bootlogd -p /run/bootlogd.pid run_hook sysinit_start if [[ $HOSTNAME ]]; then stat_busy "Setting hostname: $HOSTNAME" echo "$HOSTNAME" >| /proc/sys/kernel/hostname && stat_done || stat_fail fi HWCLOCK_PARAMS="--systz" if [[ $HARDWARECLOCK ]]; then [[ -f /etc/adjtime ]] && { read ; read ; read ADJTIME; } < /etc/adjtime if [[ $ADJTIME == 'LOCAL' ]]; then if [[ $HARDWARECLOCK == 'UTC' ]]; then printf "${C_FAIL}/etc/rc.conf says the RTC is in UTC, but /etc/adjtime says it is in localtime.\n${C_OTHER}." fi else if [[ $HARDWARECLOCK == 'LOCALTIME' ]]; then printf "${C_FAIL}/etc/rc.conf says the RTC is in localtime, but hwclock (/etc/adjtime) thinks it is in UTC.\n${C_OTHER}." fi fi case $HARDWARECLOCK in UTC) HWCLOCK_PARAMS+=" --utc --noadjfile";; localtime) HWCLOCK_PARAMS+=" --localtime --noadjfile";; *) HWCLOCK_PARAMS="";; esac fi if [[ $HWCLOCK_PARAMS ]]; then stat_busy "Adjusting system time and setting kernel time zone" # Adjust the system time for time zone offset if rtc is not in UTC, as # filesystem checks can depend on system time. This also sets the kernel # time zone, used by e.g. vfat. if [[ $TIMEZONE ]]; then export TZ=$TIMEZONE fi hwclock $HWCLOCK_PARAMS && stat_done || stat_fail unset TZ fi # Start/trigger udev, load MODULES, and settle udev udevd_modprobe sysinit # this must be done after udev has loaded the KMS modules #status 'Configuring virtual consoles' /usr/lib/systemd/systemd-vconsole-setup if [[ ${LOCALE,,} =~ utf || $LOCALE == C ]]; then stat_busy "Setting Consoles to UTF-8 mode" # UTF-8 consoles are default since 2.6.24 kernel # this code is needed not only for older kernels, # but also when user has set vt.default_utf8=0 but LOCALE is *.UTF-8. for i in /dev/tty[0-9]*; do kbd_mode -u -C ${i} printf "\e%%G" > ${i} done echo 1 >| /sys/module/vt/parameters/default_utf8 stat_done else stat_busy "Setting Consoles to legacy mode" # make non-UTF-8 consoles work on 2.6.24 and newer kernels for i in /dev/tty[0-9]*; do kbd_mode -a -C ${i} printf "\e%%@" > ${i} done echo 0 >| /sys/module/vt/parameters/default_utf8 stat_done fi if [[ -z $CONSOLEFONT && -z $CONSOLEMAP && -s /etc/vconsole.conf ]]; then parse_envfile /etc/vconsole.conf "${vconsolevars[@]}" [[ $FONT ]] && CONSOLEFONT=$FONT [[ $FONT_MAP ]] && CONSOLEMAP=$FONT_MAP fi # Set console font and keymap if required [[ $CONSOLEFONT ]] && status "Loading Console Font: $CONSOLEFONT" set_consolefont [[ $KEYMAP ]] && status "Loading Keyboard Map: $KEYMAP" loadkeys -q $KEYMAP # bring up the loopback interface [[ -d /sys/class/net/lo ]] && status "Bringing up loopback interface" ip link set up dev lo # FakeRAID devices detection [[ $USEDMRAID = [Yy][Ee][Ss] && -x $(type -P dmraid) ]] && status "Activating FakeRAID arrays" dmraid -i -ay # Activate LVM2 groups, if any activate_vgs # Set up non-root encrypted partition mappings if [[ -f /etc/crypttab ]] && type -p cryptsetup >/dev/null; then read_crypttab do_unlock # Maybe someone has LVM on an encrypted block device activate_vgs fi # Check filesystems run_hook sysinit_prefsck if [[ -x $(type -P fsck) ]]; then stat_busy "Checking filesystems" fsck_all >|"${FSCK_OUT:-/dev/stdout}" 2>|"${FSCK_ERR:-/dev/stdout}" declare -r fsckret=$? (( fsckret <= 1 )) && stat_done || stat_fail else declare -r fsckret=0 fi run_hook sysinit_postfsck # Single-user login and/or automatic reboot if needed fsck_reboot $fsckret #status "Remounting root and API filesystems" \ # /usr/lib/systemd/systemd-remount-fs status "Remounting Root" \ mount -o remount / # Now mount all the local filesystems run_hook sysinit_premount status "Mounting local filesystems" \ mount_all run_hook sysinit_postmount # Enable monitoring of LVM2 groups, now that the filesystems are mounted rw [[ $USELVM = [Yy][Ee][Ss] && -x $(type -P lvm) && -d /sys/block ]] && status "Activating monitoring of LVM2 groups" \ vgchange --monitor y >/dev/null status "Activating swap" swapon -a [[ $TIMEZONE ]] && status "Configuring time zone" set_timezone "$TIMEZONE" #status 'Initializing random seed' /usr/lib/systemd/systemd-random-seed load [[ -f $RANDOM_SEED ]] && status "Initializing Random Seed" \ cp $RANDOM_SEED /dev/urandom # Remove leftover files remove_leftover stat_busy "Saving dmesg log" if [[ -e /proc/sys/kernel/dmesg_restrict ]] && (( $(< /proc/sys/kernel/dmesg_restrict) == 1 )); then install -Tm 0600 <( dmesg ) /var/log/dmesg.log else install -Tm 0644 <( dmesg ) /var/log/dmesg.log fi (( $? == 0 )) && stat_done || stat_fail run_hook sysinit_end # End of file # vim: set ts=2 sw=2 noet: