Commit | Line | Data |
---|---|---|
00c769e1 | 1 | #!/bin/bash |
b70e0e65 JB |
2 | # |
3 | # mkinitrd.sh: Shell script to make an initial initrd image | |
4 | # by Jose V Beneyto, sepen at crux dot nu | |
5 | ||
00c769e1 VM |
6 | CONFIG_SHELL=/bin/bash |
7 | ||
b70e0e65 JB |
8 | msgUsage() { |
9 | echo "Usage: $APPNAME <options>" | |
10 | echo "Where options are:" | |
11 | echo " --name=NAME Name for the result image (default: initrd.gz)" | |
12 | echo " --size=SIZE Size expecified in bytes (default: 4096)" | |
13 | echo " --type=TYPE Filesystem type for the image (default: ext2)" | |
14 | echo "Example:" | |
15 | echo " $APPNAME --name=myinitrd.gz --size=8192" | |
16 | exit 0 | |
17 | } | |
18 | ||
19 | msgError() { | |
20 | echo "Error, $@" 2>&1 | |
21 | exit 1 | |
22 | } | |
23 | ||
24 | checkRoot() { | |
25 | [ "$(id -u)" != "0" ] && msgError "you need to be root to do this." | |
26 | } | |
27 | ||
28 | parseArgs() { | |
29 | [ $# -lt 1 ] && msgUsage | |
30 | for arg in $@; do | |
31 | case $arg in | |
32 | --name=*) IMG_NAME=${arg##*=} ;; | |
33 | --size=*) IMG_SIZE=${arg##*=} ;; | |
34 | --type=*) IMG_TYPE=${arg##*=} ;; | |
35 | *) msgUsage ;; | |
36 | esac | |
37 | done | |
38 | } | |
39 | ||
40 | main() { | |
41 | rm -rf $TMP_PATH $MNT_PATH | |
42 | install -d $TMP_PATH $MNT_PATH | |
43 | pushd $TMP_PATH && \ | |
44 | rm -f initrd | |
45 | dd if=/dev/zero of=initrd bs=1024 count=$IMG_SIZE && \ | |
46 | mkfs.$IMG_TYPE -F -m 0 -b 1024 initrd $IMG_SIZE && \ | |
47 | mount -v -o loop -t $IMG_TYPE initrd $MNT_PATH && \ | |
48 | rm -rf $MNT_PATH/lost+found && \ | |
3392dc0d | 49 | install -d -m 0755 $MNT_PATH/{mnt,media,etc,dev,sys,proc,lib,usr,var/{log,lock,run},tmp} && \ |
b70e0e65 JB |
50 | mknod $MNT_PATH/dev/console c 5 1 && chmod 666 $MNT_PATH/dev/console && \ |
51 | mknod $MNT_PATH/dev/null c 1 3 && chmod 666 $MNT_PATH/dev/null && \ | |
52 | mknod $MNT_PATH/dev/tty c 5 0 && chmod 666 $MNT_PATH/dev/tty && \ | |
53 | mkdir $MNT_PATH/dev/rd && mknod $MNT_PATH/dev/rd/0 b 1 0 | |
54 | mknod $MNT_PATH/dev/ram0 b 1 0 && chmod 600 $MNT_PATH/dev/ram0 | |
55 | for i in 0 1 2 3 4 5 6 7; do | |
56 | mknod $MNT_PATH/dev/tty$i c 4 $i && chmod 666 $MNT_PATH/dev/tty$i | |
57 | done && \ | |
58 | umount -v $MNT_PATH && \ | |
59 | gzip -v initrd && \ | |
60 | popd && \ | |
61 | mv $TMP_PATH/initrd.gz $IMG_NAME | |
62 | } | |
63 | ||
64 | APPNAME="$(basename $0)" | |
65 | ||
66 | TMP_PATH="$(cd $(dirname $APPNAME); pwd)/.tmp" | |
67 | MNT_PATH="$(cd $(dirname $APPNAME); pwd)/.mnt" | |
68 | ||
69 | IMG_SIZE=4096 # default image size = 4MB | |
70 | IMG_TYPE=ext2 # default filesystem type = ext2 | |
71 | ||
72 | export PATH=$PATH:/sbin:/usr/sbin | |
73 | ||
74 | checkRoot | |
75 | parseArgs $@ && \ | |
76 | main || msgError "$APPNAME failed" | |
77 | ||
78 | umount -v $MNT_PATH | |
79 | rm -rf $TMP_PATH $MNT_PATH | |
80 | ||
81 | # End of file |