summaryrefslogtreecommitdiff
path: root/mkinitrd/mkinitramfs.sh
blob: 9e32cee093ac404d54bdc1c4b92c1b814a5e70cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/sh

BUILD=/tmp/ramfs
OUT=${1-/boot/initramfs-linux.img}


# create base directory structure
printf "creating directories..."

[ -e $BUILD ] && rm -rf $BUILD
mkdir -p $BUILD/tmp

cd $BUILD
mkdir -p bin dev etc lib proc run sbin sys usr
mkdir -p lib/firmware lib/modules lib/udev
mkdir -p etc/modprobe.d etc/udev

ln -s lib lib64
ln -s ../bin usr/bin
ln -s ../sbin usr/sbin
printf "OK\n"

# copy binaries
printf "populating /bin..."
for b in dash cat cp dd killall kmod ln ls mkdir \
    mknod mount rm sed sleep umount uname \
    basename readlink printf echo udevadm; do
    cp -a /bin/$b bin/
done
ln -s dash bin/sh
ln -s kmod bin/insmod
ln -s kmod bin/lsmod
printf "OK\n"

# create nodes for udev to mount
printf "creating nodes..."
mknod -m 600 dev/console c 5 1
mknod -m 666 dev/null c 1 3
printf "OK\n"

# Copy udev configuration
printf "configuring udev..."
cp  /etc/udev/udev.conf etc/udev/
cp -r /etc/udev/rules.d   etc/udev/
cp -r /lib/udev/*         lib/udev/
printf "OK\n"

# set module order
touch etc/modprobe.d/modprobe.conf

# copy the init script
printf "installing init script..."
cp /sbin/initramfs-init sbin/init
printf "OK\n"

# copy required libraries
printf "populating /lib..."
for l in c acl attr blkid cap kmod lzma mount ncursesw readline z curses history zstd; do
        cp /lib/lib$l.so lib/
done
ln -s libc.so /ld-musl-$(uname -m).so.1
printf "OK\n"

# copy any firmware
[ -d /lib/firmware ] && {
    printf "installing firmware..."
    cp -r /lib/firmware/* lib/firmware/
    printf "OK\n"
}

# copy any modules
printf "installing modules..."
cp  -r /lib/modules/* lib/modules/
printf "OK\n"

# create the initramfs image
printf "creating initramfs image..."
find ./ | cpio -o -H newc | gzip -9 > $OUT
printf "OK\n"

printf "Written initramfs image to $OUT\n"