summaryrefslogtreecommitdiff
path: root/package/adkinstall/src/adkinstall
blob: b9b0e3109e490f0f6f1e917dbf0a3f55dc316217 (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#!/bin/sh
# installs a rootfs tar archive from OpenADK onto a Compact Flash disk

check_exit() {
        if [ $? -ne 0 ];then
                echo "Installation failed."
                exit 1
        fi
}

rescue=0
while getopts "r" option
do
	case $option in
		r)
			rescue=1
			;;
		*)
			printf "Option not recognized\n"
			exit 1
			;;
	esac
done
shift $(($OPTIND - 1))

if [ -z $1 ];then
        printf "Please give your root tar archive as parameter\n"
        exit 1
fi

if [ $rescue -eq 1 ];then
	if [ -z $2 ];then
		printf "Please give your rescue kernel image as second parameter\n"
		exit 2
	fi
	if [ ! -f $2 ];then
		printf "$2 is not a file, Exiting.\n"
		exit 1
	fi
fi

printf "Creating partitions ...\n"
parted -s /dev/sda mklabel msdos
check_exit
sleep 2
maxsize=$(env LC_ALL=C parted /dev/sda -s unit cyl print |awk '/^Disk/ { print $3 }'|sed -e 's/cyl//')
rootsize=$(($maxsize-2))
start=0
rootp=1
cfgfsp=2
if [ $rescue -eq 1 ];then
	rootp=3
	cfgfsp=4
	start=2
	parted -s /dev/sda unit cyl mkpart primary ext2 0 1
	check_exit
	mke2fs /dev/sda1
	check_exit
	parted -s /dev/sda unit cyl mkpart primary ext2 1 2
	check_exit
	mke2fs /dev/sda2
	check_exit
fi
parted -s /dev/sda unit cyl mkpart primary ext2 $start $rootsize
check_exit
mke2fs /dev/sda1
check_exit
parted -s /dev/sda unit cyl mkpart primary fat32 $rootsize $maxsize
check_exit
parted -s /dev/sda set $rootp boot on
check_exit
sfdisk --change-id /dev/sda $cfgfsp 88 >/dev/null 2>&1
check_exit
# settle down
sleep 2
mount -t ext2 /dev/sda$rootp /mnt
check_exit
printf "Extracting install archive ...\n"
tar -C /mnt -xzpf $1
check_exit
chmod 1777 /mnt/tmp
chmod 4755 /mnt/bin/busybox
if [ $rescue -eq 1 ];then
	mkdir /mnt/boot/grub
fi

speed=$(awk -F \, '/console=ttyS0/ { print $2 }' /proc/cmdline|sed -e "s/ .*$//")

if [ $rescue -eq 1 ];then
	umount /mnt
	mount /dev/sda2 /mnt
	cp $2 /mnt/rescue
fi
printf "Installing bootloader ...\n"
mkdir -p /mnt/boot/grub
if [ $rescue -eq 1 ];then
mount /dev/sda1 /mnt/boot/grub
cat << EOF > /mnt/boot/grub/grub.cfg
set timeout=1
serial --unit=0 --speed=$speed
terminal_output serial 
terminal_input serial 

if [ -s \$prefix/grubenv ]; then
  load_env
fi

set default="\${saved_entry}"

if [ \${prev_saved_entry} ]; then
  set saved_entry=\${prev_saved_entry}
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z \${boot_once} ]; then
    saved_entry=\${chosen}
    save_env saved_entry
  fi
}

function recordfail {
  set recordfail=1
  if [ -n \${have_grubenv} ]; then if [ -z \${boot_once} ]; then save_env recordfail; fi; fi
}

menuentry "GNU/Linux (OpenADK)" {
	recordfail
        insmod ext2
        set root=(hd0,3)
        linux /boot/kernel root=/dev/sda$rootp ro init=/init panic=10
}

menuentry "GNU/Linux (OpenADK) Rescue Mode" {
	recordfail
        insmod ext2
        set root=(hd0,2)
        linux /rescue ro init=/init panic=10
}
EOF
else
cat << EOF > /mnt/boot/grub/grub.cfg
set default=0
set timeout=1
serial --unit=0 --speed=$speed
terminal_output serial 
terminal_input serial 

menuentry "GNU/Linux (OpenADK)" {
        insmod ext2
        set root=(hd0,1)
        linux /boot/kernel root=/dev/sda$rootp ro init=/init panic=10
}
EOF
fi
grub-install --root-directory=/mnt /dev/sda 
check_exit
if [ $rescue -eq 1 ];then
	grub-set-default --root-directory=/mnt 0
	umount /mnt/boot/grub
fi
umount /mnt
printf "Successfully installed. You can reboot now.\n"
exit 0