Konsol erişimi olan bir Seagate Dockstar'ına sahip olduktan sonra, Debian sıkmasını taktım. Salt okunur kök üzerinde çalışmasını sağlamak için bir başlangıç noktası olarak, Jeff Doozan'ın bu mükemmel 1. makalesini kullandım. Temel strateji, her önyüklemede gerekli yazılabilir dizinleri bir tmpfs olarak bağlayan bir komut dosyası oluşturmayı içerir. Komut dosyasını burada Jeff 2'den alıntı yapıyorum (Jeff için kudos!)
#!/bin/bash
DIRS="/tmp /var/log /var/run /var/lock /var/tmp /var/lib/urandom /var/lib/dhcp /etc/network/run"
for DIR in $DIRS; do
echo "Mounting $DIR as tmpfs"
mount -n -t tmpfs tmpfs $DIR
if [ -d "$DIR-saved" ]; then
echo "Restoring $DIR-saved to $DIR"
tar -C "$DIR-saved" -cf - ./ | tar -C "$DIR" -xpf -
fi
done
echo "nameserver 4.2.2.1" > /var/tmp/resolv.conf
touch /var/lib/dhcp/dhcpd.leases
exec /sbin/init
Yukarıdaki satırları / sbin / init-ro adlı bir komut dosyası olarak hedef kök dosyalarınıza kaydedin ve çalıştırılabilir yapın.
chmod 755 /sbin/init-ro
Bu komut dosyasını önyükleme süresi boyunca kullanmak için, sistem köklerini biraz hazırlamanız gerekir (tümü Jeff'in komut dosyası 2'den alıntılanır ( $ROOT
bağlı kök dosyalarınızın gerçek konumuna uyarlanır ).
# Configure dhcp-client to write resolv.conf to /tmp instead of /etc
sed -i 's/\/etc\/resolv.conf/\/var\/tmp\/resolv.conf/' $ROOT/sbin/dhclient-script > /dev/null 2>&1
rm $ROOT/etc/resolv.conf
ln -s /var/tmp/resolv.conf $ROOT/etc/resolv.conf
# make /etc/network/run/ a symlink to /tmp/network/
rm -rf $ROOT/etc/network/run
ln -s /var/tmp/network $ROOT/etc/network/run
# Fixes from http://wiki.debian.org/ReadonlyRoot
rm $ROOT/etc/blkid.tab > /dev/null 2>&1
ln -s /dev/null $ROOT/etc/blkid.tab
rm $ROOT/etc/mtab > /dev/null 2>&1
ln -s /proc/mounts $ROOT/etc/mtab
rm $ROOT/etc/rcS.d/S12udev-mtab
rm -rf $ROOT/var/log/*
Yukarıdaki gibi rootfs hazırladıktan sonra, rootfs / etc / fstab içine salt okunur bağlayabilirsiniz ( ext2'yi kullandığınız dosya sistemiyle değiştirin veya bunun yerine rootfs kullanın).
/dev/root / ext2 noatime,ro 0 1
Son olarak, betiği gerçek / sbin / init'ten önce çalıştırmak için çekirdek parametrelerine ( Raspi'de /boot/cmdline.txt dosyasında) aşağıdakileri eklemeniz gerekir . (Aşağıdaki sadece bir örnektir kök ve rootdelay parametreleri. hat eklenecek vardır önemli parçası Cmdline.txt olduğunu .)init=/sbin/init-ro
root=/dev/mmcblk0p2 rootdelay=2 init=/sbin/init-ro
Ancak kök dosyalarında yazma erişimi gerektiren herhangi bir yazılım için uygun tmpfs konumlarını bağlamanız veya harici depolama birimine yazmanız gerektiğini unutmayın.