summaryrefslogtreecommitdiffstats
path: root/setup-disk.in
blob: 377dc3278599987a29a1fcdc87751959dda8649f (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
#!/bin/sh

PREFIX=
. "$PREFIX/lib/libalpine.sh"


in_list() {
	local i="$1"
	shift
	while [ $# -gt 0 ]; do
		[ "$i" = "$1" ] && return 0
		shift
	done
	return 1
}

enumerate_fstab() {
	[ -z "$1" ] && return
	grep "/$1" /proc/mounts | \
		sed "s-/$1-/-; s-//-/-"
}

install_mounted_root() {
	local mnt="$1"

	rootdev=$(awk "\$1 == \"$mnt\" { print \$1 }")
	if [ -z "$rootdev" ]; then
		echo "$mnt does not seem to be a mount point" >&2
		return 1
	fi

	rootdisk=${rootdev%[0-9]*}

	echon "Installing system on $rootdev: "
	lbu package - | tar -C "$mnt" -zx
	apk add -q --progress --root "$mnt" $(cat "$mnt"/var/lib/apk/world) \
		linux-grsec linux-grsec-mod acct mkinitfs
	echo ""
	# make things bootable
	kernel=$(ls "$mnt"/lib/modules)
	chroot "$mnt" /sbin/mkinitfs -F "ata base bootchart cdrom ext3 ide scsi usb" $kernel

	# create an extlinux.conf
	sed '/append initrd/d' /media/*/syslinux.cfg > "$mnt"/boot/extlinux.conf
	echo -e "\tappend initrd=/boot/grsec.gz root=$rootdev modules=ext3 quiet" >> "$mnt"/boot/extlinux.conf

	# fix the fstab
	enumerate_fstab "$mnt" >> "$mnt"/etc/fstab

	# install extlinux
	apk add -q syslinux
	extlinux -i "$mnt"/boot
	umount "$mnt"

	# fix mbr
	dd if=/usr/share/syslinux/mbr.bin of=$rootdisk
	echo ""
	echo "Installation is done. Please reboot."
	apk del -q syslinux
}

useall() {
	local i size
	echo "Creating root partition..."
	apk_add -q parted e2fsprogs
	# erase all partitions
	for i in $(parted /dev/$rootdisk print | awk '$1 ~ /[0-9]+/ {print $1}'); do
		parted /dev/$rootdisk rm $i >/dev/null
	done
	# create new partition
	size=$(parted /dev/$rootdisk print | awk '/^Disk / {print $3}')
	parted /dev/$rootdisk mkpart primary 0 $size >/dev/null
	parted /dev/$rootdisk set 1 boot on >/dev/null
 
	# create device node if not exist
	mdev -s
	rootdev=/dev/${rootdisk}1

	mkfs.ext3 -q $rootdev
	# we are done with parted and dont want it in the lbu package
	apk del -q parted e2fsprogs

	mount -t ext3 $rootdev /mnt || return 1
	install_mounted_root /mnt
}

if [ -d "$1" ]; then
	# install to given mounted root
	install_mounted_root "$1"
	exit $?
fi

usbdisk=$(readlink /dev/usbdisk)
disks=
cd /dev
for i in sd[a-z] hd[a-z]; do
	case "$usbdisk" in
		$i[0-9]*);;
		*) [ -b "$i" ] && disks="$disks $i";;
	esac
done

# no disks so lets exit quietly.
[ -z "$disks" ] && exit 0

rootdisk=
while ! in_list "$rootdisk" $disks "none" "abort"; do
	echo "Available disks are: $disks"
	echon "Which one is the root disk? (or none) [none] "
	default_read rootdisk "none"
done

[ -b "/dev/$rootdisk" ] || exit 0

echon "Do you want use *all* of $rootdisk for Alpine? (y/n) [n] "
default_read useall "n"
case "$useall" in
	[Yy]*) useall="yes";;
esac

if [ "x$useall" != "xyes" ]; then
	echo "Only 'use all' option is available at the moment. Sorry"
	exit 1
fi

useall