我使用 UCK 创建 Mate 15.10 图像时遇到了一些问题。
我有:
uck 2.4.7-0ubuntu2
LSB Version: core-2.0-amd64:core-2.0-noarch:core-3.0-amd64:core-3.0-noarch:core-3.1-amd64:core-3.1-noarch:core-3.2-amd64:core-3.2-noarch:core-4.0-amd64:core-4.0-noarch:core-4.1-amd64:core-4.1-noarch:security-4.0-amd64:security-4.0-noarch:security-4.1-amd64:security-4.1-noarch
主脚本中存在一系列扩展错误,并且依赖项未得到满足。如何使其正常工作?
为了使其创建 ISO,需要进行哪些更改?
答案1
UCK 主脚本需要一些更新。
问题 1:
缺少依赖项:gfxboot-theme-ubuntu
解决它:
sudo apt-get install gfxboot-theme-ubuntu
问题 2:
语言环境一团糟。我没有检查仍安装的语言环境(根本没有检查)。UCK 将从当前安装中获取它们。
问题 3:
缺少文件。
/usr/lib/uck/customization-profiles/localized_cd/customize_iso
为了使它能够正常工作,我在这里给你我修改过的内容(与原始版本相比的更改标记为“HS”):
#!/bin/bash
###################################################################################
# UCK - Ubuntu Customization Kit #
# Copyright (C) 2006-2010 UCK Team #
# #
# UCK is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# UCK is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with UCK. If not, see <http://www.gnu.org/licenses/>. #
###################################################################################
# NAME:
# customize_iso -- customize iso image outside of root FS
#
# SYNOPSIS:
# customize_iso [remaster_home] [customization_scripts_dir]
#
# DESCRIPTION:
# This procedure performs additional customization that needs to
# happen outside of the image of the root file system:
# - Configuration of the boot environment
# - isolinux configuration
# - gfxboot configuration (language/keyboard support!)
# - propagation of a new kernel/initrd
# - Simple bootmanager (directory "install" in image)
# - Configuration of additional resources outside the root FS
# - Add-Ons (like sample document/music/video files)
# - More Add-Ons (like OSS for Win / Mac)
#
# NOTES:
# Execution of the procedure may require Internet access to download
# the source of the latest version gfxboot-theme-ubuntu.
#
# If a local copy of gfxboot-theme-ubuntu is available in the remaster
# home, it will be used instead of a (possibly updated) download.
SCRIPT_DIR=`dirname "$0"`
REMASTER_HOME=${1:-~/tmp}
SCRIPT_DIR=${2-$REMASTER_HOME/customization-scripts}
ISO_REMASTER_DIR="$REMASTER_HOME/remaster-iso"
REMASTER_DIR="$REMASTER_HOME/remaster-root"
BOOT_LANG=`cat "$SCRIPT_DIR/livecd_locale"`
function failure()
{
echo "$@"
exit 1
}
function get_latest_kernel()
{
set -- $(ls "$REMASTER_DIR"/boot/vmlinuz* 2>/dev/null |
sed -e "s@$REMASTER_DIR/boot/@@" |
tr -- '-.' '\t' |
sort --key=2 --key=3 --key=4 --key=5 --numeric-sort |
tail -n1 )
[ "$1" = "vmlinuz" ] && echo "$REMASTER_DIR/boot/$1-$2.$3.$4-$5-$6"
}
# Create a temporary directory to assemble the gfxboot stuff in
BUILD_DIR=`mktemp -d`
if [ -d $REMASTER_HOME/gfxboot-theme-ubuntu ]
then
cp -r $REMASTER_HOME/gfxboot-theme-ubuntu "$BUILD_DIR" ||
failure "Cannot copy gfxboot-theme-ubuntu to $BUILD_DIR"
pushd "$BUILD_DIR" >/dev/null ||
failure "Cannot change directory to $BUILD_DIR"
else
pushd "$BUILD_DIR" >/dev/null ||
failure "Cannot change directory to $BUILD_DIR"
#-----HS (1)-->
#DISTRO_CODENAME=`cd "$ISO_REMASTER_DIR"/dists && find . -maxdepth 1 -type d | grep '/' | cut -d '/' -f2` ||
# failure "Unable to identify Ubuntu distro codename"
DISTRO_CODENAME="$(lsb_release -c|awk '{print $2}')"||
failure "Unable to identify Ubuntu distro codename"
#-----HS (1)--<
APT_SOURCES_TMP_DIR=`mktemp -d`
wget -c http://archive.ubuntu.com/ubuntu/ubuntu/ubuntu/dists/$DISTRO_CODENAME/main/source/Sources.gz -O "$APT_SOURCES_TMP_DIR"/Sources.gz
#-----HS (2)-->
#GFXBOOT_THEME_UBUNTU_SOURCE_PACKAGE=http://archive.ubuntu.com/ubuntu/ubuntu/ubuntu/pool/main/g/gfxboot-theme-ubuntu/$(zgrep gz "$APT_SOURCES_TMP_DIR"/Sources.gz | grep gfxboot-theme-ubuntu | sed -n 1p | awk '{ print $3 }')
GFXBOOT_THEME_UBUNTU_SOURCE_PACKAGE=http://archive.ubuntu.com/ubuntu/ubuntu/ubuntu/pool/main/g/gfxboot-theme-ubuntu/$(dpkg -l|grep gfxboot-theme-ubuntu|awk '{print $2"_"$3"_"$4".deb"}')
#-----HS (2)--<
wget $GFXBOOT_THEME_UBUNTU_SOURCE_PACKAGE ||
failure "Unable to download gfxboot-theme-ubuntu source package from $GFXBOOT_THEME_UBUNTU_SOURCE_PACKAGE"
#-----HS (3)-->
#tar xfz *.tar.gz ||
tar xfz *.tar.gz
dpkg -x *.deb . ||
failure "Unable to extract gfxboot-theme-ubuntu source package"
#-----HS (3)--<
fi
# Build the gfx boot theme
#-----HS (4)-->
cd usr/share
#-----HS (4)--<
cd gfxboot-theme-ubuntu
cd po
ln -s pt.po pt_PT.po
cd ..
##if [ "$BOOT_LANG" = "pt_PT" ]; then
## make DEFAULT_LANG="pt" || failure "Failed to build gfxboot theme"
##else
make DEFAULT_LANG="$BOOT_LANG" || failure "Failed to build gfxboot theme"
##fi
# Fix list of languages
pushd boot >/dev/null
# Create regexp that matches all language packs on CD
langpack=""
for langpack in `cat "$SCRIPT_DIR/language_packs"`; do
if [ -z "$LANGPACKS" ]; then
LANGPACKS="$langpack"
else
LANGPACKS="$LANGPACKS|$langpack"
fi
done
# Rewrite langlist
cat "$SCRIPT_DIR/livecd_locales" >langlist
popd >/dev/null
# Copy to isolinux in image directory
cp -af boot/* "$ISO_REMASTER_DIR/isolinux/" ||
failure "Error while copying boot files to $ISO_REMASTER_DIR/isolinux"
popd >/dev/null
# Cleanup
[ "$BUILD_DIR" != "/" ] && rm -rf "$BUILD_DIR"
# Copy kernel and initrd, in case it was changed during installation
VMLINUZ=$(get_latest_kernel)
if [ "$VMLINUZ" != "" ]
then
INITRD="$REMASTER_DIR"/boot/initrd.img-$(echo `basename $VMLINUZ` | cut -d'-' -f 2-)
if [ -e "$VMLINUZ" -a -e "$INITRD" ]
then
echo "Updating kernel:"
echo " kernel=$VMLINUZ"
echo " initrd=$INITRD"
cp -f "$VMLINUZ" "$ISO_REMASTER_DIR/casper/vmlinuz"
cp -f "$INITRD" "$ISO_REMASTER_DIR/casper/initrd.gz"
else
echo "Not updating kernel as initrd not present"
fi
fi
# Misc fixup for Karmic
pushd "$ISO_REMASTER_DIR"/isolinux >/dev/null
# What used to be called "message" is now called "bootlogo"
if [ -f isolinux.cfg -a -n "`grep "gfxboot bootlogo" isolinux.cfg 2>/dev/null`" ]
then
if [ -f message ]
then
echo "Using bootlogo instead of message"
mv message bootlogo
fi
fi
# What used to be a gzipped initrd now is a lzma compressed initrd
if [ -f text.cfg ] || [ -f txt.cfg ]
then
# At least one of the .cfg file will be missing. Drop error message.
lzused=`grep initrd.lz text.cfg txt.cfg 2>/dev/null`
lzmacmd=`which lzma`
if [ -n "$lzused" ]
then
if [ -n "$lzmacmd" ]
then
if [ -f ../casper/initrd.gz ]
then
pushd "$ISO_REMASTER_DIR"/casper >/dev/null
echo "Recompressing initrd from gzip to lzma"
rm -f initrd.lz
gunzip <initrd.gz | $lzmacmd >initrd.lz
rm -f initrd.gz
popd >/dev/null
fi
else
if [ -f ../casper/initrd.gz ]
then
echo "lzma command not installed"
echo "Switching permanently to gzipped initrd"
sed -i -e 's/initrd\.lz/initrd.gz/g' text.cfg txt.cfg
rm -f ../casper/initrd.lz
else
: do nothing - no initrd.gz
fi
fi
else
: do nothing - initrd.lz not used
fi
fi
此致。
答案2
问题 4
缺少用于通过命令行进行自定义操作的匹配终端。
我改变了run_console()
文件中的功能/usr/lib/uck/customization-profiles/localized_cd/customize
:
function run_console()
{
echo "Starting console application..."
CONSOLE_APP=`which konsole`
CONSOLE_APP_OPTIONS=(--caption "UCK customization console" -e /bin/bash)
if [ "$CONSOLE_APP" = "" ]; then
CONSOLE_APP=`which gnome-terminal`
CONSOLE_APP_OPTIONS=(-t "UCK customization console" -e /bin/bash)
fi
if [ "$CONSOLE_APP" = "" ]; then
CONSOLE_APP=`which xfce4-terminal`
CONSOLE_APP_OPTIONS=(-T "UCK customization console" -e /bin/bash)
fi
if [ "$CONSOLE_APP" = "" ]; then
CONSOLE_APP=`which lxterminal`
CONSOLE_APP_OPTIONS=(-t "UCK customization console" -e /bin/bash)
fi
if [ "$CONSOLE_APP" = "" ]; then
CONSOLE_APP=`which mate-terminal`
CONSOLE_APP_OPTIONS=(-t "UCK customization console" -e /bin/bash)
fi
if [ "$CONSOLE_APP" = "" ]; then
CONSOLE_APP=`which xterm`
CONSOLE_APP_OPTIONS=(-title "UCK customization console" -e /bin/bash)
fi
if [ "$CONSOLE_APP" = "" ]; then
dialog_msgbox "Failure" "Unable to find any console application"
else
eval `dbus-launch --sh-syntax --exit-with-session 2>/dev/null`
$CONSOLE_APP "${CONSOLE_APP_OPTIONS[@]}"
RESULT=$?
fi
}