Catalyst/Custom Media Image

From Gentoo Wiki
< Catalyst(Redirected from Custom media image)
Jump to:navigation Jump to:search

This is a guide that will teach how to create to a custom Gentoo LiveCD based off the minimal ISO to be able to add custom programs to use as task like a rescuecd or just to the user's preferred applications to help with the install process. The basic principles will be shown here to give a user a clear understanding of how the process works to use in their own projects.

Build Environment Setup

Install dev-util/catalyst making sure the iso useflag is set

root #emerge --ask dev-util/catalyst

This build process will heavily rely on the Releng configs so begin by pulling the git repo

user $git clone -o upstream https://github.com/gentoo/releng.git
user $cd releng
root #mkdir -p /var/tmp/catalyst/builds/default

Stage1

Prepare Seed

A seed stage3 is needed to build the LiveCD, this done by doing the following:

root #cd /var/tmp/catalyst/builds/default

Select the best stage3 for the needs of the LiveCD (in this example stage3-amd64-openrc-tar.xz was used). Stage3 tarballs can be found at https://www.gentoo.org/downloads/mirrors/.

root #wget <URL of file>

Portage Snapshot

Return to the base Catalyst build directory

root #cd /var/tmp/catalyst

Portage snapshots are now handled in git and can be created and updated using:

root #catalyst -s stable

The Gentoo Portage snapshot name will be shown and will look similar to:

Stage1 Spec File

LiveCD spec files can be found on the Releng Github Mirror

Now edit the settings of the spec file to match the locations of the downloaded files earlier.

Parts of the spec file needing to be edited are:

  • version_stamp to build date
  • snapshot to portage squashfs name taken earlier
  • portage_confdir to location that the releng github repo was downloaded to
FILE /var/tmp/catalyst/installcd-stage1.specinstallcd-stage1.spec
subarch: amd64
version_stamp: 2023-05-07
target: livecd-stage1
rel_type: default
profile: default/linux/amd64/17.1/no-multilib
snapshot: stable
source_subpath: default/stage3-amd64-openrc-20230423T164653Z
compression_mode: pixz
portage_confdir: <location of releng>/releases/portage/isos

Next, change the program list to match the require custom applications needed, in this example app-misc/neofetch will be added to the ISO to show how it works, but here is also how you can apply global USE flag changes if required or via <location of releng>/releases/portage/iso/package.use for a per package flag.

FILE /var/tmp/catalyst/installcd-stage1.specinstallcd-stage1.spec
livecd/use:
	alsa
	compile-locales
	fbcon
	livecd
	portaudio
	socks5
	unicode
	xml

livecd/packages:
	app-accessibility/brltty
	app-accessibility/espeakup
	app-admin/hddtemp
	app-admin/pwgen
	app-admin/syslog-ng
	app-arch/unzip
	app-crypt/gnupg
	app-editors/mg
	app-editors/nano
	app-misc/livecd-tools
	app-misc/screen
	app-misc/tmux
	app-portage/cpuid2cpuflags
	app-portage/mirrorselect
	app-text/wgetpaste
	media-gfx/fbgrab
	media-sound/alsa-utils
	net-analyzer/traceroute
	net-dialup/mingetty
	net-dialup/pptpclient
	net-dialup/rp-pppoe
	net-fs/cifs-utils
	net-fs/nfs-utils
	net-irc/irssi
	net-misc/dhcpcd
	net-misc/iputils
	net-misc/ndisc6
	net-misc/ntp
	net-misc/openssh
	net-misc/rdate
	net-misc/rsync
	net-misc/vconfig
	net-proxy/dante
	net-proxy/tsocks
	net-wireless/b43-fwcutter
	net-wireless/iw
	net-wireless/wireless-tools
	net-wireless/wpa_supplicant
	sys-apps/arch-chroot
	sys-apps/busybox
	sys-apps/dmidecode
	sys-apps/ethtool
	sys-apps/fxload
	sys-apps/gptfdisk
	sys-apps/hdparm
	sys-apps/iproute2
	sys-apps/memtester
	sys-apps/memtest86+
	sys-apps/netplug
	sys-apps/nvme-cli
	sys-apps/pciutils
	sys-apps/pcmciautils
	sys-apps/sdparm
	sys-apps/usbutils
	sys-auth/ssh-import-id
	sys-block/parted
	sys-block/partimage
	sys-firmware/ipw2100-firmware
	sys-firmware/ipw2200-firmware
	sys-fs/bcache-tools
	sys-fs/btrfs-progs
	sys-fs/cryptsetup
	sys-fs/dmraid
	sys-fs/dosfstools
	sys-fs/e2fsprogs
	sys-fs/f2fs-tools
	sys-fs/genfstab
	sys-fs/jfsutils
	sys-fs/lsscsi
	sys-fs/lvm2
	sys-fs/mac-fdisk
	sys-fs/mdadm
	sys-fs/multipath-tools
	sys-fs/ntfs3g
	sys-fs/reiserfsprogs
	sys-fs/xfsprogs
	sys-kernel/linux-firmware
	#force rebuild for USE="(-multilib*)"
	sys-libs/glibc
	sys-libs/gpm
	sys-power/acpid
	www-client/links
       #Custom programs
       app-misc/neofetch

Build Stage1

Start the build process with:

root #catalyst -f installcd-stage1.spec

Stage2

Stage2 Spec File

Next, use the stage2 spec to edit for custom needs.

Parts of the spec file needing to be edited are:

  • version_stamp to build date
  • snapshot to portage squashfs name taken earlier
  • portage_confdir
  • boot/kernel/gentoo/config to location that the releng github repo was downloaded to
FILE installcd-stage2-minimal.specinstallcd-stage2-minimal.spec Example
subarch: amd64
version_stamp: 2023-05-07
target: livecd-stage2
rel_type: default
profile: default/linux/amd64/17.1/no-multilib
snapshot: stable
source_subpath: default/livecd-stage1-amd64-2023-05-07
portage_confdir: <location of releng sources>/releases/portage/isos

livecd/bootargs: dokeymap
livecd/fstype: squashfs
livecd/iso: install-amd64-minimal-2023-05-07.iso
livecd/type: gentoo-release-minimal
livecd/volid: Gentoo amd64 2023-05-07

boot/kernel: gentoo

boot/kernel/gentoo/sources: gentoo-sources
boot/kernel/gentoo/config: <location of releng sources>/releases/kconfig/amd64/amd64-5.15.80.config

This will create a livecd using squashfs just like the official minimal ISO does but with the custom programs or useflags set by the user.

The remaining options in the spec file will remove unneeded packages and files for the ISO to work and can also be edited to the user's preference.

Alternative: Using Distribution kernel

Alternatively, Live CD can be built with Distribution Kernel and Dracut. This approach requires additional options in spec file. Here an example of installcd-stage2 spec file:

FILE installcd-stage2-minimal.specinstallcd-stage2-minimal.spec Example
subarch: amd64
version_stamp: 2023-05-07
target: livecd-stage2
rel_type: default
profile: default/linux/amd64/17.1/no-multilib
snapshot: stable
source_subpath: default/livecd-stage1-amd64-2023-05-07
portage_confdir: <location of releng sources>/releases/portage/isos

livecd/bootargs: overlayfs
livecd/depclean: yes
livecd/fstype: squashfs
livecd/iso: install-amd64-minimal-2023-05-07.iso
livecd/type: gentoo-release-minimal
livecd/volid: Gentoo amd64 2023-05-07

boot/kernel: gentoo

# Alterations required for Distribution kernel
# Use distkernel
boot/kernel/gentoo/distkernel: yes
# Package for building kernel
boot/kernel/gentoo/sources: gentoo-kernel
# Packages that depends on kernel and will be built after kernel install
boot/kernel/gentoo/packages:
  net-firewall/xtables-addons
  sys-boot/grub
  sys-fs/zfs
# Arguments passed to Dracut in order building initramfs
boot/kernel/gentoo/dracut_args: --xz --no-hostonly -a dmsquash-live -a mdraid -o btrfs -o crypt -o i18n -o usrmount -o lunmask -o qemu -o qemu-net -o nvdimm -o multipath -o resume

Distribution Kernel can be customized via savedconfig USE-flag and altered config in <location of releng sources>/releases/portage/isos/savedconfig/sys-kernel/.

Build Stage2

Start the build process with:

root #catalyst -f installcd-stage2-minimal.spec

ISO File

The ISO will be located in /var/tmp/catalyst/builds/default which can be written to a CD, USB or just tested directly in a VM.