CRUX-ARM : Home

Home :: Documentation :: Download :: Development :: Community :: Ports :: Packages :: Bugs :: Links :: About :: Donors
initrd: fixed setup, setup-helper, crux and rc files
[initrd.git] / mkinitrd.sh
1 #!/bin/bash
2 #
3 # mkinitrd.sh: Shell script to make an initial initrd image
4 # by Jose V Beneyto, sepen at crux dot nu
5
6 CONFIG_SHELL=/bin/bash
7
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 && \
49 install -d -m 0755 $MNT_PATH/{mnt,media,etc,dev,sys,proc,lib,usr,var/{log,lock,run},tmp} && \
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