Featured image of post 树莓派安装 RHEL

树莓派安装 RHEL

如何在树莓派上安装红帽 Linux

树莓派安装 RHEL

This tutorial is originally written in English here

这个想法怎么来的

大概是 鲨了 CentOS 的良心不安, Red Hat 去年宣布 RHEL 个人订阅白送了 。 也就是现在家用红帽 Linux 不要钱了!

我囸,有 RHEL 用,谁还玩 CentOS?

但是我没机器来玩 (P.S. 写的时候有了嘿嘿), 手头就剩下一块树莓派 4B 🥺

于是开始搜索教程,但 Bing 直接给我当头一棒:

Bing

本来准备放弃了, 结果意外发现, Oracle Linux , 一个红帽Linux的衍生版本, (对,就那个拒了我100多次注册云服务的万恶的 Oracle) 有发布 适用于树莓派 4B、400和3B/+ 的固件 耶!

Oracle Linux for Pi

搜了下,大概是唯一支持树莓派的 RHEL 发行版了。

花了几天摸索出一个奇技淫巧,玩一波偷梁换柱, 达到在树莓派上安装 RHEL 的方法,简述一下。

需求

  • Raspberry Pi 4B, 400或3B/+
    • 仅在4B上测试成功
  • 一个系统盘
    • 强烈建议使用硬盘盒转接 SSD!!!
  • Red Hat 个人订阅
  • 科学或者魔法上网

注册 Red Hat 个人订阅

来这里 注册 Red Hat Individual Subscription

注册完了记得看下 你的管理页面 有没有东西:

订阅

等下要从 RHEL 的 repo 中更新软件包,所以这步不能省。

安装 Oracle Linux

首先 下载 Oracle Linux

然后找个你喜欢的刷写工具。 一般 Raspberry Pi Imager 就好了,但我更喜欢 Etcher

下载的图像压缩成 xz 格式了,但不用解压,直接开刷!

Flashing

SSD 与 SD卡

Oracle Linux 的根文件系统 (rootfs) 是 btrfs , 卡得出奇,卡的批爆!合起来写炸了我5个内存卡和U盘!就为了这篇! 所以别用内存卡!用固态!!!

或者可以考虑下换成 f2fs

然后接上树莓派,插电,开机!

进入路由的 DHCP 客户端页面,找到 IP 地址,刚出来那个。

DHCP

ssh 连上,用户名 root ,密码 oracle

SSH

系统准备

###扩展分区

解压缩后的固件大小约为 3.89GB ,装完了剩下大约300MB。 这点地方塞牙缝 (dnf update) 都不够,先要用 parted 扩展分区。

没自带,先安装:

1
dnf install -y parted

不用先dnf update

安装parted

然后开搞:

1
2
3
4
5
6
parted /dev/sda

# print
# resizepart 3
# q
btrfs filesystem resize max /

parted

更新 kernel-uek

要留的唯一一个软件包是 kernel-uek 。 全称 Unbreakable Enterprise Kernel , 是 Oracle 搞的 Linux 内核。

为什么留,因为只有 Oracle Linux 支持树莓派,当然只有它的内核能用。

1
dnf update -y kernel-uek

更新kernel-uek

补丁和运行 “convert2rhel”。

开始偷梁换柱之前先看看 os-release 怀念一下:

1
cat /etc/os-release

os-release

###安装convert2rhel

参照 换到 Red Hat 吧 , 第一步是添加证书和仓库。

1
2
3
4
5
# ref: https://www.redhat.com/en/blog/introduction-convert2rhel-now-officially-supported-convert-rhel-systems-rhel

curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release https://www.redhat.com/security/data/fd431d51.txt
curl --create-dirs -o /etc/rhsm/ca/redhat-uep.pem https://ftp.redhat.com/redhat/convert2rhel/redhat-uep.pem
curl -o /etc/yum.repos.d/convert2rhel.repo https://ftp.redhat.com/redhat/convert2rhel/8/convert2rhel.repo

然后安装 convert2rhel

1
dnf install -y convert2rhel

安装 convert2rhel

修改配置

由于 RHEL 没有正式支持树莓派,它的转换工具也不会包含我们要用的配置。 硬转就会。。。

convert2rhel errors

但是可以偷懒,只要改下 x86_64 的配置就行。

1
2
3
4
5
cp /usr/share/convert2rhel/configs/oracle-8-x86_64.cfg /usr/share/convert2rhel/configs/oracle-8-aarch64.cfg
sed -i 's/rhel-8-for-x86_64/rhel-8-for-aarch64/g' /usr/share/convert2rhel/configs/oracle-8-aarch64.cfg
# sed -i 's/-rpms/-beta-rpms/g' /usr/share/convert2rhel/configs/oracle-8-aarch64.cfg
# sed -i "s/checks.perform_pre_checks()/loggerinst.task('SKIP CHECKS')  # checks.perform_pre_checks()/g" /usr/lib/python3.6/site-packages/convert2rhel/main.py
sed -i 's/json-c.x86_64/json-c.aarch64/g' /usr/lib/python3.6/site-packages/convert2rhel/subscription.py

x86 上 convert2rhel 会搞定证书, 但是因为是树莓派,我们要自己搞。

红帽产品证书

RHEL证书

Choose your product 中选择 Red Hat Enterprise Linux, 找到 Red Hat Enterprise Linux for ARM 64, 选好版本和架构并下载,把证书传到树莓上运行。

1
2
3
# cp /path/to/cert/script /tmp/Red_Hat_Product_Certificate.sh
chmod +x /tmp/Red_Hat_Product_Certificate.sh
bash /tmp/Red_Hat_Product_Certificate.sh

add cert

手动运行 convert2rhel

不能直接运行 convert2rhel , 因为它写的时候也没想到会有人在树莓派上跑。

1
source /etc/os-release && python3 -c "from convert2rhel import main, subscription, systeminfo; main.initialize_logger('convert2rhel.log', '/var/log/convert2rhel'); systeminfo.RELEASE_VER_MAPPING['$VERSION'] = '$VERSION'; systeminfo.system_info.resolve_system_info(); subscription.download_rhsm_pkgs()"

成功了大概会是这样:

手动运行

然后安装刚刚下载的软件包:

1
2
cd /usr/share/convert2rhel/subscription-manager
dnf install -y $(ls | tr '\n' ' ')

安装本地软件包

绑定订阅

1
subscription-manager register

替换 repo

先鸟尽弓藏兔死狗烹。

1
2
3
mv /etc/yum.repos.d/convert2rhel.repo /etc/yum.repos.d/convert2rhel.repo.bak
mv /etc/yum.repos.d/oracle-linux-ol8.repo /etc/yum.repos.d/oracle-linux-ol8.repo.bak
dnf clean all

禁用 repos

删除不需要的软件包

1
2
3
4
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
subscription-manager repos --enable "codeready-builder-for-rhel-8-$(arch)-rpms"
dnf remove convert2rhel -y
dnf remove oraclelinux-release oraclelinux-release-el8 || rpm -e --nodeps oraclelinux-release oraclelinux-release-el8

###重新安装本地安装的软件包

1
2
3
4
cd /usr/share/convert2rhel/subscription-manager
dnf reinstall -y $(ls | tr '\n' ' ' | sed 's/.rpm//g')
cd ~
rm -rvf /usr/share/convert2rhel

替换本地软件包

替换非 RHEL 软件包

1
dnf install -y redhat-lsb

redhat-lsb

1
2
3
4
5
6
dnf reinstall setup
dnf distro-sync
dnf update -y
dnf reinstall $(dnf list --installed | grep ol8 | awk '{print $1}' | tr '\n' ' ')
dnf reinstall $(dnf list --installed | grep anaconda | awk '{print $1}' | tr '\n' ' ')
dnf reinstall $(dnf list --installed | grep commandline | awk '{print $1}' | tr '\n' ' ')

替换非rhel软件包

结论

家人们看看 neofetch

neofetch

后记

RHEL 9 出了,但是懒得折腾了,教程写了开摆。

不会真的有人会有和我一样的脑洞吧???

以及这篇尽量口语化了,如果你英语很彳亍,真想搞还是建议看看上面的英文链接。 虽然我英语是工地水平,但是大概还是比看这篇好理解一点。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计