宇宙主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

欧基零壹微头条IP归属甄别会员请立即修改密码
楼主: 天权璇玑

史诗级别的突破,Ubuntu 22.04一键重装终于搞定了

  [复制链接]
发表于 2023-6-17 23:55:24 | 显示全部楼层
本帖最后由 htazq 于 2023-6-17 23:57 编辑
米老鼠 发表于 2023-6-17 00:45
Ubuntu全系编辑没有取消方向键失灵修改,以及Ubuntu安装没有那高贵的进度条


可以看下https://blog.at9.net/archives/Direction-Key-garbled-code-solution-In-VI.html

或者使用我自己搞的简单的一键脚本解决vi的问题,
  1. bash <(wget -qO- -o- https://raw.githubusercontent.com/htazq/Auto-Install-Docker/main/Auto-Vi.sh)
复制代码
 楼主| 发表于 2023-6-18 05:15:41 | 显示全部楼层
米老鼠 发表于 2023-6-17 23:17
这个我确定有的,我用魔改版还是萌咖dd ubuntu,那背景是紫色的,比debian和cenros的蓝色背景还要相当典 ...

这个贴有长度限制,去读一下我在隔壁论坛发的贴,了解清楚从 Ubuntu 22.04 以后安装的难点,你说的那种紫色背景兼容 Debian preseed 的传统安装模式,从 Ubuntu 22.04 以后已经被官方砍了:https://www.nodeseek.com/post-9383-1
 楼主| 发表于 2023-6-18 05:17:27 | 显示全部楼层
米老鼠 发表于 2023-6-17 23:17
这个我确定有的,我用魔改版还是萌咖dd ubuntu,那背景是紫色的,比debian和cenros的蓝色背景还要相当典 ...

Ubuntu 自从 18.04 版本后,采用的自动部署方式和 Debian 开始分家,引入了一种叫 cloud init 的部署工具,说实话,这个产品很强,它的厉害之处是把不同发行版本 Linux 的自动部署配置格式从顶层加以统一的抽象化,说人话就是写一套相同的配置文件,云服务商就可以快速给一台机器布置 Debian Kali Ubuntu AlpineLinux CentOS Almalinux RockyLinux Fedora 等等 Linux 系统,用户名、密码、网络配置等等关键参数都由 cloud init 来处理,不需要云服务商运维自己定期给不同的 Linux 发行版制作各种不同镜像,由于该项目是开源的,现在很多云服务厂家后台都是用 cloud init 来部署镜像,应用范围很广,是非常强势的一种应用。

但是,Ubuntu 的母公司 Canonical 在方便了云服务商的同时,却给普通用户造成了不小的麻烦,其中罪魁祸首就是把 debian installer 给移除。Ubuntu 支持兼容 Debian 的安装方法从 Ubuntu 20.04 后(这还是好多人不满,官方磨磨蹭蹭给的)就彻底放弃,比如 Ubuntu 22.04 官方源中,最小化传统网络启动(netboot)内核页面是空的:

http://ports.ubuntu.com/dists/jammy/main/installer-arm64/current/legacy-images/
 楼主| 发表于 2023-6-18 05:19:12 | 显示全部楼层
米老鼠 发表于 2023-6-17 23:17
这个我确定有的,我用魔改版还是萌咖dd ubuntu,那背景是紫色的,比debian和cenros的蓝色背景还要相当典 ...

Ubuntu netboot 页面:

https://cdimage.ubuntu.com/netboot/

虽然能看到 Ubuntu 22.04 jammy 的目录,但点击去就会发现,官方已经将其砍掉,且不再提供相关文件,仅引导你去使用他们提供的 cloud init 安装方式:

https://cdimage.ubuntu.com/netboot/jammy/

从 Ubuntu 22.04 开始,仅支持读取 cloud init 格式的配置文件部署,不再与之前的 debian installer 兼容,这使得很多好用的,基于 Debian 安装方式部署 Ubuntu 系统的方式均已失效,我愿称之为 Canonical 损失了一大笔宝贵的遗产。

Canonical 一意孤行的同时,却没有给普通用户一个好的替选方案,我的意思就是供用户下载一个很小的网络启动文件,然后从 grub 引导启动,启动文件读取相应的配置文件,然后连接镜像源,完成系统的原生自动化安装工作。目前可行的方案仅有两种:

1. 下载一个 iso 文件,烧录到外部存储设备,比如光盘或 U 盘,然后系统重启后从 iso 启动,读取 cloud init 进行自动化安装;
2. 从 Ubuntu cloud images 网站下载每周官方打包好的 Ubuntu 对应版本镜像,转换格式后挂载,对这个镜像里的系统进行一些定制,然后再将其 unmount,像以前安装 ghostXP 一样,把镜像文件全盘解压到硬盘,在读取 cloud init 完成重启后的自动化部署。
 楼主| 发表于 2023-6-18 05:20:24 | 显示全部楼层
米老鼠 发表于 2023-6-17 23:17
这个我确定有的,我用魔改版还是萌咖dd ubuntu,那背景是紫色的,比debian和cenros的蓝色背景还要相当典 ...

注意,1中的 Ubuntu 安装文件是被压缩的,安装时需要重新解压,和我刚才说的网络启动方式“原生”安装一个系统的原理是一致的,2中的 Ubuntu 是一个已经完全被释放出来的 Ubuntu 系统包,这个系统只要重写到硬盘里,就能作为一个系统独立启动,只不过如果不加以配置,它的用户名、密码、网络等都是默认的,装完了你也连不上去。

所以问题来了,对于一个只有单硬盘,无法挂载外部存储设备的 VPS 来说,挂 iso 安装很明显是不现实的,独立于硬盘,可给对硬盘操作(格式化时硬盘不能自己操作自己)的存储设备就是内存,Debian、红帽系的网络安装都是基于加载在内存里的微缩系统来完成初始化,并往硬盘里写入系统、配置、启动的。既然 Ubuntu 暂时不提供网络安装选项,那么核心思路还是要先在内存里启动一个中介系统,才能保证后续操作最起码有可能。

煎饼哥的方式是采用 AlpineLinux 为中间系统,启动后用 AlpineLinux 给硬盘分区,预留一个存 Ubuntu iso 镜像的分区,然后给中间系统写入下一次从 Ubuntu iso 引导,再次重启后启动 Ubuntu 安装程序,读取 cloud init 配置完成后续安装,在新系统里还要埋一个自动扩展分区容量的脚本,否则新系统里会发现残留一个当时存储 iso 镜像的分区,以上步骤中,那个 iso 镜像分区就是“外部存储设备”,虽然它是虚拟的分区,不是额外的物理硬盘,也能完成预期效果。

我在思考和开发相关功能时,决定采取第二种办法,即简单修改一下 Ubuntu Cloud images 的内容,然后把它存放在服务器上,反正是 Ubuntu 官方每周构建的完整系统文件,兼容性和稳定性肯定值得信赖。然后启动中介系统,用 dd 方式将其下载并完全重写到目标硬盘,最后植入 cloud init 文件,让 Ubuntu 系统包完全释放到硬盘并重启后,按我预期的要求,完成自动化部署工作。
 楼主| 发表于 2023-6-18 05:21:38 | 显示全部楼层
米老鼠 发表于 2023-6-17 23:17
这个我确定有的,我用魔改版还是萌咖dd ubuntu,那背景是紫色的,比debian和cenros的蓝色背景还要相当典 ...

虽然我老是抱怨 AlpineLinux 的各种缺点,并且它的环境也是 busybox,但当它作为一个中介系统,除了不支持从纯 IPv6 启动,简直完美,煎饼哥眼光真是太独特了,找到这么一个系统作为中间件。当其在内存启动时,就是一个具备完整功能的 Linux 发行版,需要什么组件,就用 apk add 装什么,需要挂载分区还是格式化硬盘,使用对应的命令执行即可,丰俭由人,这点真的比 Debian installer 好太多了。

通过启动中介 AlpineLinux 系统,在中介系统中 dd Ubuntu 官方镜像实现,镜像源来自于我从官方同步并打包的,Ubuntu 官方镜像源地址:

https://cloud-images.ubuntu.com/daily/server/

官方镜像源的文件不能直接用来 dd,必须使用 qemu-utils 工具做一下格式转换。

用我编写脚本并解包并重新打包好的 Ubuntu 镜像源地址:

https://cloud-images.a.disk.re/

打包过程完全自动化,仅需首次运行时手动执行,此后便会执行 crontab 自动任务,每周末凌晨 4 点 30 自动重新打包一次,避免手动操作出现的人为失误,打包脚本原代码:

https://github.com/leitbogioro/Tools/blob/master/Linux_reinstall/Ubuntu/autoRepackImages.sh
 楼主| 发表于 2023-6-18 05:23:25 | 显示全部楼层
米老鼠 发表于 2023-6-17 23:17
这个我确定有的,我用魔改版还是萌咖dd ubuntu,那背景是紫色的,比debian和cenros的蓝色背景还要相当典 ...



通过分析以上代码可以看到,修改仅涉及向启动内核添加 net.ifnames=0 biosdevname=0 启动参数,确保 cloud init 部署阶段面向的网卡统一为 eth0,否则不同的机器网卡名各有不同,很难统一化设置,其他分文未动,确保原汁原味,不加私货。

如果需要使用我的自动化打包脚本,仅需修改 websiteDir="/www/wwwroot/cloud-images.a.disk.re/Ubuntu" 中即网站目录部分,你就可以在你的服务器上部署对应的 Ubuntu cloud images,确保该脚本在 root 目录执行即可。

我从中获得灵感的 Ubuntu cloud images 制作方法原链接:https://bleatingsheep.org/2022/03/14/%E7%94%A8-Ubuntu-Cloud-Images-%E5%88%B6%E4%BD%9C%E8%87%AA%E5%B7%B1%E7%9A%84%E4%BA%91%E9%95%9C%E5%83%8F%EF%BC%88%E9%85%8D%E7%BD%AE-cloud-init-%E7%9A%84-NoCloud-%E6%95%B0%E6%8D%AE%E6%BA%90%EF%BC%89/

通过 dd cloud images 安装的 Ubuntu 20.04/22.04 仅支持从 IPv4 静态或动态启动,双栈机进入 Ubuntu 后 IPv6 网络能自动配好,由于完美地继承了 AlpineLinux 的缺陷,所以纯 IPv6、1GB 内存以下机器暂不支持。

Ubuntu 18.04 cloud images dd 包不再制作并提供的原因是 Ubuntu 18.04 采用的是第一代 cloud init 书写格式,为 version 1,其中网络配置→网关的书写语法与 version 2 有很大不同,比如 version 1 配置网关的方法为:

  1. gateway4: IPv4 网关
  2. gateway6: IPv6 网关
复制代码


而 version 2 配置网关的书写语法为:

  1. routes:
  2. - to: default
  3. via: IPv4 网关
  4. - to: default
  5. via: IPv6 网关
复制代码


version 1 和 version 2 完全不能互相兼容,Ubuntu 20.04/22.04 的 netplan 在读取 version 1 的网关配置时会报错且无**常启动网络,反之亦然,为保持一致性,故放弃对 Ubuntu 18.04 的支持。

由于打包好的镜像源存放在我的吃灰甲骨文机器上,所以国内机器安装 Ubuntu 的时候 dd 过程会卡很久,原因是国内互联网的国际进出口带宽不足,晚高峰国内机器连接我提供的 dd 镜像服务器会非常非常慢,等就是了,等一晚上都不奇怪。

如果你也按我以上提供的方法制作好了对应的 Ubuntu cloud images dd 包,并存放在了你的服务器上,你可以指定 --image '镜像源 url' 来使用你自己定制的 dd 包安装 Ubuntu。

bash InstallNET.sh -ubuntu 22.04 --image '存放 Ubuntu cloud images 的网站根目录,如:https://cloud-images.a.disk.re/Ubuntu/ ,不要包含 dd 包文件名本身!'

其他脚本支持重装到的 Linux 系统均支持原生指定全球各地镜像源的方式安装,如果不指定源,脚本会区分国外国内自动为国内 VPS 切换到国内源,避免连接缓慢,如果要手动指定源,输入系统和对应版本后,加参数“-mirror”,如:

bash InstallNET.sh -debian 12 -mirror "http://ftp.riken.jp/Linux/debian/debian/"

除了 Ubuntu 和 Windows,其余发行版 Linux 均支持自选镜像源,脚本内部仅内置官方后备,且能够区分国内或是国外机器,国内机器重装时必要联网获取的配置文件也能连接到我项目的 gitee.com 镜像,确保国内机器晚高峰重装时不会卡住,或是遭受 github.com 被大墙的阻断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宇宙主机交流论坛

GMT+8, 2024-10-31 05:28 , Processed in 0.060934 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表