<style>
.reveal {
font-size: 32px;
}
li {
margin-top: 20px;
}
.reveal blockquote {
width: 100%;
}
</style>
# Lav din egen Ubuntu i fem lette trin
---
# Baggrund
* I OS2borgerPC har vi i mange år lavet installations-CD'er med en meget manuel proces.
* Installér på computer (måske virtuel), lav tilpasninger, _klon_ den resulterende installation med Clonezilla, SSH det klonede system (ca. 3 GB) til din egen harddisk og pak en custom Clonezilla-ISO.
* **Fordele:** Fordi man tilpasser systemet _manuelt_ kan man lave alle tænkelige ændringer, uanset hvor svære de er at scripte.
* **Ulemper:** Det tager 2-3 timer i bedste fald, og man er næsten altid nødt til at backtracke, så det i praksis bliver 4-5. <!-- .element: class="fragment" data-fragment-index="1" -->
---
# Baggrund, fortsat
* Håbløst, fordi det kun er noget, vi skal gøre ca. 4 gange om året.
* Kan kun lade sig gøre med en 100% detaljeret trin-for-trin-manuel.
* Timing-problemer. <!-- .element: class="fragment" data-fragment-index="1" --> :slightly_frowning_face:
* Hvad med noget automatisering? <!-- .element: class="fragment" data-fragment-index="2" -->
---
# Løsning
* Udpak Ubuntus officielle installations-ISO, lav dine rettelser og pak den sammen igen.
* Det kræver, at alle ændringer kan udføres fra kommandolinjen alene.
* Men det kunne vores OS2borgerPC-opsætning allerede ... <!-- .element: class="fragment" data-fragment-index="1" -->
---
# Forberedelser
Hent ISO:
```bash
wget http://releases.ubuntu.com/focal/ubuntu-20.04.4-desktop-amd64.iso
```
Installér dependencies:
```bash
apt-get install squashfs-tools genisoimage p7zip-full xorriso\
isolinux syslinux-utils
```
**Caveats:**
* Jeg har kun erfaring med Ubuntu live-CD'er.
* Det følgende vil kun virke for Debian-lignende systemer
---
# Begreber
* Live-ISOer er baseret på `debian-installer` (legacy) og `ubiquity`
* Man konfigurerer installations-processen med "preseed"-filer
* I `preseed` kan man svare på spørgsmål fra installeren (keyboard etc.) og definere _late-commands_.
* På live-CD'er ligger det system, man installerer og kopierer wholesale ind på den nye harddisk pakket sammen i en `squashfs`-fil
---
# Trin 1 - ISO
Udpak ISO:
```bash
7z x ubuntu-20.04.4-desktop-amd64.iso -o"mit_iso_dir"
```
* Det kan tage et stykke tid. <!-- .element: class="fragment" data-fragment-index="1" -->
* Nogle vejledninger mounter i stedet ISOen og kopierer indholdet med `rsync`. <!-- .element: class="fragment" data-fragment-index="2" -->
---
# Trin 2 - `squashfs`
Udpak `squashfs`:
```bash
unsquashfs -f mit_iso_dir/casper/filesystem.squashfs
```
Udpakkes pr. default til en mappe, der hedder `squashfs-root`
Det kan tage et stykke tid ... <!-- .element: class="fragment" data-fragment-index="1" -->
---
# Trin 3 - `chroot`
`chroot` ind i det udpakkede system:
```bash=
# Mount evt. /proc, /sys, /dev og /dev/pts
# Set up resolv.conf for netadgang
cp /etc/resolv.conf squashfs-root/run/systemd/resolve/stub-resolv.conf
# Mount eller kopier alt, hvad du har brug for, til squashfs-root
chroot squashfs-root
```
Og nu ...
```bash
root@idun:/#
```
**GIV DEN GAS!!!**
Dvs. lav alle de ændringer, du har brug for. <!-- .element: class="fragment" data-fragment-index="1" -->
---
# Trin 4 - `preseed`
* Opsætning af preseed er en videnskab for sig
* Du kan preseede svar på alle spørgsmål installeren stiller
```
# Locale sets language and country.
d-i debian-installer/locale string da_DK.UTF-8
d-i time/zone string Europe/Copenhagen
# Keyboard selection.
keyboard-configuration keyboard-configuration/variant select Danish
keyboard-configuration keyboard-configuration/layoutcode string dk
keyboard-configuration console-setup/ask_detect boolean false
# Late command
d-i preseed/late_command string chroot /target /cdrom/my_postinstall_script.sh
```
`late-command` kan være et hvilket som helst script, du skriver og lægger ind på isoen. Du kan også preseede brugere, partitionering, mirrors og meget mere.
---
# Trin 4½ - Grub og isolinux
Hvis du ønsker, at ISOen altid starter uden at vise en menu, skal du have disse parametre i _iso-filens_ `boot/grub` og `isolinux/txt.cfg`:
```
file=/cdrom/preseed/<din_preseed_fil>.seed automatic-ubiquity\
quiet splash noprompt ---
```
I roden af ISOen kan du beskrive systemet i en fil, der hedder `README.diskdefines`. Der er flere parametre, men dette er en start:
```
#define DISKNAME OS2borgerPC
```
---
# Trin 5 - nedpakning
Lav manifest, f.eks.:
```bash
chroot squashfs-root dpkg-query -W --showformat='${Package} ${Version}\n' > \
mit_iso_dir/filesystem.manifest
```
Pak det hele sammen:
```bash=
rm mit_iso_dir/casper/filesystem.squashfs
mksquashfs squashfs-root mit_iso_dir/casper/filesystem.squashfs
```
Det kan ærligt og redeligt tage et stykke tid ... <!-- .element: class="fragment" data-fragment-index="1" -->
Byg nu (endelig) det færdige image: <!-- .element: class="fragment" data-fragment-index="2" -->
```bash
IMAGE_NAME=MagentaKillerOS # Eller hvad vi nu synes
xorriso -as mkisofs -r -V "$IMAGE_NAME" -o "$IMAGE_NAME".iso -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin mit_iso_dir/boot iso
```
<!-- .element: class="fragment" data-fragment-index="2" -->
Dette tager faktisk ikke ret lang tid. <!-- .element: class="fragment" data-fragment-index="3" -->
---
# Så nu ...
* Bygger OS2borgerPC images i pipelines:
 
* Hvis DU har brug for et modificeret Ubuntu-system kan du (forholdsvis) hurtigt og let lave et selv.
* Alt dette håndteres af scripts i OS2borgerPC-image-repoet - dette kunne let skrives om til et generelt "image builder"-værktøj
* Ønsker du at modificere en server-ISO, er det lidt anderledes - check [dokumentationen i Github](https://github.com/OS2borgerPC/server_image/tree/master/image)
---
# Læs mere
* Magenta-internt:
* [OS2borgerPC Image udvikler-docs](https://git.magenta.dk/os2borgerpc/os2borgerpc-image/-/blob/development/docs/source/dev.rst)
* [OS2borgerPC Kiosk udvikler-docs](https://os2borgerpc-server-image.readthedocs.io/en/latest/technical_documentation.html#how-to-build-the-os2borgerpc-kiosk-iso-image) (server-udgaven)
* Fra Ubuntus docs:
* [Live CD Customization](https://help.ubuntu.com/community/LiveCDCustomization)
* [Ubiquity Automation](https://wiki.ubuntu.com/UbiquityAutomation)
* [Desktop CD Options](https://wiki.ubuntu.com/DesktopCDOptions)
* [Ubuntu Installation Guide Appendix B](https://help.ubuntu.com/lts/installation-guide/amd64/apbs01.html)
---
# Tak


[www.modspil.dk](https://www.modspil.dk)
{"metaMigratedAt":"2023-06-16T22:01:53.280Z","metaMigratedFrom":"YAML","title":"Lav din egen Ubuntu i fem lette trin","breaks":true,"description":"Hvordan du let kan lave din egen custom Ubuntu-CD","slideOptions":"{\"transition\":\"fade\"}","contributors":"[{\"id\":\"0e0c13a4-dd7c-44fa-986b-7a4affea3678\",\"add\":7730,\"del\":539}]"}