源代码编译制作slitaz

前段时间很忙的,这段时间终于可以让自己休息一下,调整下,因为网游的教程要切换到linux才能整理,这段时间基本上都是在windows下的,很是无奈,突然想起之前有提到打算从源代码来编译slitaz,同时,考虑到代码复制来复制去总不方便,这次决定付诸实施,也算清还下欠账。
我从slitaz的官方网站上的文档学了些内容,关于如何制作一个ext2的文件,并挂载,编译内核,编译busybox,制作rootfs等等,一条一条的命令,让我想起了LFS的编译过程。这时多么无奈的一件事情啊。我注意到slitaz的团体制作了一些工具,而他们肯定不可能是通过这种方式来进行编译和制作的,这有一定的工具来自动化或者半自动化。我注意到tazbb,tazlito,tazwok,tazdev这几个命令,以及hg这个版本管理,大概用了下hg,原来和git一样(可能有些区别,我并未深入研究),刚开始的时候,总是某个命令丢失啦,或者缺少文件啦,然后不断地翻资料,在slitaz的官方网站上,我几乎翻遍了每篇文章,有时候,恨不得去学学德文。我甚至根据url的目录结构来猜测某个命令的说明用法,或者直接输入目录,看服务器上到底是哪些文件。不过,总算不负有心人,算是整理出来了。
以slitaz 3.0为例,我用的是包含所有编译后的软件的那个镜像(1.5G),这有个好处就是如果编译过程中出现了某个命令缺失的话,不用联网也可以直接安装了,况且,针对我的1MB的破网,每个软件都从网上下载的话,会累死的。这个1.5G的包还有一个好处就是在光盘镜像的根目录下,有一个install.sh的执行文件。使用root用户执行该命令,将创建slitaz用户即相关文件,还有一个wok目录的链接。

slitaz用户有什么用?
slitaz用户是上述提到的tazXX类工具默认的用户目录,默认执行都是在该用户目录下的,wok目录中的内容为每个软件包的编译脚本,不过,我都是将这个目录删掉(rm -fr wok),然后从光盘目录中复制出来的(cp -r /media/packages-3.0/wok /home/slitaz/),这样防止自己不小心将关盘退出去了,也没有太大的影响。
还要再做点准备工作,在/home/slitaz目录下执行命令:
#tazlito get-flavor base
这样来获取base版本的软件包,还有一些其他的目录,你也可以修改base为core或者其他的,具体的支持和不同可以到slitaz的官方网站上查看,这里举例下base和core的区别:
一般情况下获取的都是core的版本,base是比core版本在光盘容量上还要小的版本,代价就是没有了图形界面,只有字符界面。
这里需要手动修改一下,原因是distro-packages.list文件中的软件都带有了版本号,而tazwok命令中需要的关于软件包的参数都不需要带版本号,我手动处理了下,反正不是很多。
然后执行下面的命令来编译所有的软件包:
#tazwok cook-list distro-packages.list
如果编译的过程中缺少了某些软件包,比如我就没有说需要先安装gcc之类的,它会自动提示你是否安装,还是忽略继续,还是中断退出(install/y/n),而有些时候,在编译的时候,会提示缺少某些文件软件包的依赖,通常是需要先编译其他的软件包,才能进行某个软件包,而我们在写的时候,又不可能按照正确的顺序来写,工具会自动提示的。
然后就是长长的等待了,如果你的网速很快的话,下载软件源代码什么的,可能不是话下,可是,像我这样,现在还未编译完成,还在等待软件包源代码的下载中,是一件非常痛苦的事情,而且,我没有想到什么非常通用的可以节省下,yes y的命令应该不是很好用,因为某些时候需要选在install。只能等待了,所以,下面就是根据资料和第一遍的流程回忆而来了:
#tazlito gen-distro
这样基本上就可以了,会生成一个iso出来。
在编译的过程中,有个小小的错误,在编译linux内核的时候,检查config文件的时候,会出现一个新的提示,直接按下回车就可以了,这个选项默认是关闭的,而如果直接从/proc/config.gz复制的话,则没有这个问题,可能最后脚本忘了更新什么的。对于base版本就这一个问题。
上述工具的缺点:
tazwok每次都是从头开始,像我这样,需要经常关闭电脑的人,很明显不适合。
tazwok貌似没有像t2-project或者LFS那样分阶段来的,所以在编译的时候,难免不会受到宿主系统的干扰。(t2-project非常不错,就是编译总是需要非常多的配置,优化实在太复杂了,稍有不注意的地方,就编译不过去,手动的补丁太多了,??或许我运气差)。
上面的两个令我非常的丧气,改天有时间的话,看看这些工具的源代码,看如何改进比较更加的自动化。我又欠下帐了。
上面说了一大堆废话,这有什么用处呢,除了slitaz跑在古董上面,其实,我的本意是将erlang,gcc,emacs等我常用的开发工具融合到里面,制作一张自己的iso,然后,放到U盘中。将home目录定位到普通的U盘目录中,这样不管在哪台计算机上,都可以直接开发,不用预先配置了。第二个目的就是将网游的服务器直接和os配合到一起,在一个新的机器上,插上U盘,启动完自动启动服务器,并自动融合到已有的节点中,傻瓜式服务。前几天同事提到云存储,我说,你要想弄的话,也可以,将home放到云端,启动的时候自动下载不一样的部分,过一段时间和关闭的时候自动上传不一样的部分,这样就可以实现任何一个地方,任何一个终端,同一个文档了。哈哈,我实在是太“聪明”了。
PS:
slitaz也有不少人制作各种各样的分发,但没有找到系统的介绍如何从源代码来生成的,正好自己准备弄下开发环境,就班门弄斧下。感谢slitaz团体。同时,抱怨下,他们的文档更新太慢了,也找不到关于develop的最迅速的开发动态或者日志或者其他乱七八糟什么的内容。
slitaz在我的vmware虚拟机下会出现鼠标上滚无用,只能下滚的问题,而且,会莫名其妙的死机,因此,推荐使用virtualbox
修正:
#tazlito get-flavor base
该命令之后应该执行下述命令
#tazlito extract-flavor base.flavor
这样可以将base.flavor解包到flavors/base目录中,在该目录中有一个packages.list的文件,这个文件和上述提到的distro-packages.list文件的区别在于,该文件中的文件包只有名字,没有版本号,因此,不用手动修改了。
有时候,由于distro-packages.list中的软件包的版本号错误,就需要手动修改了,可以通过下面的命令来检测:
#tazlito check-list

2条评论

    1. 我其实没怎么进行过linux内核方面或者驱动方面的开发。不过你应该可以从msiwind.net网站上下载到deb包,然后自己做成taz的形式。理论上这样可以。我没有弄过。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据