写一个OIerLinux——如何自定义一个LiveCD

之前在学校就喜欢拿U盘里的LiveCD装逼写程序,现在想想好久没搞OI了,该让自己去适应OI的环境了。然后就萌生了自己制作LiveCD的想法。正好之前用的LiveCD (Kali持久化) 不是持久性差(大BUG小BUG出不停)就是稳定性差(经常装完一个软件之后剩余空间就没了)就是不合心意(没有自己想要的程序)。趁现在自己先去试试。然而试试就逝世踩了很多坑。现在网上教程也少就在这分享给大家。

选择模板LiveCD

这个没什么好说的,一开始我就是想在CCF官方的NOILinux上直接改(作为一个OIer还要比赛最好能有一个跟比赛环境差不多的),不过马上就望而却步……因为年代久远(就跟相关的LiveCD教程一样),系统内核是32位,导致包括VSCode在内的一众应用都装不上去(它们只支持amd64),况且32位的淘汰是一种必然的趋势……于是折衷了一下,选了个跟NOILinux版本相同的ubuntu 14.04.2(可以去官网Old Releases找)。

选择制作LiveCD的工具

一开始我是按照官方的路子走的,一堆英文稀里糊涂的然后走着走着就进了死胡同——Live启动的时候就卡在了启动Cups服务不动了……

看来像我这样的蒟蒻还是用现成的工具最好了!

于是就找到了一个好用的:Cubic:

Custom Ubuntu ISO Creater

(其实一开始我就看到了这个工具,但是看到慢成蜗牛的ppa源就望而却步了,然后绕了一圈又绕回来了……)

安装代码如下:

sudo apt-add-repository ppa:cubic-wizard/release
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6494C6D6997C215E
sudo apt update
sudo apt install cubic

(说实话我安装这东西的时候其实还不慢的……)

然后内容简洁明了:

把这堆东西填完之后就进入到了chroot界面:

对镜像内容的DIY

这里应该就是一个自定义LiveCD的核心了。按照在正常情况下的安装步骤就可以了。

在开始之前有一些小的点需要注意:

DNS的设置(域名无法解析之类的)

因为是14.04,所以/etc/resolv.conf默认是一个不可用的链接。担心这个文件可能会影响,于是就这么走了:

mv /etc/resolv.conf /etc/resolv.conf.bak
vi /etc/resolv.conf
# 注意ubuntu desktop自带nano但server没有,vim默认都没有。

然后里面填上nameserver 8.8.8.8即可。

chroot的图形界面

可能你看着命令行的时候会非常渴望看到图形窗口(操作方便),或者有必要调出图形界面调试一下效果,一直输出太麻烦了,可以考虑用系统自带的x服务(以下步骤二选一):

  1. 将图形界面显示到当前系统:
    bash
    # 系统shell
    xhost +
    # chroot (cubic) shell
    export DISPLAY=:0.0
    firefox #如果不行可以考虑前面加个DISPLAY=:0.0
  2. 创建自己独立的display:
    bash
    # 系统shell
    sudo apt-get install xserver-xephyr
    Xephyr -ac -screen 800x600 :1 #(其中800x600为你要设置的窗口大小)
    # chroot (cubic) shell
    export DISPLAY=:1
    firefox

apt源的设置

这一段感觉像废话:

修改/etc/apt/sources.list如下:

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse 

# 源码源可选,默认注释以加快速度
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

然后apt update即可。

安装GNome桌面

现在我用的是19.04,unity的界面还可以,但是14.04的unity看着就有亿点丑了,再加上模仿NOI Linux的需求,所以我选择安装GNome。

sudo apt-get install gnome-session-flashback -y
sudo apt-get purge unity ubuntu-desktop -y
sudo vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
# 进入后将 user-session=ubuntu 改成 user-session=gnome-fallback-compiz 即可

安装输入法

输入法没啥好说的,直接

sudo apt install fcitx fcitx-googlepinyin -y

走起。(有兴趣的可以尝试搜狗输入法,不过LiveCD运行可能会有问题)

安装上古的NOI Linux自带程序

粗粗一看NOILinux上面也没啥东西:

别的都好说……

sudo apt-get install anjuta ddd emacs

(Lazarus需要去SourceForge下载)

就是Arbiter和GUIDE这两难兄难弟……
(这都2020年了……还在用qt3写的GUIDE和arbiter)

一开始我毫无头绪……
直到看到了这篇文章:执行应用程序出现: No such file or directory_运维_温故而知新-CSDN博客

执行程序命令: ./test 出现错误:
bash: test : No such file or directory
确定执行的命令没有错,路径没有问题,另外通过 ls -l 查看,权限足够。
执行: ldd test 返回:not a dynamic executable

跟我的情况不是一样的马!
接着看:

readelf -l test | grep interpreter #查看该程序的加载程序
返回:[Requesting program interpreter: /lib/ld-linux.so.3] 由这该程序由/lib/ld-linux.so.3
但在/lib/下没有发现ld-linux.so.3 所以,问题应该就是出在这个test程序的加载上了,执行./test 返回的 No such file or directory 并不是指找不着test这个文件而是指的/lib/ld-linux.so.3这个文件或者其它的test所依赖的动态库。

又看了一篇文章:执行程序出现:bash: ./xxx : No such file or directory_运维_LshuangCC的博客-CSDN博客

程序启动时,就需要把ld-linux.so.2加载器将所有的动态库加载后然后再将控制权交给程序的入口。
关于动态库的工作原理,参考:https://blog.csdn.net/hudaliquan/article/details/50055493
在Ubuntu下是找不到/lib/ld-linux.so.2,于是我就从debian的lib中把ld-linux.so.2拷贝到ubuntu中(由于ld-linux.so.2是一个软连接,实际
拷贝的文件是ld-2.11.2.so,然后再ubuntu中手动建立ld-2.11.2.so软连接)

恍然大悟!原来是这样的!从NOILinux带走ld-linux.so.2!

然后的错误是这样的:

arbiter: error while loading shared libraries: libqt.so.3: cannot open shared object file: No such file or directory

这总比那个没头没脑的No such file or directory好太多了!只要去/usr/lib或者/lib把他提示给你的东西从NOILinux里面复制出来然后粘进去就可以了(建议还是哪里来的对应塞哪里,不过你一股脑地全塞进/usr/lib好像也没多大问题),大概会有二三十个文件吧。之后就可以了!

当界面出来的时候……

Guide同理,不过需要去NOI官网下载tar包,里面有install.sh自动配置。

日常清理

作为一个OIer,怎么能容忍开始菜单里一大堆没用的东西呢?

sudo apt-get remove libreoffice-common -y # 删除Libroffice (日后打算装wps)
sudo apt-get remove unity-webapps-common -y # 卸载Amazon链接
sudo apt-get remove -y thunderbird #雷鸟邮件客户端
sudo apt-get remove -y totem # 自带的播放器
sudo apt-get remove -y rhythmbox # 自带的音乐播放器
sudo apt-get remove -y empathy # 自带的即时聊天应用
sudo apt-get remove -y brasero # 自带的光盘刻录器
sudo apt-get remove -y simple-scan # 扫描仪
sudo apt-get remove -y gnome-mahjongg # 对对碰游戏
sudo apt-get remove -y aisleriot #纸牌游戏
sudo apt-get remove -y gnome-mines #扫雷游戏
sudo apt-get remove -y cheese #webcam 应用
sudo apt-get remove -y gnome-sudoku #数独游戏
sudo apt-get remove -y transmission-common #BT 客户端
sudo apt-get remove -y gnome-orca #屏幕阅读
sudo apt-get remove -y webbrowser-app #Ubuntu 自带的浏览器(有了 chrome 和 Firefox 根本用不到这个)
sudo apt-get remove -y remmina #远程控制软件
sudo apt-get remove -y deja-dup #备份
sudo apt-get remove -y onboard #屏幕键盘

sudo apt-get autoremove # 清除多余的包进一步压缩空间

或者就挂着一键搞定:

sudo apt-get remove -y libreoffice-common unity-webapps-common \
    thunderbird totem rhythmbox empathy brasero simple-scan \
    gnome-mahjongg aisleriot gnome-mines cheese gnome-sudoku \
    transmission-common gnome-orca webbrowser-app remmina \
    deja-dup onboard
sudo apt-get autoremove # 清除多余的包进一步压缩空间

附录:

我也不是光靠自己就能写出这么一篇文章的,感谢一下下面这些文章及他们的作者,感谢它们对我制作LiveCD和写这篇文章的帮助。

  1. LiveCDCustomization - Community Help Wiki
  2. 如何使用Cubic创建自定义Ubuntu ISO镜像 (好像不是我开始看到的那篇,先放着把)
  3. chroot 简介 - 优麒麟论坛
  4. Ubuntu 14.04更新为国内阿里源解决apt-get install无法执行的问题 - bug_killer - 博客园
  5. Ubuntu 14.04 安装配置GNOME经典界面_Linux教程_Linux公社-Linux系统门户网站
  6. Ubuntu 14.04 LTS 设置默认启动桌面运维极客点儿-CSDN博客
  7. anjuta的安装、配置以及第一个hello程序Java郭大侠的专栏-CSDN博客
  8. 执行应用程序出现: No such file or directory_运维_温故而知新-CSDN博客
  9. 执行程序出现:bash: ./xxx : No such file or directory_运维_LshuangCC的博客-CSDN博客
  10. Ubuntu 16.04卸载LibreOffice等不常用软件_运维_colin_lisicong的博客-CSDN博客
  11. Ubuntu 16.04 LTS 删除不常用的软件_运维_qq_32600929的博客-CSDN博客
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注