本文关键字:增强tinycorelinux remaster tool,tinycorelinux 开机加载module,x509: certificate signed by unknown authority

在前面很多云主机装机相关的文章中,我们都讲到debian的netinstall实现云主机装机,它并不利用pxe这种cs结构和另外的装机服务器之类的东西,而是debian固有装机方式中的一种,即简单利用软件包仓库和chroot机制在线操作硬盘provision出一个ramos pe化os的原理,---- 这在《一个fully retryable的rootbuild packer脚本,从0打造matecloudos》和《把DI当online packer用:利用installnet制作一个云装机packerpe》都讲过。那么它在其它linux dists上有实现吗?

这种替代类似方案之一就是tinycorelinux,它追求小跟di一样,而且它本身就是一个ramos,(tinycorelinux内存os是什么意思呢?其实整个tc也可以通过把initrd.gz cpio -idmv < 到硬盘中运行。但是默认情况下,如果不提供tce=sda1之类的bootcode 及after bootinto system then tce-setup重配置,那么它的包是下载到/tmp这个内存fs和/挂载点的。如果指定硬盘上的tce目录加载,除了一些极端情况,如docker工作在ramfs会现privot_root异常,它实际上跟普通硬盘linux无异,这就是tc的stateless和cloud mount属性),而且tinycorelinux也有在线仓库,它的remaster tool和bootlocal.sh也可以成为简单的preseed和provision机制,可以简单地模拟出debian的netinstall环境。

ezremaster工作在gui下,通过读取仓库下的info.lst.gz形成软件列表(find 11.x/x86_64/tcz/*.tcz -print | sed -e ‘s/11.x/x86_64/tcz///’ > 11.x/x86_64/tcz/info.lst
gzip -cf 11.x/x86_64/tcz/info.lst > 11.x/x86_64/tcz/info.lst.gz),但是也可以让它工作在命令行下,提取其中的/usr/local/bin/remaster.sh,然后手动装好依赖tce-load -iw mkisofs-tools advcomp,调用remaster+ezremaster.cfg(这个必须为绝对路径)+命令进行工作,工作原理见脚本本身,过程是给一个模板iso,然后blalalala…最后生成一个新iso。

!!重点来了:我们想通过定制/增强tc的ezremaster tool来讲解tc的增强能力。比如我们想使之生成硬盘镜像呢(以后考虑进一步弄成pebuilder.sh之类的东西,呆会你就会看到,整remaster.sh的逻辑跟pebuilder.sh共享同样的原理和流程,这种可组装能力有点让tc等同metalinux的意思了)?该如何进行。不废话,(我们使用前面《一种设想:利用tinycorelinux+chrome模拟chromeos并集成vscodeonline》和《一种混合包管理和容器管理方案,及在tinycorelinux上安装containerd和openfaas》的实践案例,顺便在这里增强一下上述二文),我们使用的测试环境是上述二文中经过了打包openssh.tcz的corepure64-11.1-remasterd.iso,用它开的一台虚拟机,因为要手动安装ezremaster tool的依赖,所以还要:tce-load -iw mkisofs-tools advcomp parted grub2-multi util-linux ca-certificates(其实其它linux发行也可以运行remaster.sh,只要它们有cpio, tar, gzip, advdef, and mkisofs. Advdef is used to re-compress the image with a slightly better
implementation, producing a smaller image that is faster to boot,后四个tcz是新增的,供生成硬盘镜像用,没ca-certificates会出现ctr/faas-cli拉镜像时x509: certificate signed by unknown authority)

不废话了,直接提供脚本:

1,ezremaster.cfg文件

一般用CorePure64-11.1.iso作模板,corepure64中的vmlinuz64,并没有一些像它的http://mirrors.163.com/tinycorelinux/11.x/x86_64/release/src/kernel/config-5.4.3-tinycore64一样,corepure64/lib/modules中为追求小也删了大量modules,我们用集成origmod.tcz的方法代替前面仅集成graphics modules.tcz等部分模块的方法以后,好多驱动认到了,鼠标跟指针分离的现象也貌似解决了?。但还是遗留了一些问题,比如virtio_blk实际上没有做成builtin,在云主机上工作时,需要寻求另外编译vmlinuz或寻求启动时加载modules的相关方案。

其它注意点:1,如果在gui中,loglevel=3和cde(如果你在cfg中写过了extract outside intro)是默认的,不需再写,2,因为要集成的tce比较多,最终的iso比较大,进程耗时,所以在/mnt/sda1/ezremaster(sudo chown tc:staff)上进行。3,faasd.tcz是使用了自己的镜像,(因为用od托管的tce镜像必须要用到wget ssl,因此临时先把/opt/tcemirror切换到mirrors.163.com/tinycorelinux下载openssl-1.1.1,然后切换到od主镜像),4,勾选产生的那个copy2fs.flg目前还考虑不到有什么用。,tc有多个藏tcz的地方,如tce,cde,initrd的集成包,且可以同时起作用,那么它是如何处有多个tcz目录的依赖项和防止冲突的?因为在tce=sda1且root=/dev/sda1硬盘模式下,/usrlocal/tce.installed会导致混乱.

其实我是把cfg文件当字串内置到remaster.sh中供grep处理的(本来是grep "^cd_location = " $input文件 | awk ‘{print $3}’),如下:

input="cd_location = /mnt/sda1/CorePure64-11.1.iso
temp_dir = /mnt/sda1/ezremaster/
cc = home=sda1 opt=sda1 tce=sda1 restore=sda1
app_outside_initrd_onboot = chromium-browser.tcz
app_outside_initrd_onboot = iptables.tcz
app_outside_initrd_onboot = faasd.tcz
app_outside_initrd_onboot = nginx.tcz
app_extract_initrd = openssh.tcz
app_extract_initrd = original-modules-5.4.3-tinycore64.tcz
app_extract_initrd = Xorg-7.7.tcz
extract_tcz_script = ignore
copy2fs.flg"if [ ! -n $input ]; thenecho "input is empty"exit 2
fi......cd_location=`echo "$input" | grep "^cd_location = " | awk '{print $3}'`
temp_dir=`echo "$input" | grep "^temp_dir = " | awk '{print $3}'`

脚本中其它的cat $input,都要改一下为上述形式,参数判断逻辑也改一下,使得一个参数也能通过。

2,改造脚本,使之生成硬盘镜像

把下面这段加在package(){…}后,这部分主要的逻辑是硬盘镜像的挂载初始化与析构。

注意到,remaster.sh rebuild function本身是可以覆盖执行的,extract目录中的initrd在经过第一次iso打包后就已经变化,集成了app_extract_initrd指定的三个tczs,除非extract必变以后它的体积大小不会改变。(但保险起见,你依然可以选择在第一次脚本完成后打包那个/mnt/sda1/ezremaster为ezremaster-inital.gz备用),

我们加入了一些fixandmodinitrd,因此,我们必须保证extract目录也是依然可以覆盖使用的。因此我们把这个函数变成了fixandmodinitrdforonly,用了一个 if [ ! -f $temp_dir/extractalreadyprocessed ]; then判断,这种手法在《一个fully retryable的rootbuild packer脚本,从0打造matecloudos》系列中很常见。

(前面tce-load中这个util-linux主要是因为busybox中的那个losetup太旧,没法用)

export BUILD_PACKAGE_MNT_PT=/tmp/buildpackagefixandmodinitrdforonlyonce() {if [ ! -f $temp_dir/extractalreadyprocessed ]; thensudo cp -f /etc/passwd etc/passwdsudo cp -f /etc/shadow etc/shadowsudo cp -f /usr/local/etc/ssh/sshd_config.orig usr/local/etc/ssh/sshd_configsudo cp -f -R /usr/local/etc/ssl usr/local/etc/sudo cp -f -R /usr/local/etc/ssh usr/local/etc/sudo mkdir -p var/lib/sshd/sudo cp -av /usr/local/etc/ssl/ etc/sslsudo sh -c "echo Xorg > etc/sysconfig/Xserver"sudo sh -c "echo /usr/local/bin/chromium-browser --start-maximized http://127.0.0.1 > etc/skel/.X.d/chromium-browser"sudo chmod +x etc/skel/.X.d/chromium-browsersudo sh -c "echo /usr/local/etc/init.d/openssh start >> opt/bootlocal.sh"sudo sh -c "echo http://d.shalol.com/mirrors/tinycorelinux/ >> opt/tcemirror"sudo sh -c "find . | cpio -o -H newc | gzip -2 > $temp_dir/image/boot/corepure64.gz" || exit 22sudo advdef -z4 $temp_dir/image/boot/corepure64.gz || exit 23sudo touch $temp_dir/extractalreadyprocessedelseecho fixandmodinitrdforonlyonce is already processed!fi
}packagehd() {dev_buildpackage=$(mount | grep "$BUILD_PACKAGE_MNT_PT" | awk '{print $1}')if [ -z "$dev_buildpackage" ];thenecho "- Creating new dev_buildpackage disk"sudo rm -rf $temp_dir/buildpackage.rawsudo dd if=/dev/zero of=$temp_dir/buildpackage.raw bs=1024 count=20971520dev_buildpackage=`sudo /usr/local/sbin/losetup -fP --show $temp_dir/buildpackage.raw | awk '{print $1}'`echo[ -n "$dev_buildpackage" ] && { sudo parted -s "$dev_buildpackage" mktable msdossudo parted -s "$dev_buildpackage" mkpart primary ext3 2048s 100%sudo parted -s "$dev_buildpackage" set 1 boot onsudo mkfs.ext3 "$dev_buildpackage"p1 }[ ! -d "$BUILD_PACKAGE_MNT_PT" ] && sudo mkdir "$BUILD_PACKAGE_MNT_PT"sudo mount "$dev_buildpackage"p1 "$BUILD_PACKAGE_MNT_PT"sudo grub-install --boot-directory="$BUILD_PACKAGE_MNT_PT"/boot "$dev_buildpackage"sudo grub-mkconfig -o "$BUILD_PACKAGE_MNT_PT"/boot/grub/grub.cfgsudo sh -c "echo set timeout=3 >> $BUILD_PACKAGE_MNT_PT/boot/grub/grub.cfg"sudo sh -c "echo menuentry \"this is a raw hd\" { >> $BUILD_PACKAGE_MNT_PT/boot/grub/grub.cfg"sudo sh -c "echo linux /boot/vmlinuz64 loglevel=3 tce=sda1 opt=sda1 home=sda1 restore=sda1 cde >> $BUILD_PACKAGE_MNT_PT/boot/grub/grub.cfg"sudo sh -c "echo initrd /boot/corepure64.gz >> $BUILD_PACKAGE_MNT_PT/boot/grub/grub.cfg"sudo sh -c "echo } >> $BUILD_PACKAGE_MNT_PT/boot/grub/grub.cfg"sudo depmod -a -b $temp_dir/extract `uname -r`sudo ldconfig -r $temp_dir/extractcd $temp_dir/extractumount $temp_dir/extract/proc >/dev/null 2>&1fixandmodinitrdforonlyoncecd $temp_dir/imagesudo cp -av boot/ "$BUILD_PACKAGE_MNT_PT"/sudo cp -av cde/ "$BUILD_PACKAGE_MNT_PT"/tcefi# Automatically remove DISK on exittrap 'echo; echo "- Ejecting dev_buildpackage disk"; cd "$HOME"; sudo umount "$BUILD_PACKAGE_MNT_PT" && sudo /usr/local/sbin/losetup -d "$dev_buildpackage"' EXIT
}

最后,参数处加一条 packagehd) packagehd ;;作调用

测试,修改镜像为od主镜像,运行remaster.sh /mnt/sda1/ezremaster.cfg rebuild生成iso,然后remaster.sh /mnt/sda1/ezremaster.cfg packagehd,生成硬盘镜像,成功,脚本是自带tail -f ezremaster.log效果的,里面会出现一些wget 404,应该是一些无关紧要的info文件等的下载。无妨。

最后你可以你可以tar这个镜像用tce-load -iw python,sudo python -m SimpleHTTPServer 80下载这个镜像,默认0.0.0.0。如果发现卡住,下载不了ctrl c一下python进程。


最后,这个脚本可以保存为remaster.sh,但是因为tc没有arm64,所以准备转debian,这样也可以与pebuilder.sh针对的debian netinstall接上,但是默认提供的最小的netinstall.iso也要几百M,网上看到一篇《基于 debootstrap 和 busybox 构建 mini ubuntu》https://www.cnblogs.com/fengyc/p/6114648.html,据称可以将debian或ubuntu精简到40-50m,或更小,它的思路主要是将启动脚本依赖的占用替换为简单bb和内核模块精简一下,所以以后有机会了尝试一下,还看到一个slax的live系统,我们要尝试用来代替tc的这个新系统一定要像slax和tc一样live加载扩展,而且要/ext模块目录和/os,用来保存数据的/data单独三个文件夹layout到/下。

利用增强tinycorelinux remaster tool打造你的硬盘镜像及一种让tinycorelinux变成Debian install体的设想相关推荐

  1. 对话即平台:利用人工智能以及云平台打造你的智能机器人

    内容来源:2017年3月11日,微软中国技术顾问佘泽鹏在"HTML5梦工场 & 微软开发者沙龙第02期--北京"进行<对话即平台:利用人工智能以及云平台打造你的智能机 ...

  2. 利用NoneBot结合酷q打造qq机器人

    项目叙述 Smart QQ在2019年1月13日停止服务了,所以qqbot库不能用了. 所以我们选择利用NoneBot结合酷q打造qq机器人 NoneBot NoneBot 是一个基于 酷 Q 的 P ...

  3. 拼多多如何利用店铺上新来打造淘宝爆款吸引自然流量

    1.选款,大家需要先将自己店铺的宝贝进行分类,例如分为:利润款和引流款,然后通过数据分析找到能为店铺带来大部分的流量的宝贝,继续对这些既定的宝贝的数据进行具体的分析,分析出什么样的款式适合做成爆款.选 ...

  4. 企业怎样利用微信朋友圈来打造私域流量?

    很多私域流量玩法并不是败在流量,反而是败在用户关系的维系,每当我们有了一定的用户群体之后,后期的关系维护便是一个精细活了,我们可以通过朋友圈等等方法来运营留存用户,依靠服务来达到转化.私域流量作为一个 ...

  5. 利用网络信息减少因果推断中的confounding bias--结合两种思路的新方法

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 本期AI TIME PhD专场,我们有幸邀请到了来自亚利桑那州立大学的博士生郭若城,为我们带来他的精彩分享--利用网络信息减少因果推断中 ...

  6. ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参【2种方法,ShuffleSplit+GridSearchCV、TimeSeriesSplitGSCV】、模型评估)

    ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参[2种方法,ShuffleSplit+GridSearchCV.TimeSeriesSplitGSCV].模型评估) 目录 ...

  7. 把树分成森林 matlab,20170106RF_Matlab 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,包括两个方面:数据的随 269万源代码下载- www.pudn.com...

    文件名称: 20170106RF_Matlab下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 441 KB 上传时间: 2017-01-06 下载次数: 0 ...

  8. linux下vhd win10,利用win10纯净版系统的VHD虚拟硬盘安装win10系统的方法

    利用win10纯净版系统的VHD虚拟硬盘安装win10系统的方法有些用户想要体验最近十分火热的win10系统,可是又不想放弃自己现在使用着的win10纯净版系统,毕竟它还是十分稳定的,那该怎么办呢?其 ...

  9. 玩物下载被发现利用群晖NAS占用大量带宽和硬盘帮助爱奇艺做缓存加速, 这年头流氓真多,防不胜防!!!

    ionewu线程占用大量CPU资源 owjstx_proxy 玩物下载被发现利用群晖NAS占用大量带宽和硬盘帮助爱奇艺做缓存加速 玩物下载被发现利用群晖NAS占用大量带宽和硬盘帮助爱奇艺做缓存加速 玩 ...

最新文章

  1. java从字符串中提取数字
  2. CCF 201703-3 Markdown
  3. 025_Tree树形控件
  4. GPU:nvidia-smi的简介、安装、使用方法之详细攻略
  5. Servlet 编程基础
  6. 网络广告联盟和网站联盟全解析
  7. jquery 字符串查找_JQuery、Vue等考点
  8. Server object instance creation failed on all SOC machines
  9. LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏的解决方案
  10. wifi无线设备服务器驱动,如何安装Windows 10的WiFi驱动程序
  11. 公众号管理系统 html,Java SpringBoot+Mybatis Layui+JQuery+html微信公众号后台管理系统...
  12. 9.电阻线性电压转换电路
  13. 如何做接口测试呢?接口测试有哪些工具【小白都会系列】
  14. php操作memcache
  15. 虚拟机SSH免密登录配置
  16. js获取月的第一天、最后一天
  17. 一些计算机u口无法使用的原因,电脑USB接口不能用的原因大全
  18. 【无标题】猜单词小游戏
  19. python 股票回测书籍推荐_python实现马丁策略回测3000只股票
  20. 游戏风云----《劲舞团》,跑跑卡丁车,魔兽世界下载

热门文章

  1. 106个项目上榜!今年人工智能与实体经济深度融合创新项目名单公布
  2. 算法导论课后习题答案汇总
  3. 扫描型PDF进行反色打印
  4. 【测试用例设计】测试用例基本概念
  5. 【操作系统】第八章——进程调度算法
  6. MySQL命令导入表数据_Mysql命令行导入sql数据
  7. java数据字典开发实例,实战解析
  8. 【毕业设计】河科大智慧校园,简单易上手
  9. 在线浏览三维模型(CAD文件在线浏览)
  10. 详情页动态html代码,好友动态详情页.html