手工打造自己的 Fedora LiveCD

其他Linux/Unix/BSD/OSX等发行版讨论
回复
头像
torachiyo
帖子: 81
注册时间: 2015-11-29 8:32
系统: Kali Linux

手工打造自己的 Fedora LiveCD

#1

帖子 torachiyo » 2018-03-08 19:39

# 前置作業
系統裝好後先執行下面指令清除 dnf cache
dnf clean all
dnf autoremove

然後重開機進入其他Linux系統或live系統
掛載要備份的分割區,例如要備份 sda4
將 sda4 掛載到 /mnt
sudo -s
mount /dev/sda4 /mnt

清除垃圾
# boot clean
rm -rf /mnt/boot/grub2/grub.cfg
rm -rf /mnt/boot/initramfs-0-rescue-*
rm -rf /mnt/boot/vmlinuz-0-rescue-*
# etc clean
rm -rf /mnt/etc/nsswitch.conf.bak
rm -rf /mnt/etc/group-
rm -rf /mnt/etc/gshadow-
rm -rf /mnt/etc/passwd-
rm -rf /mnt/etc/shadow-
rm -rf /mnt/etc/subgid-
rm -rf /mnt/etc/subuid-
rm -rf /mnt/etc/fstab
# home clean
rm -rf /mnt/home/*/*
rm -rf /mnt/home/*/.*
rm -rf /mnt/root/*
rm -rf /mnt/root/.*
# misc clean
rm -rf /mnt/media/*
rm -rf /mnt/tmp/*
rm -rf /mnt/tmp/.*
rm -rf /mnt/lost+found
# var clean
rm -rf /mnt/var/cache/dnf/*
rm -f /mnt/var/log/*
rm -rf /mnt/var/log/*/*
rm -rf /mnt/var/cache/apt/archives/*
rm -rf /mnt/var/lib/blueman/*
rm -rf /mnt/var/lib/bluetooth/*
rm -rf /mnt/var/lib/dbus/*
rm -rf /mnt/var/lib/dhclient/*
rm -rf /mnt/var/lib/dkms/*
rm -rf /mnt/var/lib/dnf/yumdb/*
rm -rf /mnt/var/lib/dnf/history/*
rm -rf /mnt/var/lib/dnsmasq/*
rm -rf /mnt/var/lib/logrotate/*
rm -rf /mnt/var/lib/NetworkManager/*
rm -rf /mnt/var/lib/rsyslog/*
rm -rf /mnt/var/lib/systemd/catalog/*
rm -rf /mnt/var/lib/systemd/coredump/*
rm -rf /mnt/var/lib/upower/*
rm -rf /mnt/var/tmp/*

修改主機名稱
名稱可隨意修改,範例: localhosts
echo localhosts > /mnt/etc/hostname


# 開始製作 LiveOS Image
例如: 存放路徑在 /media/fedora/DATA/ 目錄,要備份的分割區為sda4

SAVEDIR=$/media/fedora/DATA/
TARGET=sda4

# 建立目錄
mkdir -p $SAVEDIR/squashfs-root/LiveOS

# 計算sda4已使用區塊大小(Live檔案系統的容量)
USED=$(df | grep /dev/$TARGET | awk '{print $3 }')

# 區塊大小增加1GB容量,因為Live系統啟動時會用掉約400MB的空間,所以啟動後Live系統還有約600MB的可用空間
BS=$(expr $USED + 1048576)

# 製作 空白的 image
dd if=/dev/zero of=$SAVEDIR/squashfs-root/LiveOS/rootfs.img bs=$BS count=1024 status=progress

# 格式化為 ext4
mkfs.ext4 -j -L Fedora $SAVEDIR/squashfs-root/LiveOS/rootfs.img

# 掛載 rootfs.img
mkdir -p /tmp/rootfs
mount -o loop $SAVEDIR/squashfs-root/LiveOS/rootfs.img /tmp/rootfs

# 將 sda4 內容複製到 rootfs.img
SRC=/mnt
DEST=/tmp/rootfs
cd $SRC; (tar cf - *) | (cd $DEST ; tar xf -) > /dev/null 2>&1

# 打包 rootfs.img 為 squashfs.img
cd $SAVEDIR
mksquashfs squashfs-root squashfs.img

# 完成後重建 fstab
UUID=$(blkid -s UUID -o value /dev/sda4)
cat << EOF > /mnt/etc/fstab
UUID=$UUID / ext4 defaults 1 1
EOF

或使用 genfstab 重建 fstab
wget https://raw.githubusercontent.com/Mint- ... r/genfstab
chmod +x genfstab
./genfstab -U /mnt > /mnt/etc/fstab

# 卸載sda4與rootfs
umount /mnt
umount /tmp/rootfs

到此基本上 live 檔案系統製作完成,接下來製作可引導的 Live 系統的 initramfs。

# 製作 Live initramfs

# 安裝 dracut-live
sudo dnf install dracut-live

dracut-live 套件不支援 NTFS 分割區的引導,可以安裝 NTFS Loop 補釘

# dracut NTFS Loop Boot Patch
git clone https://github.com/rgcjonas/dracut-ntfsloop.git
sudo cp -r dracut-ntfsloop/90ntfsloop /usr/lib/dracut/modules.d/
sed -i 's/$(find_binary "ntfs-3g")/\/usr\/bin\/ntfs-3g/g' /usr/lib/dracut/modules.d/90dmsquash-live/dmsquash-live-root.sh

# 建立可引導 Live 系統的 initramfs
sudo dracut --nomdadmconf --nolvmconf --xz \
--add 'livenet dmsquash-live ntfsloop convertfs pollcdrom qemu qemu-net' \
--omit 'plymouth' --no-hostonly --debug \
--no-early-microcode --force \
~/initrd.img

# 複製 vmlinuz
cp /boot/vmlinuz-$(uname -r) ~/vmlinuz

# 製作ISO映像檔
下載iso文件 (取自fedora-27-xfce iso,內容文字標題自行修改)
wget https://github.com/Mint-Fans/linux-pack ... iso.tar.gz
tar zxvf Fedora-mkiso.tar.gz

解壓縮後,將 squashfs.img、initrd.img、vmlinuz 放到 Fedora/Fedora64/LiveOS/ 目錄內

然後開始執行腳本打包iso
cd Fedora
./fedora64-mkiso


# USB或HD Grub4dos引導參數
範例: 分割區標籤為 INST
title Fedora
find --set-root --ignore-floppies --ignore-cd /LiveOS/vmlinuz
kernel /LiveOS/vmlinuz root=live:LABEL=INST rd.live.image
initrd /LiveOS/initrd.img
boot

# 將ISO映像檔寫到USB的方法
lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 201M 0 part
├─sda2 8:2 0 201M 0 part /boot
├─sda3 8:3 0 15G 0 part /
└─sda4 8:4 0 15G 0 part /mnt
sdb 8:16 1 979.8M 0 disk
└─sdb1 8:17 1 978M 0 part /run/media/fedora/USB
sr0 11:0 1 1024M 0 rom

例如USB裝置為sdb
dd if=fedora.iso of=/dev/sdb
回复