summaryrefslogtreecommitdiff
path: root/src/core/procedures/quickinst
blob: b95bfa44c56b99ed251e9a243bd10ae513310c4b (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
#!/bin/bash
depend_procedure core base

# This is a port of the original /arch/quickinst script.

# TODO: nowhere rely on /tmp


# TODO: find a way to make profilespecific arguments and usage function work (see src/aif.sh)
usage() {
	echo "quickinst <install_mode> <destdir> <package_directory|server_url>"
	echo
	echo "This script is for users who would rather partition/mkfs/mount their target"
	echo "media manually than go through the routines in the setup script."
	echo
	echo "First make sure you have all your filesystems mounted under <destdir>."
	echo "e.g. mount -t iso9660 /dev/sdc or /dev/sr0 (for new naming sheme) /src "
	echo "Then run this script to install all base packages to <destdir>."
	echo
	if [ -e /usr/bin/wget ]; then
		echo "<install_mode> must be either 'ftp' or 'cd'"
	else
		echo "<install_mode> must be 'cd'"
	fi
	echo
	echo "Examples:"
	if [ -e /usr/bin/wget ]; then
		echo "  quickinst ftp /mnt ftp://ftp.archlinux.org/core/os/$var_ARCH"
	fi

	echo "  quickinst cd  /mnt /src/core/pkg"
	echo ""
	exit 0
}


# TODO: implement correctly
worker_configure ()
{
#	var_PKG_SOURCE_TYPE
#	var_TARGET_DIR
#	var_FILE_URL or var_SYNC_URL 
}

# TODO: clean up everything below this

PACMAN=
[ -f /tmp/usr/bin/pacman.static ] && PACMAN=/tmp/usr/bin/pacman.static
[ -f /usr/bin/pacman.static ] && PACMAN=/usr/bin/pacman.static
if [ "$PACMAN" = "" ]; then
	cd /tmp
	if [ "$INSTMODE" = "ftp" ]; then
		echo "Downloading pacman..."
		wget $PKGARG/pacman*.pkg.tar.gz
		if [ $? -gt 0 ]; then
			echo "error: Download failed"
			exit 1
		fi
		tar -xzf pacman*.pkg.tar.gz
	elif [ "$INSTMODE" = "cd" ]; then
		echo "Unpacking pacman..."
		tar -xzf $PKGARG/pacman*.pkg.tar.gz
	fi
fi
[ -f /tmp/usr/bin/pacman.static ] && PACMAN=/tmp/usr/bin/pacman.static
if [ "$PACMAN" = "" ]; then
	echo "error: Cannot find the pacman.static binary!"
	exit 1
fi

if [ "$INSTMODE" = "ftp" ]; then
	echo "[core]" >/tmp/pacman.conf
	echo "Server = $PKGARG" >>/tmp/pacman.conf
	mkdir -p $DESTDIR/var/cache/pacman/pkg /var/cache/pacman >/dev/null 2>&1
	rm -f /var/cache/pacman/pkg >/dev/null 2>&1
	ln -sf $DESTDIR/var/cache/pacman/pkg /var/cache/pacman/pkg >/dev/null 2>&1
fi

if [ "$INSTMODE" = "cd" ]; then
	echo "[core]" >/tmp/pacman.conf
	echo "Server = file://$PKGARG" >>/tmp/pacman.conf
	mkdir -p $DESTDIR/var/cache/pacman/pkg /var/cache/pacman >/dev/null 2>&1
	rm -f /var/cache/pacman/pkg >/dev/null 2>&1
	ln -sf $PKGARG /var/cache/pacman/pkg >/dev/null 2>&1
fi

! [ -d $DESTDIR/var/lib/pacman ] && mkdir -p $DESTDIR/var/lib/pacman
! [ -d /var/lib/pacman ] && mkdir -p /var/lib/pacman
# mount proc/sysfs first, so mkinitrd can use auto-detection if it wants
! [ -d $DESTDIR/proc ] && mkdir $DESTDIR/proc
! [ -d $DESTDIR/sys ] && mkdir $DESTDIR/sys
! [ -d $DESTDIR/dev ] && mkdir $DESTDIR/dev
mount -t proc none $DESTDIR/proc
mount -t sysfs none $DESTDIR/sys
mount -o bind /dev $DESTDIR/dev	
$PACMAN -r $DESTDIR --config /tmp/pacman.conf -Sy base
umount $DESTDIR/proc $DESTDIR/sys $DESTDIR/dev
if [ $? -gt 0 ]; then
	echo
	echo "Package installation FAILED."
	echo
	exit 1
fi

echo 
echo "Package installation complete."
echo 
echo "Please install a bootloader.  Edit the appropriate config file for"
echo "your loader, and chroot into your system to install it into the"
echo "boot sector:"
echo "  # mount -o bind /dev $DESTDIR/dev"
echo "  # mount -t proc none $DESTDIR/proc"
echo "  # mount -t sysfs none $DESTDIR/sys"
echo "  # chroot $DESTDIR /bin/bash"
echo 
echo "For GRUB:"
echo "  # install-grub /dev/sda /dev/sdaX (replace with your boot partition)"
echo "  (or install manually by invoking the GRUB shell)"
echo "HINT XFS FILESYSTEM:" 
echo "If you have created xfs filesystems, freeze them before and unfreeze them after"
echo "installing grub (outside the chroot):"
echo "- freeze:"
echo "  # xfs_freeze -f $DESTDIR/boot"
echo "  # xfs_freeze -f $DESTDIR/"
echo "- unfreeze:"
echo "  # xfs_freeze -u $DESTDIR/boot"
echo "  # xfs_freeze -u $DESTDIR/"
echo 
echo "For LILO:"
echo "  # lilo"
echo
echo "Next step, initramfs setup:"
echo "Edit your /etc/mkinitcpio.conf and /etc/mkinitcpio.d/kernel26-fallback.conf"
echo "to fit your needs. After that run:" 
echo "# mkinitcpio -p kernel26"
echo 
echo "Then exit your chroot shell, edit $DESTDIR/etc/fstab and"
echo "$DESTDIR/etc/rc.conf, and reboot!"
echo 
exit 0