Change system to openSuse Kiwi
This commit is contained in:
parent
2f09fa927b
commit
a6306ab0cb
2
.gitignore
vendored
2
.gitignore
vendored
@ -14,3 +14,5 @@
|
|||||||
.nfs*
|
.nfs*
|
||||||
|
|
||||||
*.iso
|
*.iso
|
||||||
|
|
||||||
|
out/
|
31
README.md
31
README.md
@ -1,32 +1,17 @@
|
|||||||
# reHDD-Bootable
|
# reHDD-Bootable
|
||||||
|
|
||||||
Scripts and tools to create a bootable image with reHDD based on debian.
|
Scripts and tools to create a bootable image with reHDD based on openSuse.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
The scripts are used to run within a Debian-based machine as host.
|
The scripts are used to run within a openSuse-based machine as host.
|
||||||
Use a host os that is installed/started in UEFI mode.
|
|
||||||
|
|
||||||
```
|
## Build Image
|
||||||
apt-get install \
|
|
||||||
debootstrap \
|
|
||||||
squashfs-tools \
|
|
||||||
xorriso \
|
|
||||||
isolinux \
|
|
||||||
syslinux-efi \
|
|
||||||
grub-pc-bin \
|
|
||||||
grub-efi-amd64-bin \
|
|
||||||
grub-efi-ia32-bin \
|
|
||||||
mtools \
|
|
||||||
dosfstools \
|
|
||||||
screenfetch \
|
|
||||||
htop \
|
|
||||||
git \
|
|
||||||
curl
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
|
`sudo bash ./create_bootable.sh`
|
||||||
|
|
||||||
## Test
|
## Test
|
||||||
|
### BIOS
|
||||||
`qemu-system-x86_64 -boot d -cdrom reHDD_Bootable.iso -m 1024 -smp 2`
|
`qemu-system-x86_64 -boot d -cdrom reHDD_Bootable.iso -m 2048 -smp 2`
|
||||||
|
### UEFI
|
||||||
|
`qemu-system-x86_64 -bios /usr/share/qemu/ovmf-x86_64.bin -boot d -cdrom reHDD_Bootable.iso -m 2048 -smp 2`
|
||||||
|
76
appliance.kiwi
Normal file
76
appliance.kiwi
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<image schemaversion="7.5" name="reHDD">
|
||||||
|
<description type="system">
|
||||||
|
<author>Hendrik Schutter</author>
|
||||||
|
<contact>localhorst@mosad.xyz</contact>
|
||||||
|
<specification>reHDD</specification>
|
||||||
|
</description>
|
||||||
|
<preferences>
|
||||||
|
<version>1.42.1</version>
|
||||||
|
<packagemanager>zypper</packagemanager>
|
||||||
|
<locale>en_US</locale>
|
||||||
|
<keytable>us</keytable>
|
||||||
|
<timezone>UTC</timezone>
|
||||||
|
<rpm-excludedocs>true</rpm-excludedocs>
|
||||||
|
<rpm-check-signatures>true</rpm-check-signatures>
|
||||||
|
<bootsplash-theme>breeze</bootsplash-theme>
|
||||||
|
<bootloader-theme>openSUSE</bootloader-theme>
|
||||||
|
<type image="iso" primary="true" flags="overlay" hybridpersistent_filesystem="ext4" hybridpersistent="true" firmware="uefi"/>
|
||||||
|
</preferences>
|
||||||
|
<users>
|
||||||
|
<user password="rehdd" home="/root" name="root" groups="root" pwdformat="plain"/>
|
||||||
|
</users>
|
||||||
|
<repository type="rpm-md">
|
||||||
|
<source path="obsrepositories:/"/>
|
||||||
|
</repository>
|
||||||
|
<packages type="image">
|
||||||
|
<package name="patterns-openSUSE-base"/>
|
||||||
|
<package name="procps"/>
|
||||||
|
<package name="systemd"/>
|
||||||
|
<package name="plymouth-theme-breeze"/>
|
||||||
|
<package name="plymouth-plugin-script"/>
|
||||||
|
<package name="grub2-branding-openSUSE"/>
|
||||||
|
<package name="iputils"/>
|
||||||
|
<package name="vim"/>
|
||||||
|
<package name="grub2"/>
|
||||||
|
<package name="grub2-x86_64-efi" arch="x86_64"/>
|
||||||
|
<package name="grub2-i386-pc"/>
|
||||||
|
<package name="lvm2"/>
|
||||||
|
<package name="plymouth"/>
|
||||||
|
<package name="fontconfig"/>
|
||||||
|
<package name="fonts-config"/>
|
||||||
|
<package name="tar"/>
|
||||||
|
<package name="parted"/>
|
||||||
|
<package name="openssh"/>
|
||||||
|
<package name="iproute2"/>
|
||||||
|
<package name="less"/>
|
||||||
|
<package name="bash-completion"/>
|
||||||
|
<package name="bind-utils"/>
|
||||||
|
<package name="dhcp-client"/>
|
||||||
|
<package name="which"/>
|
||||||
|
<package name="kernel-default"/>
|
||||||
|
<package name="timezone"/>
|
||||||
|
<package name="dracut-kiwi-oem-repart"/>
|
||||||
|
<package name="dracut-kiwi-oem-dump"/>
|
||||||
|
<package name="dracut-kiwi-live"/>
|
||||||
|
<package name="screenfetch"/>
|
||||||
|
<package name="htop"/>
|
||||||
|
<package name="usbutils"/>
|
||||||
|
<package name="pciutils"/>
|
||||||
|
</packages>
|
||||||
|
<packages type="bootstrap">
|
||||||
|
<package name="gawk"/>
|
||||||
|
<package name="grep"/>
|
||||||
|
<package name="gzip"/>
|
||||||
|
<package name="udev"/>
|
||||||
|
<package name="xz"/>
|
||||||
|
<package name="shadow"/>
|
||||||
|
<package name="filesystem"/>
|
||||||
|
<package name="glibc-locale"/>
|
||||||
|
<package name="cracklib-dict-full"/>
|
||||||
|
<package name="ca-certificates"/>
|
||||||
|
<package name="ca-certificates-mozilla"/>
|
||||||
|
<package name="openSUSE-release"/>
|
||||||
|
</packages>
|
||||||
|
</image>
|
44
config.sh
Normal file
44
config.sh
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#================
|
||||||
|
# FILE : config.sh
|
||||||
|
#----------------
|
||||||
|
# PROJECT : OpenSuSE KIWI Image System
|
||||||
|
# COPYRIGHT : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
|
||||||
|
# :
|
||||||
|
# AUTHOR : Marcus Schaefer <ms@suse.de>
|
||||||
|
# :
|
||||||
|
# BELONGS TO : Operating System images
|
||||||
|
# :
|
||||||
|
# DESCRIPTION : configuration script for SUSE based
|
||||||
|
# : operating systems
|
||||||
|
# :
|
||||||
|
# :
|
||||||
|
# STATUS : BETA
|
||||||
|
#----------------
|
||||||
|
#======================================
|
||||||
|
# Functions...
|
||||||
|
#--------------------------------------
|
||||||
|
test -f /.kconfig && . /.kconfig
|
||||||
|
test -f /.profile && . /.profile
|
||||||
|
|
||||||
|
#======================================
|
||||||
|
# Greeting...
|
||||||
|
#--------------------------------------
|
||||||
|
echo "Configure image: [$kiwi_iname]..."
|
||||||
|
|
||||||
|
#======================================
|
||||||
|
# Setup baseproduct link
|
||||||
|
#--------------------------------------
|
||||||
|
suseSetupProduct
|
||||||
|
|
||||||
|
#======================================
|
||||||
|
# Activate services
|
||||||
|
#--------------------------------------
|
||||||
|
suseInsertService sshd
|
||||||
|
suseInsertService grub_config
|
||||||
|
suseInsertService dracut_hostonly
|
||||||
|
|
||||||
|
#======================================
|
||||||
|
# Setup default target, multi-user
|
||||||
|
#--------------------------------------
|
||||||
|
baseSetRunlevel 3
|
@ -1,178 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
### Config ###
|
||||||
ROOT_PASSWORD="rehdd"
|
ROOT_PASSWORD="rehdd"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
# Create a working directory
|
echo "This script must be run as root"
|
||||||
mkdir -p "${HOME}/LIVE_BOOT"
|
exit 1
|
||||||
|
|
||||||
# Create environment live directories
|
|
||||||
mkdir -p "${HOME}/LIVE_BOOT"/{staging/{EFI/BOOT,boot/grub/x86_64-efi,isolinux,live},tmp}
|
|
||||||
|
|
||||||
# Download Debian environment
|
|
||||||
debootstrap \
|
|
||||||
--arch=amd64 \
|
|
||||||
--variant=minbase \
|
|
||||||
stable \
|
|
||||||
"${HOME}/LIVE_BOOT/chroot" \
|
|
||||||
http://ftp.de.debian.org/debian/
|
|
||||||
|
|
||||||
# Set hostname
|
|
||||||
echo "reHDD" | sudo tee "${HOME}/LIVE_BOOT/chroot/etc/hostname"
|
|
||||||
|
|
||||||
# Install Linux Kernel
|
|
||||||
chroot "${HOME}/LIVE_BOOT/chroot" << EOF
|
|
||||||
apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
linux-image-amd64 \
|
|
||||||
live-boot \
|
|
||||||
systemd-sysv
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Install packages
|
|
||||||
chroot "${HOME}/LIVE_BOOT/chroot" << EOF
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
iwd \
|
|
||||||
curl openssh-client \
|
|
||||||
nano
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Set root password
|
|
||||||
chroot "${HOME}/LIVE_BOOT/chroot" passwd root
|
|
||||||
|
|
||||||
# Compress the chroot environment into a Squash filesystem
|
|
||||||
mksquashfs \
|
|
||||||
"${HOME}/LIVE_BOOT/chroot" \
|
|
||||||
"${HOME}/LIVE_BOOT/staging/live/filesystem.squashfs" \
|
|
||||||
-e boot
|
|
||||||
|
|
||||||
# Copy the kernel from inside the chroot to the live directory.
|
|
||||||
cp "${HOME}/LIVE_BOOT/chroot/boot"/vmlinuz-* \
|
|
||||||
"${HOME}/LIVE_BOOT/staging/live/vmlinuz"
|
|
||||||
|
|
||||||
# Copy initramfs from inside the chroot to the live directory.
|
|
||||||
cp "${HOME}/LIVE_BOOT/chroot/boot"/initrd.img-* \
|
|
||||||
"${HOME}/LIVE_BOOT/staging/live/initrd"
|
|
||||||
|
|
||||||
|
|
||||||
# Create an ISOLINUX (Syslinux) boot menu
|
|
||||||
cat <<'EOF' > "${HOME}/LIVE_BOOT/staging/isolinux/isolinux.cfg"
|
|
||||||
UI vesamenu.c32
|
|
||||||
|
|
||||||
MENU TITLE Boot Menu
|
|
||||||
DEFAULT linux
|
|
||||||
TIMEOUT 600
|
|
||||||
MENU RESOLUTION 640 480
|
|
||||||
MENU COLOR border 30;44 #40ffffff #a0000000 std
|
|
||||||
MENU COLOR title 1;36;44 #9033ccff #a0000000 std
|
|
||||||
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all
|
|
||||||
MENU COLOR unsel 37;44 #50ffffff #a0000000 std
|
|
||||||
MENU COLOR help 37;40 #c0ffffff #a0000000 std
|
|
||||||
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std
|
|
||||||
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std
|
|
||||||
MENU COLOR msg07 37;40 #90ffffff #a0000000 std
|
|
||||||
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std
|
|
||||||
|
|
||||||
LABEL linux
|
|
||||||
MENU LABEL reHDD [BIOS]
|
|
||||||
MENU DEFAULT
|
|
||||||
KERNEL /live/vmlinuz
|
|
||||||
APPEND initrd=/live/initrd boot=live
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Create an EFI/UEFI boot menu
|
|
||||||
cat <<'EOF' > "${HOME}/LIVE_BOOT/staging/boot/grub/grub.cfg"
|
|
||||||
insmod part_gpt
|
|
||||||
insmod part_msdos
|
|
||||||
insmod fat
|
|
||||||
insmod iso9660
|
|
||||||
|
|
||||||
insmod all_video
|
|
||||||
insmod font
|
|
||||||
|
|
||||||
set default="0"
|
|
||||||
set timeout=30
|
|
||||||
|
|
||||||
# If X has issues finding screens, experiment with/without nomodeset.
|
|
||||||
|
|
||||||
menuentry "reHDD [UEFI]" {
|
|
||||||
search --no-floppy --set=root --label DEBLIVE
|
|
||||||
linux ($root)/live/vmlinuz boot=live
|
|
||||||
initrd ($root)/live/initrd
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Copy the grub.cfg file to the EFI BOOT directory
|
|
||||||
cp "${HOME}/LIVE_BOOT/staging/boot/grub/grub.cfg" "${HOME}/LIVE_BOOT/staging/EFI/BOOT/"
|
|
||||||
|
|
||||||
# Create helper GRUB boot config
|
|
||||||
cat <<'EOF' > "${HOME}/LIVE_BOOT/tmp/grub-embed.cfg"
|
|
||||||
if ! [ -d "$cmdpath" ]; then
|
|
||||||
# On some firmware, GRUB has a wrong cmdpath when booted from an optical disc.
|
|
||||||
# https://gitlab.archlinux.org/archlinux/archiso/-/issues/183
|
|
||||||
if regexp --set=1:isodevice '^(\([^)]+\))\/?[Ee][Ff][Ii]\/[Bb][Oo][Oo][Tt]\/?$' "$cmdpath"; then
|
|
||||||
cmdpath="${isodevice}/EFI/BOOT"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
configfile "${cmdpath}/grub.cfg"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Copy BIOS/legacy boot required files to live environment
|
### Cleanup ###
|
||||||
cp /usr/lib/ISOLINUX/isolinux.bin "${HOME}/LIVE_BOOT/staging/isolinux/"
|
printf "\nCleanup\n"
|
||||||
cp /usr/lib/syslinux/modules/bios/* "${HOME}/LIVE_BOOT/staging/isolinux/"
|
rm -rf reHDD-Bootable.iso
|
||||||
|
rm -rf out/
|
||||||
|
|
||||||
# Copy EFI/modern boot required files to live environment
|
### Build ###
|
||||||
cp -r /usr/lib/grub/x86_64-efi/* "${HOME}/LIVE_BOOT/staging/boot/grub/x86_64-efi/"
|
printf "\nBuild\n"
|
||||||
|
START=$(date +%s.%N)
|
||||||
|
mkdir -p out
|
||||||
|
kiwi-ng system build --description ./ --set-repo obs://openSUSE:Tumbleweed/standard --target-dir ./out
|
||||||
|
mv -f ./out/*.iso reHDD_Bootable.iso 2>/dev/null; true
|
||||||
|
|
||||||
# Generate an EFI bootable GRUB image.
|
chmod -R 777 ./out
|
||||||
grub-mkstandalone -O i386-efi \
|
chmod 777 reHDD_Bootable.iso
|
||||||
--modules="part_gpt part_msdos fat iso9660" \
|
|
||||||
--locales="" \
|
|
||||||
--themes="" \
|
|
||||||
--fonts="" \
|
|
||||||
--output="${HOME}/LIVE_BOOT/staging/EFI/BOOT/BOOTIA32.EFI" \
|
|
||||||
"boot/grub/grub.cfg=${HOME}/LIVE_BOOT/tmp/grub-embed.cfg"
|
|
||||||
|
|
||||||
grub-mkstandalone -O x86_64-efi \
|
DURATION=$(echo "$(date +%s.%N) - $START" | bc)
|
||||||
--modules="part_gpt part_msdos fat iso9660" \
|
echo "Time taken: $DURATION seconds"
|
||||||
--locales="" \
|
|
||||||
--themes="" \
|
|
||||||
--fonts="" \
|
|
||||||
--output="${HOME}/LIVE_BOOT/staging/EFI/BOOT/BOOTx64.EFI" \
|
|
||||||
"boot/grub/grub.cfg=${HOME}/LIVE_BOOT/tmp/grub-embed.cfg"
|
|
||||||
|
|
||||||
# Create a FAT16 UEFI boot disk image containing the EFI bootloaders.
|
|
||||||
(cd "${HOME}/LIVE_BOOT/staging" && \
|
|
||||||
dd if=/dev/zero of=efiboot.img bs=1M count=20 && \
|
|
||||||
mkfs.vfat efiboot.img && \
|
|
||||||
mmd -i efiboot.img ::/EFI ::/EFI/BOOT && \
|
|
||||||
mcopy -vi efiboot.img \
|
|
||||||
"${HOME}/LIVE_BOOT/staging/EFI/BOOT/BOOTIA32.EFI" \
|
|
||||||
"${HOME}/LIVE_BOOT/staging/EFI/BOOT/BOOTx64.EFI" \
|
|
||||||
"${HOME}/LIVE_BOOT/staging/boot/grub/grub.cfg" \
|
|
||||||
::/EFI/BOOT/
|
|
||||||
)
|
|
||||||
|
|
||||||
# Generate ISO from live environment
|
|
||||||
xorriso \
|
|
||||||
-as mkisofs \
|
|
||||||
-iso-level 3 \
|
|
||||||
-o "${HOME}/LIVE_BOOT/debian-custom.iso" \
|
|
||||||
-full-iso9660-filenames \
|
|
||||||
-volid "reHDD" \
|
|
||||||
--mbr-force-bootable -partition_offset 16 \
|
|
||||||
-joliet -joliet-long -rational-rock \
|
|
||||||
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
|
|
||||||
-eltorito-boot \
|
|
||||||
isolinux/isolinux.bin \
|
|
||||||
-no-emul-boot \
|
|
||||||
-boot-load-size 4 \
|
|
||||||
-boot-info-table \
|
|
||||||
--eltorito-catalog isolinux/isolinux.cat \
|
|
||||||
-eltorito-alt-boot \
|
|
||||||
-e --interval:appended_partition_2:all:: \
|
|
||||||
-no-emul-boot \
|
|
||||||
-isohybrid-gpt-basdat \
|
|
||||||
-append_partition 2 C12A7328-F81F-11D2-BA4B-00A0C93EC93B ${HOME}/LIVE_BOOT/staging/efiboot.img \
|
|
||||||
"${HOME}/LIVE_BOOT/staging"
|
|
||||||
|
|
||||||
cp "${HOME}/LIVE_BOOT/debian-custom.iso" reHDD_Bootable.iso
|
|
0
root/.kiwi_dracut_hostonly.trigger
Normal file
0
root/.kiwi_dracut_hostonly.trigger
Normal file
0
root/.kiwi_grub_config.trigger
Normal file
0
root/.kiwi_grub_config.trigger
Normal file
4
root/etc/sysconfig/network/ifcfg-lan0
Normal file
4
root/etc/sysconfig/network/ifcfg-lan0
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
BOOTPROTO='dhcp'
|
||||||
|
MTU=''
|
||||||
|
REMOTE_IPADDR=''
|
||||||
|
STARTMODE='onboot'
|
1
root/etc/udev/rules.d/70-persistent-net.rules
Normal file
1
root/etc/udev/rules.d/70-persistent-net.rules
Normal file
@ -0,0 +1 @@
|
|||||||
|
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="?*", NAME="lan0"
|
11
root/usr/lib/systemd/system/dracut_hostonly.service
Normal file
11
root/usr/lib/systemd/system/dracut_hostonly.service
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Rebuild dracut initrd for this host
|
||||||
|
ConditionPathExists=/.kiwi_dracut_hostonly.trigger
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/bin/bash -c 'dracut -f'
|
||||||
|
ExecStartPost=/bin/bash -c 'rm -f /.kiwi_dracut_hostonly.trigger'
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
11
root/usr/lib/systemd/system/grub_config.service
Normal file
11
root/usr/lib/systemd/system/grub_config.service
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Rebuild grub config from distro toolkit
|
||||||
|
ConditionPathExists=/.kiwi_grub_config.trigger
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/bin/bash -c 'grub2-mkconfig -o /boot/grub2/grub.cfg'
|
||||||
|
ExecStartPost=/bin/bash -c 'rm -f /.kiwi_grub_config.trigger'
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
Loading…
Reference in New Issue
Block a user