我想制作一个可以实时运行但也可以安装的 Ubuntu 混音版。我正在使用以下教程从头开始定制现场 CD和现场 CD 定制。我也曾使用过(4.0.5-1) 脚本ubuntu
的模式live-build
,但无法让它具有安装选项。我想从头开始,所以我不想使用uck
。我在尝试安装该发行版时遇到了一些问题。实时选项运行良好。首先,我在 Xubunutu 14.04 上完成所有这些操作。
我将从一开始就逐步介绍我的步骤:
ARCH=i386
RELEASE=trusty
# make chroot environment
mkdir -p work/chroot && cd work
sudo debootstrap --arch=$ARCH $RELEASE chroot
# Copy Files For Internet
sudo cp /etc/hosts chroot/etc/hosts
sudo cp /etc/resolv.conf chroot/etc/resolv.conf
sudo cp /etc/apt/sources.list chroot/etc/apt/sources.list
# Copy A text file with a list of packages (packages.txt) to the chroot environment
sudo mkdir -p chroot/usr/share/initialinstall
grep -vE '^\s*(#|$)' packages.txt >> packages-list.txt
sudo cp packages-list.txt chroot/usr/share/initialinstall/packages
rm packages-list.txt
sudo mount --bind /dev chroot/dev
现在我已经成功设置了 chroot 环境。现在我可以 chroot 进入该环境了。
sudo chroot ./chroot
mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts
HOME=/root
export LC_ALL=C
apt-get update
apt-get install --yes dbus
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
apt-get install --yes casper lupin-casper
apt-get install --yes discover laptop-detect os-prober
apt-get install --yes linux-generic
apt-get install --yes ubiquity-frontend-gtk
在安装这些先前的软件包时,grub-pc
会出现一个配置。我不认为这会影响我的主机系统,因为我处于 chroot 环境中。所以我点击 [确定],然后将其安装到dev/sda
然后,当仍然处于 chroot 环境中时,我会安装之前移入 chroot 环境的文本文件中的所有包。
# Install new packages from the list from before
apt-get install $(grep -vE "^\s*#" /usr/share/initialinstall/packages | tr "\n" " ")
# Prepare to exit chroot environment
rm /var/lib/dbus/machine-id
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
apt-get clean
rm -rf /tmp/*
rm /etc/resolv.conf
umount -lf /proc
umount -lf /sys
umount -lf /dev/pts
exit
sudo umount /path/to/chroot/dev
我已经有了syslinux squashfs-tools genisoimage
,所以现在我必须设置 cd 映像目录。
mkdir -p image/{casper,isolinux,install}
cp chroot/boot/vmlinuz-* image/casper/vmlinuz
cp chroot/boot/initrd.img-* image/casper/initrd.lz
cp /usr/lib/syslinux/isolinux.bin image/isolinux/
cp /boot/memtest86+.bin image/install/memtest
cp /usr/lib/syslinux/menu.c32 image/isolinux/
然后我制作isolinux.cfg
并放入了image/isolinux/
。它包含以下内容:
UI menu.c32
PROMPT 1
MENU TITLE Boot Menu
DEFAULT live
LABEL live
menu label ^Start or install Ubuntu Remix
kernel /casper/vmlinuz
append file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash --
LABEL live-install
menu label ^Install Uubuntu Remix
kernel /casper/vmlinuz
append file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd.lz quiet splash ---
LABEL check
menu label ^Check CD for defects
kernel /casper/vmlinuz
append boot=casper integrity-check initrd=/casper/initrd.lz quiet splash --
LABEL memtest
menu label ^Memory test
kernel /install/memtest
append -
LABEL hd
menu label ^Boot from first hard disk
localboot 0x80
append -
TIMEOUT 50
然后我创建了清单
sudo chroot chroot dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee image/casper/filesystem.manifest
sudo cp -v image/casper/filesystem.manifest image/casper/filesystem.manifest-desktop
REMOVE='ubiquity ubiquity-frontend-gtk ubiquity-frontend-kde casper lupin-casper live-initramfs user-setup discover1 xresprobe os-prober libdebian-installer4'
for i in $REMOVE
do
sudo sed -i "/${i}/d" image/casper/filesystem.manifest-desktop
done
之后压缩 chroot
sudo mksquashfs chroot image/casper/filesystem.squashfs
printf $(sudo du -sx --block-size=1 chroot | cut -f1) > image/casper/filesystem.size
创建磁盘定义
touch image/README.diskdefines
它包含了:
#define DISKNAME Ubuntu Remix
#define TYPE binary
#define TYPEbinary 1
#define ARCH i386
#define ARCHi386 1
#define DISKNUM 1
#define DISKNUM1 1
#define TOTALNUM 0
#define TOTALNUM0 1
识别为 Ubuntu Remix
touch image/ubuntu
mkdir image/.disk
cd image/.disk
touch base_installable
echo "full_cd/single" > cd_type
echo "Ubuntu Remix 14.04" > info # Update version number to match your OS version
echo "http//your-release-notes-url.com" > release_notes_url
cd ../..
计算 MD5
sudo -s
(cd image && find . -type f -print0 | xargs -0 md5sum | grep -v "\./md5sum.txt" > md5sum.txt)
exit
创建 ISO 映像
IMAGE_NAME=UBUNTUREMIX
cd image
sudo mkisofs -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-remix.iso .
cd ..
现在我尝试使用 VirtualBox 进行测试。我使用以下设置创建了一个虚拟机:
我的问题是关于测试它
当我启动它时,我会看到我想要的菜单,我可以尝试实时选项,效果很好。我关闭机器并尝试将其安装到虚拟硬盘上,ubiquity 安装程序运行正常,直到最后,我收到以下错误:An attempt to configure apt to install additional packages from the CD failed
它将我引导到实时版本,以便我可以尝试修复该问题。我尝试使用 lsblk 查看它是否看到 cdrom 设备,结果似乎看到了:
如果有人有任何提示或指示,我将不胜感激。这是我在这个项目上要克服的最后一个问题,我真的很困惑。2012 年的一个 debian 错误有一个解决方法来删除/usr/lib/ubiquity/apt-setup/generators/40cdrom
。我验证了我的发行版有该文件,并且我解压了一个 Xubuntu iso,它也有该文件。所以我不知道删除它是否是正确的做法,或者我的 Virtual Box 设置是否错误。
顺便说一下,这里是我安装的文本文件中的软件包:
xorg
xinit
xterm
xserver-xorg
xserver-xorg-core
xfonts-base
x11-xserver-utils
x11-apps
x11-session-utils
x11-utils
xinput
openbox
obconf
obmenu
tint2
volti
clipit
gmrun
lightdm
lightdm-gtk-greeter
light-locker
light-locker-settings
laptop-detect
spacefm
synaptic
libnotify4
dkms
gvfs
gvfs-backends
policykit-1
unzip
zip
p7zip
unrar-free
我可能也丢失了一个重要的包裹。