Linux(ubuntu)定制
定制的组成部分
linux安装文件加载程序isolinu及其他相关信息、根文件系统镜像(Ramdisk)、内核镜像、根文件系统四部分组成。安装过程由安装加载程序控制,直至完成后转入到挂载的根文件系统。
一、 文件系统制作过程
XXXXX的根文件系统是根据Ubuntu进行修改制作完成,因此根文件系统的格式依然为squashfs。具体制作流程如下:
1、 下载对应版本的iso镜像(本文为ubuntu-10.04.3-desktop-i386.iso),并且确认是否安装根文件系统解压缩及打包工具,没有则通过命令安装:
(sudo) aptitude install squashfs-tools genisoimage
2、 提取并解压根文件系统。具体如下:
1)设置目录
mkdir ~/live
mv ubuntu-10.04.3-desktop-i386.iso ~/live
cd ~/live
2)挂载livecd
mkdir mnt
(sudo) mount -o loop ubuntu-10.04.3-desktop-i386.iso mnt
3)提取文件到extract-cd目录
mkdir extract-cd
rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd
4)提取并解压squashfs文件系统
(sudo) unsquashfs mnt/casper/filesystem.squashfs
(sudo) mv squashfs-root edit
3、 准备并虚拟根目录。如果在虚根环境中要使用网络连接,则需要设置以下信息:
(sudo) cp /etc/resolv.conf edit/etc/
可能需要复制hosts文件
(sudo) cp /etc/hosts edit/etc/
1)挂载相关目录:
(sudo) mount --bind /dev/ edit/dev
(sudo) chroot edit
(sudo) mount -t proc none /proc
(sudo) mount -t sysfs none /sys
(sudo) mount -t devpts none /dev/pts
(注意:删除edit前应先卸载此处挂载的目录)
2)为了避免区域问题以及导入 GPG keys:
(sudo) export HOME=/root
(sudo) export LC_ALL=C
3)为chroot环境配置软件源。在安装和升级系统之前需要运行:
(sudo) dbus-uuidgen > /var/lib/dbus/machine-id
(sudo) dpkg-divert --local --rename --add /sbin/initctl
(sudo) ln -s /bin/true /sbin/initctl
5、定制软件包。查看已安装的软件包:
(sudo) dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -nr | less
1)卸载某个不需要的软件包
aptitude purge package_name(apt-get auntoremove –-purge package_name亦可)
2)更新软件列表
apt-get update
3)卸载其他自带组件
apt-get autoremove –purge \
ubuntu-docs \
ubuntuone-client \
ubuntuone-client-gnome \
python-ubuntuone \
python-ubuntuone-client \
python-ubuntuone-storageprotocol \
rhythmbox-ubuntuone-music-store \
libubuntuone-1.0-1 \
checkbox \
update-manager \
ubufox
4)卸载自带游戏
apt-get remove gnome-games gnome-games-common
5)卸载除英文外的语言包
apt-get remove language-pack-bn language-pack-de language-pack-es language-pack-fr language-pack-gnome-bn language-pack-gnome-de language-pack-gnome-es language-pack-gnome-fr language-pack-gnome-pt language-pack-gnome-xh language-pack-pt language-pack-xh
6)更新系统,包括内核(根据需要进行)
(注意:如果升级了内核,要保证将/boot下的vmlinuz-2.6.31-19-generic和initrd.img-2.6.31-19-generic更新到/home/yeelen/live/extract-cd/casper目录中的vmlinuz和initrd.lz。)
apt-get dist-upgrade
aptitude purge linux-image-2.6.31-14-generic
7)安装中文环境和ibus拼音输入法
apt-get install ibus-pinyin ibus-table-wubi language-support-input-zh-hans language-pack-zh-hans language-pack-gnome-zh-hans language-pack-gnome-zh-hans-base language-pack-zh-hans-base
8)安装openoffice常用语言包(当前安装了中文)
apt-get install openoffice.org-l10n-zh-cn openoffice.org-l10n-common openoffice.org-help-zh-cn openoffice.org-l10n-en-gb openoffice.org-help-en-gb openoffice.org-l10n-en-za
9)安装其他软件(根据需要安装)
apt-get install gnome-app-install
aptitude install gthumb exaile
aptitude install ubuntu-restricted-extras
aptitude install smplayer
aptitude install audacious gftp gwget chmsee compizconfig-settings-manager
apt-get install nautilus-open-terminal nautilus-gksu
10)修改火狐启动页,具体如下:
cd /usr/lib/firefox-*(版本号)/defaults/profile
gedit user.js
输入
user_pref("browser.startup.homepage","http://www.XXXX.cn");(根据需要设置相应网址)
保存退出即可。
6、定制gnome背景图片
1)复制png文件到/usr/share/backgrounds/
(在chroot外执行)(sudo) cp *.png edit/usr/share/backgrounds/
2)编辑以下两个文件,指定到新的png文件:
vi /usr/share/gnome-background-properties/ubuntu-wallpapers.xml(修改背景成员)
vi /usr/share/gconf/defaults/16_ubuntu-wallpapers(修改默认背景)
3)设定启动的默认背景图片。修改/usr/share/gconf/defaults/16_ubuntu-artwork
7、安装自定义的控件、图标、字体和主题(这里只是安装,没有进行修改)
1)安装字体。具体如下:
mkdir ~/live/edit//usr/share/fonts/truetype/msyh /* 创建字体存放目录 */
(在chroot外执行)(sudo) cp ~/live/temp/*.ttf ~/live/edit/usr/share/fonts/truetype/msyh/
/* 复制微软雅黑字体到指定目录 */
2)安装主题。去gnome-look下载主题控件文件,如Lilium.tar.gz:
(在chroot外执行)(sudo) tar zxvf ~/live/temp/Lilium.tar.gz -C ~/live/temp/ /* 解压主题包,并存放到临时目录下 */
(在chroot外执行)(sudo) mv -t ~/live/edit/usr/share/themes/ ~/live/temp/Lilium /* 将解压后的主题包安装到指定目录 */
3)安装图标。下载图标文件,如Simple.tar.bz2:
(在chroot外执行)(sudo) tar -xjf ~/live/temp/Simple-2.2.5.tar.bz2 -C ~/live/temp/ /* 解压图标文件,并存放到临时目录下 */
(在chroot外执行)(sudo) mv -t ~/live/edit/usr/share/icons/ ~/live/temp/Simple /* 将解压后的图标安装到指定目录下 */
4)复制index.theme主题文件到安装后的主题包中,设定关联关系:
(在chroot外执行)sudo cp ~/live/temp/index.theme ~/live/edit/usr/share/themes/Lilium/
之后需要根据内容进行相应修改,看了文件之后就明白,在此不细述。
详细:将主题图标复制到/usr/share/icons中,将主题管理复制到/usr/share/themes/中更改为原来的文件的名字,将原来文件的名字更改为其他的名字,然后比对原来的文件下的index.theme文件更改目前文件下的设置文件,默认替换文件是Amblance
更改gconf中的defaults中的16-Ubuntu-artwork中的值amblance为win7-icons
8、更改gconf值。
对gconf的任何设置变更都必须在/etc/gconf/gconf.xml.defaults/%gconf-tree.xml文件中添加相应的值. 在此文件中添加一个值将改变 GNOME 或者其他程序的默认设置, 所以你可以更改字体, 背影, 主题, 指针等等。下面使用gconftool-2进行修改默认设置,但我在实际应用中不行,可以尝试修改一下。后来我是直接修改/usr/share/gconf/defaults中的目录,如面板设置保存在05_panel-default-setup.entries,其他值在相应文件修改即可,和下面方法类似。
在chroot环境中,可以用gconftool-2代替gedit等编辑软件:
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set yourkey "yourvalue"
这里的string,yourkey和yourvalue分别是你想更改的类型、主键和值。
通过编辑gconf来分别设置每个值需要太多的时间,便捷的办法:
1)为按照你的意愿来测试用户和调整设置,执行:
gconftool-2 --dump /the/settings/branch/you/need > ~/live/your-new-settings.xml
(sudo) chown root:root ~/live/your-new-settings.xml
(sudo) mv ~/live/your-new-settings.xml ~/live/edit/your-new-settings.xml
转到下一步进行调试修改。
2)然后, 在chroot环境中, 执行:
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --load /your-new-settings.xml /* 加载配置文件 */
rm /your-new-settings.xml
通过这个方法你可以导入整个分支, 例如/apps/panel面板的所有设置。
3)应用程序字体设置:
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set /desktop/gnome/interface/font_name "Microsoft YaHei 9"
4)桌面字体
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set /apps/nautilus/preferences/desktop_font "Microsoft YaHei Bold 10"
5)窗口标题栏
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set /apps/metacity/general/titlebar_font "Microsoft YaHei Bold 10"
6)关闭最小化效果
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /apps/metacity/general/reduced_resources true
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /desktop/gnome/interface/accessibility true
7)默认主题、图标设置
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set /desktop/gnome/interface/gtk_theme "Lilium" /* 设置主题 */
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set /desktop/gnome/interface/icon_theme "Simple" /* 设置图标 */
8)显示菜单图标
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /desktop/gnome/interface/buttons_have_icons true
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /desktop/gnome/interface/menus_have_icons true
9)桌面显示计算机、主目录、回收站、网上邻居
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /apps/nautilus/desktop/computer_icon_visible true /* 显示计算机(我的电脑)*/
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /apps/nautilus/desktop/home_icon_visible true /* 显示家目录(我的文档)*/
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /apps/nautilus/desktop/trash_icon_visible true /* 显示回收站 */
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /apps/nautilus/desktop/network_icon_visible true /* 显示网络服务器(网上邻居)*/
10)默认4个工作区,可修改为对应值(1、2、4)
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type int --set /apps/metacity/general/num-workspaces 4
11)关闭开机自动更新提示
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /apps/update-notifier/auto_launch false
rm /etc/xdg/autostart/update-notifier.desktop
12)设置标题栏按钮。Ubuntu默认的标题栏按钮(最大化、最小化、关闭)是放在左边,Windows是放在右边,因此可以设置其放置格式,具体如下:
左边按钮:右边按钮
如要改成Windows则如下:
menu:minimize,maximize,close
保存在/usr/gconf/defaults/下的90_light_themes中及主题安装包中(设置主题的按钮风格)。以”:”为界,左边的为放置在窗口左边的按钮,右边的放置在窗口右边。
9、更改gfxboot的默认语言
1)重新编译gfxboot
cd ~/live/
mkdir src
cd src
sudo aptitude install dpkg-dev uck
sudo apt-get source gfxboot-theme-ubuntu gfxboot
cd gfxboot-theme-ubuntu*/po
sudo gedit zh_CN.po
2)进行相应的修改,保存退出
(sudo) make
cd ..
(sudo) make DEFAULT_LANG=zh_CN
(sudo) rm -rf ~/live/extract-cd/isolinux/*
(sudo) cp -af boot/* ~/live/extract-cd/isolinux/
3)修改livecd启动界面的logo。修改/home/yeelen/live/extract-cd/isolinux/splash.pcx文件即可。
当然还有另外一种简便的方法变更gfxboot默认语言,而不重建软件包:在isolinux目录中创建一个名称为lang的文件来加载你的本地语言名称,如:
(在chroot外执行)(sudo) vi ~/live/extract-cd/isolinux/lang
要设为中文则输入zh_CN(其他设置为对应值)后保存退出。
10、确保没有大于999的UID,我在实际执行中好像不行。
awk -F: '$3 > 999' /etc/passwd
usermod -u 500 nobody
11、默认杂项
你或许希望通过编辑/etc/default中的文件来改变系统的默认启动行为。你也可以编辑/etc/profile,/etc/bash.bashrc,和/etc/bash_completion来改变系统所有用户的登录设置。你不能直接编辑livecd的默认用户,如casper,ubuntu,or user,因为该帐户是在系统启动时创建的。你可以直接编辑根用户的默认文件(/root在chroot环境中),如改变时区:
dpkg-reconfigure tzdata
如果你希望添加一个新位置并将其置为默认位置,更新/etc/default/locale。你可能需要编辑位置:
locale-gen new_locale
update-locale LANG=new_locale LANGUAGE=new_locale LC_ALL=new_locale
(注意:这些更改必须以root身份在chroot环境执行。)
12、安装界面定制
修改ubiquity-slideshow,以显示安装过程中的中文介绍(根据实际需要进行修改):
cp -af /usr/share/ubiquity-slideshow/slides/loc.zh_CN/* /usr/share/ubiquity-slideshow/slides/
rm -rf loc.* /* 此处只保留中文介绍 */
修改网页文件内容以适合自己的定制版本。
13、试验功能(不能保证没有问题)
1)修改gdm主题和背景
gksudo -u gdm dbus-launch gnome-appearance-properties
修改主题和背景图片,背景要与xsplash一致。
2)修改xsplash背景
(在chroot外执行)(sudo) cp ~/live/temp/bg_2560x1600.jpg ~/live/edit/usr/share/images/
xsplash/
3)修改grub背景
将做好的图片重命名为moreblue-orbit-grub.tga,分辨率时800x600,保存到~/live/temp/ 然后在chroot外执行:
(sudo) cp ~/live/temp/moreblue-orbit-grub.tga ~/live/edit/usr/share/images/desktop-base/
如果想支持jpg和png格式图片,按照下面的方法修改配置文件:
vi /etc/grub.d/00_header
cat << EOF
if [ -s /boot/grub/grubenv ]; then
have_grubenv=true
load_env
fi
set default="${GRUB_DEFAULT}"
if [ \${prev_saved_entry} ]; then
saved_entry=\${prev_saved_entry}
save_env saved_entry
prev_saved_entry=save_env prev_saved_entry
fi
insmod jpeg /* 增加支持JPG文件 */
insmod png /* 增加支持PNG文件 */
EOF
cat << EOF
if loadfont `make_system_path_relative_to_its_root ${GRUB_FONT_PATH}` ; then
set gfxmode=1024*768 /* 设置GRUB分辨率,按自己情况设置 */
insmod gfxterm
insmod ${GRUB_VIDEO_BACKEND}
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't
# understand terminal_output
terminal gfxterm
fi
fi
EOF
vi /etc/grub.d/05_debian_theme
use_bg=false
if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then
for i in {/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga,jpg} ; do /* 识别格式,增加JPG */
if is_path_readable_by_grub $i ; then
bg=$i
case ${bg} in
*.png) reader=png ;;
*.tga) reader=tga ;;
*.jpg|*.jpeg) reader=jpeg ;;
esac
if test -e /boot/grub/${reader}.mod ; then
echo "Found Debian background: `basename ${bg}`" >&2
use_bg=true
break;
fi
fi
done
fi
cat << EOF
insmod ${reader}
if background_image `make_system_path_relative_to_its_root ${bg}` ; then
set color_normal=white/black /* 设置字体颜色(注意图片的颜色与字的颜色) */
set color_highlight=blue/black /* 设置字体颜色 */
else
EOF
fi
之后运行:
update-grub
15、内核更新(根据需要进行)
1)livecd内核更新(如果你在之前的步骤中更新了内核,那么务必要做以下操作)
(在chroot外执行)(sudo) rm /home/yeelen/live/extract-cd/casper/initrd.lz
(在chroot外执行)(sudo) rm /home/yeelen/live/extract-cd/casper/vmlinuz
(在chroot外执行)(sudo) cp ~/live/edit/boot/vmlinuz-2.6.31-19-generic ~/live/extract-cd/
casper/
(在chroot外执行)(sudo) mv ~/live/extract-cd/casper/vmlinuz-2.6.31-19-generic ~/live/
extract-cd/casper/vmlinuz
(在chroot外执行)(sudo) cp ~/live/edit/boot/initrd.img-2.6.31-19-generic ~/
cd ~/
(在chroot外执行)sudo mv ~/initrd.img-2.6.31-19-generic initrd.gz
2)解压gz文件并再压缩为lz格式:
(在chroot外执行)(sudo) gzip -dc initrd.gz | sudo lzma -7 > initrd.lz
(在chroot外执行)(sudo) mv initrd.lz ~/live/extract-cd/casper/
(在chroot外执行)(sudo) rm -rf initrd.gz
16、退出chroot。具体如下:
1)清理aptitude缓存:
apt-get autoremove
apt-get autoclean
aptitude clean
2)删除临时文件和nameserver设置:
rm -rf /tmp/* ~/.bash_history
rm /etc/resolv.conf
3)如果安装了软件,应该在chroot内执行
rm /var/lib/dbus/machine-id
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
4)umount曾挂载的目录:
umount /proc
umount /sys
umount /dev/pts
5)退出chroot:
exit
(注意:此处退出chroot,以下指令实际上是在chroot外执行。)
(sudo) umount edit/dev
(注意:如果不能执行umount /proc,可尝试umount -lf /proc)
17、制作根文件系统,具体如下:
1)重新生成manifest及manifest-desktop文件:
rm extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
(sudo) chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest
sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop
根据manifest生成manifest-desktop也有另一方式:
(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
2)压缩文件系统:
(sudo) rm extract-cd/casper/filesystem.squashfs /* 必须先移除旧的文件系统 */
(sudo) mksquashfs edit extract-cd/casper/filesystem.squashfs
3)在 extract-cd/README.diskdefines 中添加镜像的名称
(sudo) vi extract-cd/README.diskdefines
4)删除旧的md5sum.txt文件并计算新的md5码
cd extract-cd
(sudo) rm md5sum.txt
find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt
5)创建ISO
(sudo) mkisofs -D -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 /mnt/sda5/Temporary/yeelen_ubuntu-desktop-i386.iso .
18、测试CD
用vmware或者virtualbox虚拟机测试(具体根据自己条件选择相应测试工具即可)。在改变livecd系统内核后虚拟运行中会出现一些疑难问题。如果你遇到了,那么在启动界面出现时按一下F6键。引动光标到splash quite和--之间并键入:all_generic_ide
19、烧录CD
cdrecord dev=/dev/cdrom yeelen_ubuntu-9.10-desktop-i386.iso
当然也可以使用烧录工具将镜像烧录即可。
20、注意事项
1)官方教程中的压缩根文件系统和制作iso镜像有点问题,采用本文中的方法即可。
官方教程:https://help.ubuntu.com/community/LiveCDCustomization.
2)uname的问题。执行uname输出信息信息有包含Ubuntu的信息(内核版本),简单的解决方法是:先将/bin/uname命名为/bin/.uname,之后编写一个/bin/uname,内容如下:
#!/bin/bash
#***************************
# shell script of uname
#***************************
.uname $@ | sed "s/Ubuntu/xxxx/g"
exit
实际上就是将输出信息中的Ubuntu修改为xxxx,之后输出即可。