zaterdag 18 januari 2025

Maak een eigen Linux CD

 

  1. Het voorbereiden van de omgeving

        Stel enkele variabelen in

export WORK=~/work
export CD=~/cd
export FORMAT=squashfs
export FS_DIR=casper

De WORK-directory is waar onze tijdelijke bestanden en het koppelpunt zich zullen bevinden. De CD is de locatie van de CD-boom. FORMAT is het bestandssysteemtype. Wij gaan een gecomprimeerde squashfs gebruiken. FS_DIR is de locatie van de daadwerkelijke bestandssysteemimage binnen de cd-boom.

 

Maak de CD en de WORK-directorystructuur:

sudo mkdir -p ${CD}/{${FS_DIR},boot/grub} ${WORK}/rootfs
Installeer enkele pakketten op het systeem:

sudo apt-get update

sudo apt-get install grub2 xorriso squashfs-tools
Kopieer uw installatie naar het nieuwe bestandssysteem

sudo rsync -av --one-file-system --exclude=/proc/* --exclude=/dev/* \
--exclude=/sys/* --exclude=/tmp/* --exclude=/home/* --exclude=/lost+found \
--exclude=/var/tmp/* --exclude=/boot/grub/* --exclude=/root/* \
--exclude=/var/mail/* --exclude=/var/spool/* --exclude=/media/* \
--exclude=/etc/fstab --exclude=/etc/mtab --exclude=/etc/hosts \
--exclude=/etc/timezone --exclude=/etc/shadow* --exclude=/etc/gshadow* \
--exclude=/etc/X11/xorg.conf* --exclude=/etc/gdm/custom.conf \
--exclude=/etc/lightdm/lightdm.conf --exclude=${WORK}/rootfs / ${WORK}/rootfs
  • Opmerking: rsync wordt gebruikt in plaats van cp om voordeel te halen uit de --one-file-system en --exclude opties. 
  • Als u een aparte opstartpartitie heeft, moet u deze kopiëren met behulp van de volgende opdracht:

sudo cp -av /boot/* ${WORK}/rootfs/boot

(Optioneel) Kopieer instellingen naar uw thuismap:

  • Als u de instellingen van uw gebruikersaccount, die in uw thuismap zijn opgeslagen, wilt behouden, kunt u deze kopiëren naar ${WORK}/rootfs/etc/skel/. Maar eerst moeten we definiëren welke bestanden we willen kopiëren. Ik gebruik bijvoorbeeld cinnamon als mijn D|esktop beheerder, en het slaat alle instellingen op in een map met de naam .config in mijn thuismap, dus ik ga .config toevoegen aan de variabele $CONFIG:

(Optioneel)

CONFIG='.config .bashrc'

Kopieer nu de CONFIG-bestanden met behulp van de volgende opdracht (in een keer ingeven in de terminal): (optioneel)

cd ~ && for i in $CONFIG
do
sudo cp -rpv --parents $i ${WORK}/rootfs/etc/skel
done

Chroot in het nieuwe systeem en pas het systeem aan

  1. Chroot naar het gekopieerde systeem na het aankoppelen van proc en dev:

sudo mount  --bind /dev/ ${WORK}/rootfs/dev

sudo mount -t proc proc ${WORK}/rootfs/proc

sudo mount -t sysfs sysfs ${WORK}/rootfs/sys

sudo mount -o bind /run ${WORK}/rootfs/run

sudo chroot ${WORK}/rootfs /bin/bash

N.B: Alle opdrachten die binnen een chroot worden uitgevoerd, worden gemarkeerd met (chroot).

  • Nu u zich in de chroot-omgeving bevindt, typt u het volgende commando:

(chroot)

LANG=
  1. Installeer essentiele pakketten voor de live CD:

(chroot)

apt-get update

(chroot)

apt-get install casper 

casper contains the live scripts.

3. (Optioneel) Als je wilt dat je live-cd een installatieprogramma heeft, installeer dan het Ubuntu-installatieprogramma:

(chroot)

apt-get install ubiquity ubiquity-frontend-gtk

Opmerking: mensen die kde gebruiken vervangen het vorige commando door: 

(chroot)

apt-get install ubiquity ubiquity-frontend-kde 

Eer voor deze tip gaat naar Fragadelic auteur van remastersys.

(Optionele stap)
Installeer alle pakketten die u op de cd wilt hebben. Sommige van de volgende pakketten zijn handig in noodsituaties:

sudo apt-get install gparted testdisk wipe partimage xfsprogs reiserfsprogs jfsutils ntfs-3g dosfstools mtoolsUpdate de initramfs: Update eerst modules.dep:

(chroot)

depmod -a $(uname -r)

(chroot)

update-initramfs -u -k $(uname -r)

Zoals hierboven al vermeld, is initramfs verantwoordelijk voor een groot deel van de voorbereiding die nodig is tijdens het opstarten van de CD/DVD. De bijgewerkte initramfs bevatten nu de live scripts die met casper zijn geïnstalleerd.

Verwijder toegevoegde niet-systeemgebruikers

(chroot)

for i in `cat /etc/passwd | awk -F":" '{print $1}'`
do
        uid=`cat /etc/passwd | grep "^${i}:" | awk -F":" '{print $3}'`
        [ "$uid" -gt "998" -a  "$uid" -ne "65534"  ] && userdel --force ${i} 2> /dev/null
done

Niet-systeemgebruikers zijn door u aangemaakte gebruikers met een gebruikers-ID hoger dan 999.

N.B: Als er een gebruiker met uid 999 aanwezig is, verwijderen we deze ook omdat die uid behouden blijft voor de live cd-gebruiker.
Maak het systeem schoon. Maak eerst de apt-cache schoon

(chroot)

apt-get clean

Ruim alle extra logbestanden op

(chroot)

find /var/log -regex '.*?[0-9].*?' -exec rm -v {} \;

De resterende logbestanden worden op nul gezet, anders gaat het systeem klagen als ze worden verwijderd.

(chroot)

find /var/log -type f | while read file
do
        cat /dev/null | tee $file
done

(chroot)

rm /etc/resolv.conf /etc/hostname

Verlaat chroot

(chroot)

exit

Bereid de CD-directoryboom voor


Kopieer de kernel, de bijgewerkte initrd en memtest voorbereid in de chroot:

export kversion=`cd ${WORK}/rootfs/boot && ls -1 vmlinuz-* | tail -1 | sed 's@vmlinuz-@@'`

sudo cp -vp ${WORK}/rootfs/boot/vmlinuz-${kversion} ${CD}/${FS_DIR}/vmlinuz

sudo cp -vp ${WORK}/rootfs/boot/initrd.img-${kversion} ${CD}/${FS_DIR}/initrd.img

sudo cp -vp ${WORK}/rootfs/boot/memtest86+.bin ${CD}/boot

(optioneel) Genereer manifest:

  • Opmerking: deze stap is alleen nodig als u het alomtegenwoordige Ubuntu-installatieprogramma hebt geïnstalleerd. Met deze stap worden twee bestanden gegenereerd (filesystem.manifest en filesystem.manifest-desktop).

(optineel)

sudo chroot ${WORK}/rootfs dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee ${CD}/${FS_DIR}/filesystem.manifest

(optineel)

sudo cp -v ${CD}/${FS_DIR}/filesystem.manifest{,-desktop}

(optineel)

REMOVE='ubiquity casper user-setup os-prober libdebian-installer4'

(optineel)

for i in $REMOVE
do
        sudo sed -i "/${i}/d" ${CD}/${FS_DIR}/filesystem.manifest-desktop
done

(optineel) Deze twee bestanden worden door het ubiquity-installatieprogramma gebruikt bij installatie op de harde schijf. Deze twee bestanden zijn slechts lijsten met pakketten. Ubiquity vergelijkt deze twee bestanden en verwijdert pakketten die uniek zijn voor filesystem.manifest. Op deze manier worden bij installatie op de harde schijf pakketten zoals casper, die alleen nuttig zijn op een live-cd/dvd, verwijderd. Deze pakketten die tijdens de installatie worden verwijderd, worden gedefinieerd in de variabele $REMOVE

  1. Ontkoppelen,  gekoppelde mappen:

sudo umount ${WORK}/rootfs/proc

sudo umount ${WORK}/rootfs/sys

sudo umount ${WORK}/rootfs/dev

Converteer de directorystructuur naar een squashfs:

sudo mksquashfs ${WORK}/rootfs ${CD}/${FS_DIR}/filesystem.${FORMAT} -noappend

Note: Make sure the resulting file size can fit into your live media.

  1. Maak filesystem.size

echo -n $(sudo du -s --block-size=1 ${WORK}/rootfs | tail -1 | awk '{print $1}') | sudo tee ${CD}/${FS_DIR}/filesystem.size
  1. bereken MD5

find ${CD} -type f -print0 | xargs -0 md5sum | sed "s@${CD}@.@" | grep -v md5sum.txt | sudo tee -a ${CD}/md5sum.txt
  1. Maak Grub the bootloader van de CD 
  2. Maak the grub.cfg

sudo xed ${CD}/boot/grub/grub.cfg
  • Kopieer de volgende tekst erin en sla deze op.

set default="0"
set timeout=30
 
set theme="/boot/grub/theme/sinclair/theme.txt" 
menuentry "Linux GUI" {
linux /casper/vmlinuz boot=casper quiet splash
initrd /casper/initrd.img
}

menuentry "Linux in safe mode" {
linux /casper/vmlinuz boot=casper xforcevesa quiet splash
initrd /casper/initrd.img
}

menuentry "Linux CLI" {
linux /casper/vmlinuz boot=casper textonly quiet splash
initrd /casper/initrd.img
}

menuentry "Linux GUI persistente mode" {
linux /casper/vmlinuz boot=casper persistent quiet splash
initrd /casper/initrd.img
}

menuentry "Linux GUI vanuit RAM" {
linux /casper/vmlinuz boot=casper toram quiet splash
initrd /casper/initrd.img
}

menuentry "Boot from the first hard disk" {
set root=(hd0)
chainloader +1
}

Maak de CD/DVD

  1. Make the ISO file met iso level 3 als deze groter is dan 4 Gb

sudo grub-mkrescue -o ~/live-cd.iso ${CD}  -iso-level 3

Geen opmerkingen:

Een reactie posten

Opmerking: Alleen leden van deze blog kunnen een reactie posten.

Maak een eigen Linux CD

  Het voorbereiden van de omgeving     Stel enkele variabelen in export WORK=~/work export CD=~/cd export FORMAT=squashfs export FS_DIR=casp...