setup-disk 2.31 KB
Newer Older
Natanael Copa's avatar
Natanael Copa committed
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
#!/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
}

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

	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 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
	echo -e "$rootdev\t/\t\text3\tdefaults\t1 1" >> /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=/dev/$rootdisk
	echo ""
	echo "Installation is done. Please reboot."
	apk del -q syslinux

}

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