• 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} ' | 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} ' > 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} ' | 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,之后输出即可。

  • 相关阅读:
    LOJ#3212. 「CSP-S 2019」划分
    矩阵乘法
    SSF信息社团4月训练题目整理
    AtCoder Regular Contest 116
    SSF信息社团3月训练题目整理
    Codeforces Round #704 (Div. 2)
    SSF信息社团寒假训练题目整理(三)
    关于 zzt 得 0.8 分这件事
    Luogu P7244 章节划分
    SSF信息社团寒假训练题目整理(二)
  • 原文地址:https://www.cnblogs.com/52why/p/12362844.html
Copyright © 2020-2023  润新知