if I haven't forgotten something...
famous last words... I forgot a few things. but this version puts you much closer to having a working system in 90 minutes or less. All you need to do is:
boot off of life CD mkdir /mnt/flash mount /dev/sda1 /mnt/flash #(don't forget -t vfat if necessary) edit /mnt/flash/gentoo/config #(to meet your requirements) bash /mnt/flash/gentoo/phase1.sh #( to start everything off)
when it comes time, menuconfig will come up and let you configure the kernel.
current problems are getting modules to automatically load and automatically setting the password. I may just used to make the root password go away at login so you can get in without first putting single user mode but I'm not really comfortable with that for obvious reasons. on the module loading problem, I'm coming to the opinion that if you need a module at boot time, it should just be built into the kernel. YKMV.
I think this will be the last posting of this code, eventually I will put up Web accessible page or two on these pieces and I will post a notice at that point.
---eric
-- http://www.wired.com/wired/archive/13.03/view.html?pg=5
The result of the duopoly that currently defines "competition" is that prices and service suck. We're the world's leader in Internet technology - except that we're not.
# config variables HOST_NAME=rufus DOMAIN_NAME=harvee.org DRIVE=/dev/hda
# CPUTYPE="i686"
CPUTYPE="pentium3"
MKFS2="mke2fs"
MKFS3="mke2fs -j"
MKFSR="mkreiserfs -q"
MKSWP="mkswap"
PART_ROOT="3"
DRIVE_ROOT="/dev/hda"
# format of the filesystem list is:
# partition number:filesystem command
# create the entries in the order in which they will be created and
# mounted.
PART_ORDER=(1 2 3)
# order of the elements in each entry:
# partition number: mount point: file system format command
PART_LIST[1]="3:/mnt/gentoo:${MKFSR}"
PART_LIST[2]="1:/mnt/gentoo/boot:${MKFS3}"
PART_LIST[3]="2::${MKSWP}"
# proxy configurations to say to wear and tear gentoo servers
# replicated below in constructing make.conf
SYNC="rsync://192.168.25.11/gentoo-portage"
http_proxy=http://192.168.25.11:8080
RESUMECOMMAND=" /usr/bin/wget -t 5 --passive-ftp \${URI} -O
\${DISTDIR}/\${FILE}"
# if ethernet module is not detected automatically, list module here
ETHERMODULE=""
# DHCP usually requires nothing but if module is manually loaded.
# activate command here
DHCPCD_CMD="dhcpcd"
#otherwise enter static IP information. Note, DHCP takes priority
#over static information
# static IP address
IP_ADDR=192.168.25.11
BROADCAST=192.168.25.0
NETMASK=255.255.255.0
GATEWAY=192.168.25.254
NAMESERVER=192.168.25.1
# PCMCIA?? "Y" to turn on "" to turn off
PCMCIA="y"
# bail if config only
if [ -z $1 ] ; then
# partitions
# describe your partitions here in sfdisk format
PARTITIONS=`mktemp `|| exit 1
cat > $PARTITIONS <<EOF
0,200,L
,1000,S
,,L
;
EOF
# your default make.conf
MAKE_CONF=`mktemp `|| exit 1
cat > $MAKE_CONF <<EOF
MAKEOPTS="-j3"
AUTOCLEAN="yes"
PORTDIR_OVERLAY=/usr/local/portage
USE="mmx sse alsa oss aim emacs fastcgi gphoto2 imap maildir mozilla pcmcia
python usb gdbm pam png berkdb apache2 perl qt readline gif gtk gtk2 ldap mbox
mcal ncurses ssl wxwindows zlib"
SYNC="rsync://xeno/gentoo-portage"
http_proxy=http://xeno:8080
RESUMECOMMAND=" /usr/bin/wget -t 5 --passive-ftp \${URI} -O \${DISTDIR}/\${FILE
}"
EOF
# stage grub.conf and any other needed data
GRUB_CONF=`mktemp `|| exit 1
cat > $GRUB_CONF <<EOF
PCMCIA=${PCMCIA}
DRIVE_ROOT=${DRIVE_ROOT}
PART_ROOT=${PART_ROOT}
cat > /boot/grub/grub.conf <<PHASE2
# Which listing to boot as default. 0 is the first, 1 the second etc.
default 0
# How many seconds to wait before the default listing is booted.
timeout 30
# Nice, fat splash-image to spice things up :)
# Comment out if you don't have a graphics card installed
#splashimage=(hd0,0)/grub/splash.xpm.gz
title=Gentoo \${KERNEL_VERSION}
# Partition where the kernel image (or operating system) is located
root (hd0,0)
kernel /\${KERNEL_VERSION} root=${DRIVE_ROOT}${PART_ROOT}
PHASE2
EOF
FSTAB=`mktemp `|| exit 1
cat > $FSTAB <<EOF
# /etc/fstab: static file system information.
# $Header: /home/cvsroot/gentoo-src/rc-scripts/etc/fstab,v 1.14 2003/10/13
20:03:38 azarah Exp $
#
# noatime turns off atimes for increased performance (atimes normally aren't
# needed; notail increases performance of ReiserFS (at the expense of storage
# efficiency). It's safe to drop the noatime options if you want and to
# switch between notail and tail freely.
# <fs> <mountpoint> <type> <opts>
<dump/pass>
# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
/dev/hda3 / reiserfs noatime
0 0
/dev/hda1 /boot ext3 noatime
1 1
/dev/hda2 none swap sw
0 0
/dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro
0 0
#/dev/fd0 /mnt/floppy auto noauto
0 0
# NOTE: The next line is critical for boot!
none /proc proc defaults
0 0
# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for
# POSIX shared memory (shm_open, shm_unlink).
# (tmpfs is a dynamically expandable/shrinkable ramdisk, and will
# use almost no memory if not populated with files)
# Adding the following line to /etc/fstab should take care of this:
none /dev/shm tmpfs defaults
0 0
EOF
fi
#!/bin/bash
#phase one of gentoo install
. /mnt/flash/gentoo/config
# changes passwd
#passwd
### place network configuration set up here
# if ethernet module is not detected automatically, load it here
# modprobe <your Ethernet module here>
if [ -n "$ETHERMODULE" ] ; then
modprobe $ETHERMODULE
fi
if [ -n "$DHCPCD_CMD" ] ; then
eval $DHCPCD_CMD
else
ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up
route add default gw ${GATEWAY}
cat > /etc/resolv.conf <<EOF
nameserver ${NAMESERVER}
EOF
fi
# start sshd
/etc/init.d/sshd start
# get portage if no copy locally. This won't get the latest copy
# unless there is none
if [ ! -f /mnt/flash/gentoo/stages/portage ]; then
# ask the user for a portage mirror site
eval X`mirrorselect -i -o`
# grab the first selection
PORTAGE_SITE=`echo ${XGENTOO_MIRRORS}| cut -f1 -d" "`
PORTAGE_PATH=${PORTAGE_SITE}snapshots/
wget --proxy=off -O /tmp/index.html $PORTAGE_PATH
PORTAGE=`cat /tmp/index.html | egrep -v "md5sum|gpgsig"| grep portage| \
tail -n 1| cut -d" " -f 8| cut -f 2 -d">"| cut -f 1 -d"<"`
wget --proxy=off ${PORTAGE_PATH}/${PORTAGE} -O
/mnt/flash/gentoo/stages/portage
fi
# partition your disk.
# *CAUTION* this can really screw up your system.
# this creates four partitions. First field is the start, second field
# is the size in MB, and third field is the Linux or swap.
# it should be possible to add extended partitions but I haven't needed
# them yet
/sbin/sfdisk -uM ${DRIVE} < $PARTITIONS
# create swap space and file systems on the partitions created
# previously
for x in ${PART_ORDER[*]}
do
i=${PART_LIST[$x]}
PART=`echo $i | cut -d":" -f1`
MNTPT=`echo $i | cut -d":" -f2`
MKFS=`echo $i | cut -d":" -f3`
eval $MKFS ${DRIVE}${PART}
if [ "${MKFS}" == "${MKSWP}" ]; then
swapon ${DRIVE}${PART}
else
# mount up partitions
mkdir -p $MNTPT
mount ${DRIVE}${PART} $MNTPT
fi
done
# install the stage you want. It's probably a good idea to download and
# store the appropriate stage image on the USB flash. Saves trying to
# figure out which mirror to get from and its just convenient.
cd /mnt/gentoo
tar -xjpf /mnt/flash/gentoo/stages/stage?-${CPUTYPE}*.tar.bz2 -C /mnt/gentoo
tar -xjf /mnt/flash/gentoo/stages/portage -C /mnt/gentoo/usr
# and add the gentoo mirrors
mirrorselect -a -s4 -o |grep 'GENTOO_MIRRORS=' >> /mnt/gentoo/etc/make.conf
# set up DNS for the new system
cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
# set up domain name
echo ${HOST_NAME} > /mnt/gentoo/etc/hostname
echo ${DOMAIN_NAME} > /mnt/gentoo/etc/dnsdomainname
rc-update add domainname default
# and set up the /proc environment.
mount -t proc none /mnt/gentoo/proc
# copy all of the phases to the new drive in preparation
# for the rest of the installation process
cp /mnt/flash/gentoo/phase*.sh /mnt/gentoo/
cp /mnt/flash/gentoo/config /mnt/gentoo/
cp $GRUB_CONF /mnt/gentoo/grub.transient
cp $FSTAB /mnt/gentoo/etc/fstab
cat $MAKE_CONF >> /mnt/gentoo/etc/make.conf
if [[ -f /mnt/flash/gentoo/kernel_config ]]; then
cp /mnt/flash/gentoo/kernel_config /mnt/gentoo/
fi
# set up the network interface
if [ -z "${DHCPCD_CMD}" ] ; then
grep -v "^iface_eth0" /mnt/gentoo/etc/conf.d/net > /tmp/net
echo iface_eth0=\"${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK}\">>
/tmp/net
echo gateway=\"eth0/${GATEWAY}\" >> /tmp/net
cp /tmp/net /mnt/gentoo/etc/conf.d/net
else
echo "iface_eth0=\"dhcp\"" >> /mnt/gentoo/etc/conf.d/net
fi
# directories to build
mkdir /mnt/gentoo/usr/local/portage
# launch phase 2
chroot /mnt/gentoo /bin/bash -c "bash phase2.sh"
#!/bin/bash
#this is the chroot side of the installation process
#set up the new environment
env-update
source /etc/profile
# update the portage tree
emerge --sync
#get the kernel
emerge vanilla-sources
# at this point, one could copy in a predefined configuration
# file or one could just manually configure.
cd /usr/src/linux
#let's manually configure
if [[ -f /kernel_config ]]; then
cp /kernel_config /usr/src/linux/.config
else
make menuconfig
fi
# then build the kernel
make && make modules_install
# move it
cd /usr/src
KERNEL_VERSION=`ls -d linux-*`
cd /usr/src/${KERNEL_VERSION}/
cp arch/i386/boot/bzImage /boot/${KERNEL_VERSION}
cp System.map /boot/System.map-${KERNEL_VERSION}
cp .config /boot/config-${KERNEL_VERSION}
emerge syslog-ng
rc-update add syslog-ng default
emerge vixie-cron
rc-update add vixie-cron default
emerge dhcpcd
emerge slocate
emerge reiserfsprogs
emerge grub
emerge gentoolkit
# finish creating grub file and installing grub
. /grub.transient
cp /proc/mounts /etc/mtab
grub-install $DRIVE_BOOT
# pickup pcmcia symbol in grub cross over. need better way.
if [ -n $PCMCIA ] ; then
USE="-X" emerge pcmcia-cs
rc-update add pcmcia default
fi
# more start up processes
rc-update add net.eth0 default
rc-update add sshd default
if [ -f /phase3 ] ; then
bash /phase3
fi
#!/bin/bash
TARGET=/dev/hda
if [ ! -f /mnt/gentoo/etc/make.conf ]; then
mount ${TARGET}3 /mnt/gentoo
mount ${TARGET}1 /mnt/gentoo/boot
# and set up the /proc environment.
mount -t proc none /mnt/gentoo/proc
fi
cat >/mnt/gentoo/catch_chroot.sh <<EOF
#set up the new environment
env-update
source /etc/profile
bash
EOF
cat >/mnt/gentoo/mgk.sh <<EOF
# then build the kernel
make && make modules_install
# move it
cd /usr/src
KERNEL_VERSION=\`ls -d linux-*\`
cd /usr/src/\${KERNEL_VERSION}/
cp arch/i386/boot/bzImage /boot/\${KERNEL_VERSION}
cp System.map /boot/System.map-\${KERNEL_VERSION}
cp .config /boot/config-\${KERNEL_VERSION}
EOF
chroot /mnt/gentoo /bin/bash -c "bash /catch_chroot.sh"

