Skip to content
Snippets Groups Projects
Commit f17d29bf authored by Jeffrey Tolar's avatar Jeffrey Tolar
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
Pipeline #
#!/bin/bash
# x86_64 or x86
ARCH=x86_64
DISK=vm_$ARCH.img
DEFAULT_USER=dev
DEFAULT_PASSWORD=uiuc
ROOT_PASSWORD=uiuc
PACKAGES=(# Core packages
base
syslinux
# X things
virtualbox-guest-modules
virtualbox-guest-utils
xfce4
# Nice-to-haves
bash-completion
zsh
htop
# VCS
subversion
# Editors
gvim
gedit
emacs
# Random utilities
sudo
imagemagick
graphviz
openssh
gnuplot
gtkwave # cs233
qt4 # cs233 (qtspim)
# Browsers
chromium
firefox
# Development (compilers, interpreters, debuggers, etc.)
clang35
libc++
gdb
valgrind
iverilog # cs233
)
set -e -x
m() {
echo "$@"
}
rm -f $DISK
m "Creating disk image..."
truncate $DISK --size=8G
m "Creating partition table..."
fdisk $DISK <<fdiskEOF
o
n
a
w
fdiskEOF
m "Mounting virtual drive... (requires sudo)"
loopdev=$(sudo losetup -f)
sudo losetup --partscan "$loopdev" $DISK
trap "sudo losetup -d $loopdev" EXIT
m "Creating filesystem... (requires sudo)"
sudo mkfs.ext3 ${loopdev}p1
mkdir -p root
m "Mounting filesystem... (requires sudo)"
sudo mount ${loopdev}p1 root/
trap "sudo umount ${loopdev}p1 ; sudo losetup -d $loopdev" EXIT
if [[ $ARCH == "x86_64" ]]; then
sudo pacstrap -c -G root/ "${PACKAGES[@]}"
else
sudo linux32 pacstrap -c -G root/ "${PACKAGES[@]}" -- --arch=i686
fi
sudo arch-chroot root/ <<chrootEOF
# random setup - hostname, timezone, locales
echo cs2xx-vm > /etc/hostname
ln -s /usr/share/zoneinfo/America/Chicago /etc/localtime
sed -i '/^#en_US/ s/^#//' /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
/usr/bin/mandb
# networking
ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
cp /etc/netctl/examples/ethernet-dhcp /etc/netctl/wired
systemctl enable netctl@wired.service netctl-sleep.service
# setup pacman keyring
pacman-key --init
pacman-key --populate archlinux
# install bootloader
syslinux-install_update -i -a -m
uuid=\$(blkid -o value -s UUID ${loopdev}p1)
sed -i '/APPEND/ s+root=[^ ]*+root=UUID='\$uuid'+' /boot/syslinux/syslinux.cfg
# fix a bug when running in QEMU - the 'block' hook has to be included in the initcpio
sed -i '/^HOOKS/ s/autodetect \\(.*\\) block/block autodetect \\1/' /etc/mkinitcpio.conf
mkinitcpio -p linux
# create default user, set passwords
useradd -G wheel -m $DEFAULT_USER
echo "$DEFAULT_USER:$DEFAULT_PASSWORD" | chpasswd
echo "root:$ROOT_PASSWORD" | chpasswd
echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/wheel
# autologin on tty1
mkdir -p /etc/systemd/system/getty@tty1.service.d
cat > /etc/systemd/system/getty@tty1.service.d/override.conf <<"gettyEOF"
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin $DEFAULT_USER --noclear %I 38400 linux
gettyEOF
# autostart X (xfce) on tty1
echo '[[ -z \$DISPLAY && \$XDG_VTNR -eq 1 ]] && exec startx' >> /home/$DEFAULT_USER/.bashrc
chown $DEFAULT_USER:$DEFAULT_USER /home/$DEFAULT_USER/.bashrc
cat > /home/$DEFAULT_USER/.xinitrc <<"xinitrcEOF"
#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)
if [ -d /etc/X11/xinit/xinitrc.d ]; then
for f in /etc/X11/xinit/xinitrc.d/*; do
[ -x "\$f" ] && . "\$f"
done
unset f
fi
/usr/bin/VBoxClient-all
exec startxfce4
xinitrcEOF
chown $DEFAULT_USER:$DEFAULT_USER /home/$DEFAULT_USER/.xinitrc
chrootEOF
sudo arch-chroot root/
#grub-install --recheck --target=i386-pc ${loopdev}
#grub-mkconfig -o /boot/grub/grub.cfg
sudo umount ${loopdev}p1
sudo losetup -d $loopdev
trap - EXIT
rm -f $DISK.vmdk
VBoxManage convertfromraw $DISK $DISK.vmdk --format VMDK
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment