137 lines
3.8 KiB
Bash
137 lines
3.8 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
set -x
|
|
|
|
# Grab the latest portage
|
|
echo "Syncing Portage"
|
|
emerge-webrsync && emerge --sync --quiet
|
|
|
|
# Set the portage profile
|
|
eselect profile set default/linux/amd64/17.0/systemd
|
|
. /etc/profile
|
|
|
|
# Install updates
|
|
echo "Updating system"
|
|
emerge -uDN @world
|
|
|
|
# Set the system locale
|
|
echo "Setting locale"
|
|
locale-gen
|
|
eselect locale set "en_GB.utf8"
|
|
|
|
. /etc/profile
|
|
|
|
# Grab the kernel sources
|
|
echo "Installing kernel source"
|
|
emerge sys-kernel/gentoo-sources
|
|
|
|
# Install kernel build tools and configure
|
|
echo "Preparing to build kernel"
|
|
|
|
emerge sys-kernel/genkernel-next sys-boot/grub sys-fs/fuse sys-apps/dmidecode
|
|
|
|
if [ "$(dmidecode -s system-manufacturer)" == "Microsoft Corporation" ]; then
|
|
# Ensure hyperv modules are loaded at boot, and included in the initramfs
|
|
echo 'MODULES_HYPERV="hv_vmbus hv_storvsc hv_balloon hv_netvsc hv_utils"' >> /usr/share/genkernel/arch/x86_64/modules_load
|
|
echo 'modules="hv_storvsc hv_netvsc hv_vmbus hv_utils hv_balloon"' >> /etc/conf.d/modules
|
|
sed -ri "s/(HWOPTS='.*)'/\1 hyperv'/" /usr/share/genkernel/defaults/initrd.defaults
|
|
fi
|
|
|
|
# Build the kernel with genkernel
|
|
echo "Building the kernel"
|
|
|
|
genkernel --kernel-config=/etc/kernels/kernel_config --makeopts=-j5 all
|
|
|
|
# Build & install the VM tools
|
|
|
|
# If we're running on hyper-v, enable the tools
|
|
if [ "$(dmidecode -s system-manufacturer)" == "Microsoft Corporation" ]; then
|
|
# kernel modules are already built in the kernel
|
|
cd /usr/src/linux/tools/hv
|
|
make
|
|
cp hv_fcopy_daemon hv_vss_daemon hv_kvp_daemon /usr/sbin
|
|
|
|
systemctl enable hv_fcopy_daemon.service
|
|
systemctl enable hv_vss_daemon.service
|
|
systemctl enable hv_kvp_daemon.service
|
|
elif [ "$(dmidecode -s system-product-name)" == "VirtualBox" ]; then
|
|
# Install VirtualBox from portage
|
|
echo "app-emulation/virtualbox-guest-additions ~amd64" > /etc/portage/package.accept_keywords/virtualbox
|
|
emerge app-emulation/virtualbox-guest-additions
|
|
|
|
systemctl enable virtualbox-guest-additions.service
|
|
elif [ "$(dmidecode -s system-product-name)" == "VMware Virtual Platform" ]; then
|
|
echo "app-emulation/open-vm-tools ~amd64" > /etc/portage/package.accept_keywords/vmware
|
|
emerge app-emulation/open-vm-tools
|
|
|
|
systemctl enable vmtoolsd
|
|
else
|
|
echo "Unknown hypervisor! :(" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
# Set up the things we need for a base system
|
|
echo "Configuring up the base system"
|
|
|
|
# sudo and cron
|
|
echo "app-admin/sudo -sendmail" > /etc/portage/package.use/sudo
|
|
emerge sys-process/cronie app-admin/sudo
|
|
|
|
# systemd setup and hostname
|
|
systemd-machine-id-setup --commit # remember to remove this before packaging the box
|
|
echo "gentoo-minimal" > /etc/hostname
|
|
echo "127.0.1.1 gentoo-minimal.local gentoo-minimal" >> /etc/hosts
|
|
|
|
# networking
|
|
cat > /etc/systemd/network/50-dhcp.network <<EOT
|
|
[Match]
|
|
Name=eth0
|
|
[Network]
|
|
DHCP=yes
|
|
[DHCP]
|
|
ClientIdentifier=mac
|
|
EOT
|
|
|
|
systemctl enable systemd-networkd.service
|
|
|
|
# ssh
|
|
systemctl enable sshd.service
|
|
echo "UseDNS no" >> /etc/ssh/sshd_config
|
|
|
|
yes YES | etc-update --automode -9
|
|
|
|
# Create the vagrant user with the vagrant public key
|
|
echo "Creating Vagrant user"
|
|
|
|
date > /etc/vagrant_box_build_time
|
|
|
|
useradd -s /bin/bash -m vagrant
|
|
echo -e "vagrant\nvagrant" | passwd vagrant
|
|
|
|
mkdir -pm 700 /home/vagrant/.ssh
|
|
wget -O /home/vagrant/.ssh/authorized_keys \
|
|
'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub'
|
|
chmod 0600 /home/vagrant/.ssh/authorized_keys
|
|
chown -R vagrant:vagrant /home/vagrant/.ssh
|
|
|
|
echo 'vagrant ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
|
|
|
# Install grub and hope everything is ready!
|
|
echo "Installing bootloader"
|
|
|
|
grub-install /dev/sda
|
|
grub-mkconfig -o /boot/grub/grub.cfg
|
|
|
|
echo "Installing additional tools"
|
|
emerge @tools
|
|
|
|
echo "Updating resolv.conf"
|
|
|
|
rm /etc/resolv.conf
|
|
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
|
|
systemctl enable systemd-resolved.service
|
|
|
|
echo "Removing provision script"
|
|
rm /root/provision_gentoo_chroot.sh
|