Проект

Общее

Профиль

Initramfs » История » Версия 7

Андрей Волков, 2015-08-19 16:51

1 1 Андрей Волков
h1. Initramfs
2
3 3 Андрей Волков
/init
4 1 Андрей Волков
<pre>
5
#!/bin/busybox sh
6
7
# Mount the /proc and /sys filesystems.
8
mount -t proc none /proc
9
mount -t sysfs none /sys
10
11
# Do your stuff here.
12
echo "This script mounts rootfs and boots it up, nothing more!"
13
14
rescue_shell() {
15
    echo "Something went wrong. Dropping you to a shell."
16
    busybox --install -s
17
    exec /bin/sh
18
}
19
20
mini_udev() {
21
    ln -s ../bin/busybox /sbin/mdev
22
    echo /sbin/mdev > /proc/sys/kernel/hotplug
23
    /sbin/mdev -s
24
}
25
26
# Use devtmpfs if possible
27
if grep -qs devtmpfs /proc/filesystems; then
28
    mount -n -t devtmpfs -o "exec,nosuid,mode=0755,size=10M" udev /dev
29
    devtmpfs=true
30
else    
31
    mini_udev
32
    devtmpfs=false
33
fi
34
35
uuidlabel_root() {
36
    for cmd in $(cat /proc/cmdline) ; do
37
        case $cmd in
38
        root=*)
39
40 2 Андрей Волков
	    mkdir -p /etc/lvm
41
	    echo 'devices { filter = [ "a|/dev/md[0-9]+$|", "a|/dev/[hsv]d[a-z][0-9]*$|", "r/.*/" ] }' > /etc/lvm/lvm.conf
42
43 4 Андрей Волков
	    echo 'activation { udev_rules = 0 }' >> /etc/lvm/lvm.conf
44
45 1 Андрей Волков
	    /sbin/lvm vgscan
46
	    /sbin/lvm vgchange -ay --sysinit
47
48
            type=$(echo $cmd | cut -d= -f2)
49
            if [ $type == "LABEL" ] || [ $type == "UUID" ] ; then
50
                uuid=$(echo $cmd | cut -d= -f3)
51
                mount -o ro $(blkid |grep "$type=\"$uuid\"" | cut -d: -f1 | grep -v '/dev/dm-[0-9]*$\|-real$' | sort | head -n1 ) /mnt/root || rescue_shell
52
            else
53
                mount -o ro $(echo $cmd | cut -d= -f2) /mnt/root || rescue_shell
54
            fi
55
            ;;
56
	rescue)
57
	    rescue_shell
58
	    ;;
59
        esac
60
    done
61
}
62
63
uuidlabel_root || rescue_shell
64
65
# Remount /dev if devtmpfs
66
$devtmpfs && mount -n --move /dev /mnt/root/dev
67
68
# Clean up.
69
umount /proc
70
umount /sys
71
72
# Boot the real thing.
73
exec switch_root /mnt/root /sbin/init
74 3 Андрей Волков
</pre>
75
76 6 Андрей Волков
h3. Вариант с gzip
77
78 3 Андрей Волков
<pre>
79
cd initramfs
80
find | cpio -o -H newc | gzip -9 > ../initramfs-2012-04-03.igz
81 7 Андрей Волков
</pre>
82 6 Андрей Волков
83
h3. Вариант с xz
84
85 7 Андрей Волков
<pre>
86 6 Андрей Волков
cd initramfs
87
find | cpio -o -H newc | xz -v --check=crc32 --x86 --lzma2 > ../initramfs-2015-04-03.ixz
88 1 Андрей Волков
</pre>
89 5 Андрей Волков
90
для сборки i686:
91
92
/etc/paludis/bashrc
93
94
<pre>
95
CC="x86_64-pc-linux-gnu-gcc -m32"
96
</pre>
97
98
для dropbear --enable-static-nss (glibc)
99
100
/etc/paludis/use.conf.d/initramfs.conf
101
102
<pre>
103
dev-libs/libtommath static-libs
104
net-misc/dropbear minimal -pam -shadow static -zlib
105
dev-libs/popt static-libs
106
net-misc/rsync static -drop_cache -iconv -ipv6
107
sys-fs/lvm2 static -udev
108
sys-apps/busybox -ipv6 static
109
</pre>