您的位置:首页 > 运维架构 > Linux

构建自己的 LINUX 系统(四)

2016-10-11 09:26 435 查看
这次我们要为 mylinux 预装应用程序了,考虑到 TinyCore 没有预装 wifi 模块,

所以我们在 mylinux 上安装一下吧!

准备 TC 的 wifi 模块包及所需要的依赖库

首先准备 wifi 模块和依赖库的安装包列表(你也可以自己去准备,不过我这里已经准备了一个了)

cd mylinux/
mkdir extends/wifi_module
wget -O extends/wifi_module/wifi.lst http://git.oschina.net/bxtkezhan/TCLinux-DEP/raw/master/wifi.lst?dir=0&filepath=wifi.lst&oid=d3486be12b4c6d5ce8a02b088962d859b25b0d8f&sha=552f7598cc915fdb0f8b713f653d60c33a675294[/code] 
这个列表其实只是从 TC 的安装软件中直接获取的,并不方便我们使用,于是我们构建如下 Python 工具来调整它

mkdir tools
touch tools/make_good_lst.py


代码如下:

#! /usr/bin/env python3

def calc_space(line):
for i in range(len(line)):
if line[i] != ' ':
return i

def calc_levels(lines):
levels = list(set(map(calc_space, lines)))
levels.sort()
return levels

def calc_indexs(lines, level):
indexs = []
levels = list(map(calc_space, lines))
for i in range(len(levels)):
if levels[i] == level:
indexs.append(i)
return indexs

def sort_lines(lines):
levels = calc_levels(lines)
outlines = []
if len(levels) <= 1:
return lines
top_indexs = calc_indexs(lines, levels[0])
for i in range(len(top_indexs)-1):
newlines = lines[top_indexs[i]+1:top_indexs[i+1]]
sections = sort_lines(newlines)
outlines.extend(sections)
outlines.append(lines[top_indexs[i]])
else:
newlines = lines[top_indexs[-1]+1:]
sections = sort_lines(newlines)
outlines.extend(sections)
outlines.append(lines[top_indexs[-1]])
return outlines

def to_sort_set(lines):
lines = list(map(str.lstrip, lines))
outlines = []
for line in lines:
if line not in outlines:
outlines.append(line)
return outlines

def load_lst(filename):
try:
with open(filename, 'r') as f:
return f.readlines()
except IOError as e:
print('Read Faild, Error: {}'.format(e))
return False

def dump_lst(lines, filename):
try:
with open(filename, 'w') as f:
for line in lines:
f.write(line)
except IOError as e:
print('Write Faild, Error: {}'.format(e))

def make_good_lst(input_lst, output_lst):
lines = load_lst(input_lst)
if lines != False and len(lines) > 0:
lines = sort_lines(lines)
lines = to_sort_set(lines)
dump_lst(lines, output_lst)

if __name__ == '__main__':
import sys
if len(sys.argv) != 3:
print('Bad CMD!')
else:
make_good_lst(sys.argv[1], sys.argv[2])


现在我们来使用它生成我们需要的包列表

python3 tools/make_good_lst.py extends/wifi_module/wifi.lst extends/wifi_module/wifi.lst


下载表单中包文件并批量生成校验文件

cd extends/wifi_module
for tcz in $(cat wifi.lst); do wget "http://tinycorelinux.net/7.x/x86/tcz/$tcz"; done
for tcz in *.tcz; do md5sum $tcz > "$tcz.md5.txt"; done
ls
cd ../..


重构我们的 mylinux

编写 mylinux 下的 Makefile

QEMU:=qemu-system-i386

out.iso: boot/ cde/ extends/
mkdir build/
cp boot/ build/ -af
cp cde/ build/ -af
cp extends/tcz_lib/* build/cde/optional/ -af
cp extends/wifi_module/*.tcz* build/cde/optional/ -af
cat extends/wifi_module/wifi.lst >> build/cde/copy2fs.lst
cat extends/wifi_module/wifi.lst >> build/cde/onboot.lst
cat extends/wifi_module/wifi.lst >> build/cde/xbase.lst
mkisofs -D -r -V "mylinux v0.10" -cache-inodes -J -l \
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -o out.iso build/
isohybrid out.iso
cp -fv out.iso release/mylinux.iso

run: out.iso
${QEMU} -cdrom out.iso -boot d -m 256

clean:
rm -rf out.iso build/


重构并运行测试

sudo make clean
sudo make
make run


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息