archboot/installer/quickinst
2008-10-20 22:39:25 +02:00

158 lines
4.6 KiB
Bash
Executable file

#! /bin/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
if [ "$(uname -m)" = "x86_64" ]; then
echo " quickinst ftp /mnt ftp://ftp.archlinux.org/core/os/x86_64"
else
echo " quickinst ftp /mnt ftp://ftp.archlinux.org/core/os/i686"
fi
fi
echo " quickinst cd /mnt /src/core-$(uname -m)/pkg"
echo ""
exit 0
}
INSTMODE=$1
DESTDIR=$2
PKGARG=$3
if [ "$PKGARG" = "" ]; then
usage
fi
! [ -d /tmp ] && mkdir /tmp
# sometimes this gets mounted RO, dunno why
/bin/mount -o remount,rw / >/dev/null 2>&1
PACMAN=
[ -f /tmp/usr/bin/pacman ] && PACMAN=/tmp/usr/bin/pacman
[ -f /usr/bin/pacman ] && PACMAN=/usr/bin/pacman
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 ] && PACMAN=/tmp/usr/bin/pacman
if [ "$PACMAN" = "" ]; then
echo "error: Cannot find the pacman 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
PKGFILE=/tmp/packages.txt
cp $PKGARG/packages.txt /tmp/packages.txt
if [ ! -f $PKGFILE ]; then
echo "error: Could not find package list: $PKGFILE"
exit 1
fi
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
PKGLIST=
# fix pacman list!
sed -i -e 's/-i686//g' -e 's/-x86_64//g' $PKGFILE
for i in $(cat $PKGFILE | grep 'base/' | cut -d/ -f2); do
nm=${i%-*-*}
PKGLIST="$PKGLIST $nm"
done
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
if [ "$INSTMODE" = "cd" ]; then
$PACMAN -r $DESTDIR --config /tmp/pacman.conf -Sy $PKGLIST
fi
if [ "$INSTMODE" = "ftp" ]; then
$PACMAN -r $DESTDIR --config /tmp/pacman.conf -Sy base
fi
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