8.5 KiB
Live custom Ubuntu from scratch
Prerequisites (GNU/Linux Debian/Ubuntu)
Install applications we need to build the environment.
sudo apt-get install \
debootstrap \
squashfs-tools \
genisoimage \
syslinux \
syslinux-utils \
imagemagick \
isolinux
mkdir $HOME/live-ubuntu-from-scratch
Bootstrap and Configure Ubuntu
sudo debootstrap \
--arch=amd64 \
--variant=minbase \
bionic \
$HOME/live-ubuntu-from-scratch/chroot \
http://us.archive.ubuntu.com/ubuntu/
sudo mount --bind /dev $HOME/live-ubuntu-from-scratch/chroot/dev
sudo mount --bind /run $HOME/live-ubuntu-from-scratch/chroot/run
Access chroot environment
sudo chroot $HOME/live-ubuntu-from-scratch/chroot
-
Configure mount points
mount none -t proc /proc mount none -t sysfs /sys mount none -t devpts /dev/pts export HOME=/root export LC_ALL=C
-
Set a custom hostname
echo "ubuntu-live" > /etc/hostname
-
Configure apt sources.list
Edit /etc/apt/source.list
cat <<EOF > /etc/apt/sources.list deb http://us.archive.ubuntu.com/ubuntu/ bionic main restricted universe multiverse deb http://us.archive.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe multiverse EOF
-
Upgrade packages if you want
apt-get update apt-get -y upgrade
-
Install and configure dbus
apt-get install -y systemd-sysv apt-get install -y dbus
dbus-uuidgen > /var/lib/dbus/machine-id dpkg-divert --local --rename --add /sbin/initctl ln -s /bin/true /sbin/initctl
-
Install packages needed for Live System
apt-get install -y \ ubuntu-standard \ casper \ lupin-casper \ discover \ laptop-detect \ os-prober \ network-manager \ linux-generic
-
Graphical installer
apt-get install -y \ ubiquity \ ubiquity-casper \ ubiquity-frontend-gtk \ ubiquity-slideshow-ubuntu \ ubiquity-ubuntu-artwork
-
Install window manager
apt-get install -y \ plymouth-theme-ubuntu-gnome-logo \ ubuntu-gnome-desktop \ ubuntu-gnome-wallpapers
-
Install usefull applications
apt-get install -y \ clamav-daemon \ terminator \ apt-transport-https \ curl \ vim \ nano
-
Install Visual Studio Code
-
Download and install the key
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list rm microsoft.gpg
-
Then update the package cache and install the package using:
apt-get update apt-get install -y code
-
-
Install Google Chrome
-
Download and install the key
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
-
Add the key to the repository
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
-
Finally, Update repository and install Google Chrome.
apt-get update apt-get install google-chrome-stable
-
-
Install Java JDK 8
apt-get install -y \ openjdk-8-jdk \ openjdk-8-jre
-
Remove unused applications
apt-get purge -y \ transmission-gtk \ transmission-common \ gnome-mahjongg \ gnome-mines \ gnome-sudoku \ aisleriot \ hitori
-
Remove unused packages
apt-get autoremove -y
-
Cleanup the chroot environment
-
If you installed software, be sure to run
rm /var/lib/dbus/machine-id
-
Remove the diversion
rm /sbin/initctl dpkg-divert --rename --remove /sbin/initctl
-
Clean up
apt-get clean rm -rf /tmp/* rm /etc/resolv.conf umount /proc umount /sys umount /dev/pts exit
-
Unbind mount points
sudo umount $HOME/live-ubuntu-from-scratch/chroot/dev
sudo umount $HOME/live-ubuntu-from-scratch/chroot/run
Create the CD image directory and populate it
-
Access build directory
cd $HOME/live-ubuntu-from-scratch
-
Create directories
mkdir -p image/{casper,isolinux,install}
-
Copy kernel images
sudo cp chroot/boot/vmlinuz-**-**-generic image/casper/vmlinuz sudo cp chroot/boot/initrd.img-**-**-generic image/casper/initrd.gz
-
Copy isolinux and memtest binaries
sudo cp /usr/lib/ISOLINUX/isolinux.bin image/isolinux/ sudo cp /usr/lib/syslinux/modules/bios/{chain,gfxboot,ldlinux,libutil,libcom32,vesamenu}.c32 image/isolinux/ sudo cp chroot/boot/memtest86+.bin image/install/memtest
Boot Instructions
-
Access build directory
cd $HOME/live-ubuntu-from-scratch
-
Create image/isolinux.txt
cat <<EOF > image/isolinux.txt splash.rle ************************************************************************ This is an Ubuntu from scratch Live CD. For the default live system, enter "live". To run memtest86+, enter "memtest" ************************************************************************ EOF
Splash screen
-
Access build directory
cd $HOME/live-ubuntu-from-scratch
-
Create image 640x480 in png format (splash.png)
-
Convert png image to ppm (indexed 16 colors)
convert +dither -colors 16 splash.png splash.ppm
-
Convert ppm to rle
ppmtolss16 '#ffffff=7' < splash.ppm > splash.rle
-
Move image
sudo mv splash.rle image/
Boot-loader configuration
-
Access build directory
cd $HOME/live-ubuntu-from-scratch
-
Create image/isolinux.cfg
cat <<EOF > image/isolinux.cfg path include menu.cfg default vesamenu.c32 prompt 0 timeout 50 EOF
-
Create image/menu.cfg
cat <<EOF > image/menu.cfg menu hshift 13 menu width 49 menu margin 8 menu title Installer boot menu include txt.cfg
-
Create image/txt.cfg
cat <<EOF > image/txt.cfg default live label live menu label ^Try Ubuntu from scratch without installing kernel /casper/vmlinuz append file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd quiet splash --- label live-install menu label ^Install Ubuntu from scratch kernel /casper/vmlinuz append file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd quiet splash --- label check menu label ^Check disc for defects kernel /casper/vmlinuz append boot=casper integrity-check initrd=/casper/initrd quiet splash --- label memtest menu label Test ^memory kernel /install/memtest EOF
Create manifest
-
Access build directory
cd $HOME/live-ubuntu-from-scratch
-
Generate manifest
sudo chroot chroot dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee image/casper/filesystem.manifest sudo cp -v image/casper/filesystem.manifest image/casper/filesystem.manifest-desktop REMOVE='ubiquity ubiquity-frontend-gtk ubiquity-frontend-kde casper lupin-casper live-initramfs user-setup discover1 xresprobe os-prober libdebian-installer4' for i in $REMOVE do sudo sed -i "/${i}/d" image/casper/filesystem.manifest-desktop done
Compress the chroot
-
Access build directory
cd $HOME/live-ubuntu-from-scratch
-
Create squashfs
sudo mksquashfs chroot image/casper/filesystem.squashfs
-
Write the filesystem.size
printf $(sudo du -sx --block-size=1 chroot | cut -f1) > image/casper/filesystem.size