|
Při použití překrývání adresářové struktury na disku přes overlay by měla mít klientská pracovní stanice vždy k dispozici lokální swapovací oddíl, který jí umožní v případě nutnosti uvolnit část dat z docházející fyzické paměti.
|
Překrytí systémového disku
Překrytí systémového disku zajišťují dva skripty, umístěné v ramdisku.
Vyžadují instalaci nástrojů v initramfs-tools
- root_overlay
- Překryje systémový disk připojený přes NFS pomocí aufs
- nfsrootsetup
- Vygeneruje nový obsah souboru
/etc/hosts
, ve kterém použije doménové jméno nfsroot pro aktuální NFS server
root_overlay
|
#!/bin/sh
# Remounting root as unionfs or aufs
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
echo "Preparing overlay filesystem ..."
if ! grep -q aufs /proc/filesystems ; then
modprobe aufs >/dev/null 2>/dev/null
if ! grep -q aufs /proc/filesystems ; then
if ! insmod ${rootmnt}/lib/modules/$(uname -r)/extra/aufs/aufs.ko ; then
echo "Cannot insert aufs module."
FLAG_NO_AUFS=y
fi
fi
fi
if [ "$FLAG_NO_AUFS" == "y" ] ; then
if ! grep -q unionfs /proc/filesystems ; then
modprobe unionfs >/dev/null 2>/dev/null
if ! grep -q unionfs /proc/filesystems ; then
insmod ${rootmnt}/lib/modules/$(uname -r)/extra/unionfs/unionfs.ko || panic "Cannot insert unionfs module."
fi
fi
FLAG_USE_UNIONFS=y
fi
mkdir /tmp/unirw
mount -n -t tmpfs none /tmp/unirw
if [ "$FLAG_USE_UNIONFS" == "y" ] ; then
echo "Remounting root as unionfs ..."
mount -n -t unionfs -o dirs=/tmp/unirw=rw:${rootmnt}=ro unionfs ${rootmnt}
else
echo "Remounting root as aufs ..."
mount -n -t aufs -o dirs=/tmp/unirw=rw:${rootmnt}=nfsro unionfs ${rootmnt}
fi
mkdir -p ${rootmnt}/overlay/unirw
mount -n -o move /tmp/unirw ${rootmnt}/overlay/unirw
chmod 755 ${rootmnt} # Disable rw access for non-root users
mkdir -p ${rootmnt}/tmp
mkdir -p ${rootmnt}/var/lock
|
nfsrootsetup
|
#!/bin/sh
# Setup hostnames according to IP address and create /etc/hosts
PREREQ="root_overlay"
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
echo "Setting hostname..."
# Bring in the main config
. /conf/initramfs.conf
# source relevant ipconfig output
. /tmp/net-*.conf
if [ -z "${HOSTNAME}" ]; then # No hostname sent by DHCP
case "${IPV4ADDR}" in
147.32.86.*) HOSTNAME="dcezam-${IPV4ADDR##*.}";;
147.32.87.*) HOSTNAME="dcestud-${IPV4ADDR##*.}";;
192.168.136.*) HOSTNAME="k09-${IPV4ADDR##*.}";;
192.168.202.*) HOSTNAME="k2-${IPV4ADDR##*.}";;
*) HOSTNAME="dcelinux-${IPV4ADDR}";;
esac
fi
[ -z "${DNSDOMAIN}" ] && DNSDOMAIN=local
rm -f ${rootmnt}/etc/hostname
echo ${HOSTNAME} > ${rootmnt}/etc/hostname
# Create /etc/hosts with correct IP for the server
rm -f ${rootmnt}/etc/hosts
cat <<EOF > ${rootmnt}/etc/hosts
127.0.0.1 localhost
${IPV4ADDR} ${HOSTNAME}.${DNSDOMAIN} ${HOSTNAME}
${nfsroot%%:*} nfsroot
EOF
exit 0
|
Doplňkové operace...
- k335linux
- Skript, který symlinkuje adresář /opt
- findswap
- Skript, který se snaží najít a aktivovat lokální swap
k335linux
|
#! /bin/sh
### BEGIN INIT INFO
# Provides: k335linux
# Required-Start: $remote_fs
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Creates symlink in /opt
# Description:
### END INIT INFO
#
# k335linux K335 diskless linux setup helpers.
#
# Base on skeleton by Miquel van Smoorenburg <miquels@cistron.nl>.
# Modified for Debian
# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
# Version: @(#)k335linux 1.0 12-Jan-2011 pisa@cmp.felk.cvut.cz
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=k335linux
DESC="station configuration"
# Include k335linux defaults if available
if [ -f /etc/default/k335linux ] ; then
. /etc/default/k335linux
fi
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
#echo -n "xconf"
#/usr/local/bin/xconf > /dev/null
echo "."
;;
stop)
# echo -n "Stopping $DESC: "
# echo "."
;;
force-reload)
$0 restart \
|| exit 0
;;
restart)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
|
Připojení swapu - findswap
|
#!/bin/sh
### BEGIN INIT INFO
# Provides: findswap
# Required-Start: mountall
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Find all unused swap partitions to enable swapping on them
# Description:
### END INIT INFO
do_start() {
SWAPCANDIDATES="$(cat /proc/partitions | sed -n -e 's/^.* \([hs]d[a-z][0-9]\)$/\1/p' -e 's/^.* \(xvd[a-z][0-9]\)$/\1/p')"
for i in $SWAPCANDIDATES ; do
if [ "$( blkid -s TYPE /dev/$i -o value )" = "swap" ] ; then
grep -q "/dev/$i" /proc/swaps
if [ $? -ne 0 ] ; then
echo "Adding swap device /dev/$i."
swapon "/dev/$i"
fi
fi
done
}
case "$1" in
start|"")
do_start
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
# No-op
;;
*)
echo "Usage: $0 [start|stop]" >&2
exit 3
;;
esac
|
Mount uživatelských adresářů
Využívá souboru /etc/hosts, který vygeneroval skript v ramdisku
Využití překrytí při přípravě binárních distribučních balíků