Difference between revisions of "Getting Started with Alpine-Linux/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
 
(updated by API)
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[Getting Started with Alpine-Linux|English]]
 
[[Getting Started with Alpine-Linux|English]]
==Alpine-Linux版本信息==
+
==Alpine Linux 系统的简单介绍==
* OS: Debian 12<br />
+
Alpine Linux 是一个轻量级、基于 musl libc 和 busybox 的 Linux 发行版,专为安全性、简洁性和高效性设计。它的核心非常小巧,仅包含最基本的功能,适合嵌入式设备、容器(如 Docker)以及其他资源受限的应用场景。Alpine 的包管理器 apk 提供快速、简单的包安装和更新,支持广泛的软件包。<br /><br />
* Alpine-Linux: 8.2.7<br />
+
友善电子根据 Alpine Linux 系统的特点,提供了基于 GitHub Actions 构建的 Alpine Linux 系统镜像。用户可以直接下载并进行测试使用,也可以通过 fork 仓库,根据自身需求灵活定制系统。
==Alpine-Linux运行界面==
+
[[File:Alpine-Linux-cn.png|600px]]
+
 
==支持的平台==
 
==支持的平台==
* RK3528 (单核)<br />
+
* RK3328<br />
* RK3566 (单核)<br />
+
* RK3399<br />
 +
* RK3528<br />
 +
* RK3566<br />
 
* RK3568<br />
 
* RK3568<br />
 
* RK3588<br />
 
* RK3588<br />
==IP地址==
+
==下载系统映像==
固定为 192.168.1.200,可参考如下方法更改:
+
你可以从这里下载到针对友善电子开发板,使用Github Action在线构建的Alpine Linux镜像:<br />
===系统启动后更改IP地址===
+
https://github.com/friendlyarm/Actions-Alpine-Linux<br /><br />
例如你的网络网段是192.168.100,要设置成192.168.100.200的IP地址,可以用如下命令:
+
用户根据所用开发板的CPU,选择下载适合的版本的镜像文件。<br />
<syntaxhighlight lang="bash">
+
镜像文件以CPU型号开头(例如rk3568,rk3588),文件名中的sd和eflasher代表文件的不同用途,其含义如下: <br />
rm -f /etc/firstuse
+
* '''sd''': 安装系统到TF卡时使用
sed -i 's/new_ip=.*/new_ip=192.168.100.200/' /etc/init.d/friendlyelec_firstuse.sh
+
* '''eflasher''': 需要通过TF卡烧写系统到eMMC时使用
reboot
+
==安装Alpine Linux==
</syntaxhighlight>
+
===通过TF卡运行系统===
如下配置文件会被改动:<br/>
+
下载带 "-sd-" 字样的镜像文件,使用你熟悉的写卡工具将镜像文件写入TF卡,然后将TF卡插入开发板,上电启动开发板即可启动Alpine Linux系统。
/etc/resolv.conf<br/>
+
===烧写系统到eMMC===
/etc/network/interfaces<br/>
+
下载带 "-eflasher-" 字样的镜像文件,使用你熟悉的写卡工具将镜像文件写入TF卡,然后将TF卡插入开发板,上电启动开发板,会自动烧写系统到eMMC,烧写完成后,拨出TF卡会自动重启并进入eMMC中的Alpine Linux系统。<br />
/etc/hosts<br/>
+
如果有连接HDMI显示器, 可通过图形界面观察烧写进度, 也可以通过板载LED灯来掌握烧写进度,以NanoPi-R5S/NanoPi-R3S/NanoPi-R5C为例,LED的行为如下:<br />
Alpine-Linux对主机名的设置比较严格,设置不正确会导致服务无法启动, 要特别留意。
+
<table style="border: 1px solid black; border-collapse: collapse;">
===安装系统前更改IP地址===
+
<tr style="border: 1px solid black; border-collapse: collapse;" class="header">
将烧录了eflasher固件的sd卡插入电脑,挂载sd卡的第一个分区,假设sd卡设备为/dev/sdX,挂载到/mnt,命令如下:
+
<th style="border: 1px solid black; border-collapse: collapse;"><p>进度</p></th>
<syntaxhighlight lang="bash">
+
<th style="border: 1px solid black; border-collapse: collapse;"><p>SYS灯 (红灯)</p></th>
mount /dev/sdX1 /mnt
+
<th style="border: 1px solid black; border-collapse: collapse;"><p>LAN灯(绿灯)</p></th>
</syntaxhighlight>
+
<th style="border: 1px solid black; border-collapse: collapse;"><p>WAN灯(绿灯)</p></th>
使用vi或其他编辑器打开文件 /mnt/Alpine-Linux-arm64/info.conf,追加以下一行内容, 再使用此sd卡烧写Alpine-Linux系统到eMMC:
+
</tr>
<syntaxhighlight lang="bash">
+
<tr style="border: 1px solid black; border-collapse: collapse;" class="odd">
bootargs-ext=Alpine-Linux_ip=192.168.100.200
+
<td style="border: 1px solid black; border-collapse: collapse;"><p>上电开机</p></td>
</syntaxhighlight>
+
<td style="border: 1px solid black; border-collapse: collapse;"><p>长亮</p></td>
上面的设置是把Alpine-Linux_ip=192.168.100.200保存到内核启动参数里,由/etc/init.d/friendlyelec_firstuse.sh脚本去读取并初始化网络设置。
+
<td style="border: 1px solid black; border-collapse: collapse;"><p>灭</p></td>
==登录Alpine-Linux网页后台==
+
<td style="border: 1px solid black; border-collapse: collapse;"><p>灭</p></td>
在网页浏览器输入 https://192.168.1.200:8006, 浏览器可能会弹出隐私错误的提示,点击 "高级",选择 "继续访问" 即可。<br />
+
</tr>
 +
<tr style="border: 1px solid black; border-collapse: collapse;" class="even">
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>系统启动</p></td>
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>慢闪</p></td>
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>灭</p></td>
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>灭</p></td>
 +
</tr>
 +
<tr style="border: 1px solid black; border-collapse: collapse;" class="odd">
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>正在烧写</p></td>
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>快闪</p></td>
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>灭</p></td>
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>灭</p></td>
 +
</tr>
 +
<tr style="border: 1px solid black; border-collapse: collapse;" class="even">
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>烧写完成</p></td>
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>慢闪</p></td>
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>长亮</p></td>
 +
<td style="border: 1px solid black; border-collapse: collapse;"><p>长亮</p></td>
 +
</tr>
 +
</table>
 +
==登录Alpine Linux==
 
默认帐号: <br />
 
默认帐号: <br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 41: Line 61:
 
密码: fa
 
密码: fa
 
</syntaxhighlight>
 
</syntaxhighlight>
普通用户:
+
有如下三种方法登录Alpine Linux:
<syntaxhighlight lang="bash">
+
* 串口:连接串口终端,使用如下设置:
用户名: pi
+
{| class="wikitable"  
密码: pi
+
</syntaxhighlight>
+
本文在测试时使用root用户访问。
+
==通过ssh登录==
+
<syntaxhighlight lang="bash">
+
ssh root@192.168.1.200
+
</syntaxhighlight>
+
root用户的初始密码为fa, pi用户初始密码为pi
+
==创建虚拟机==
+
仅支持EFI ACPI的虚拟机。
+
===使用iso文件创建虚拟机===
+
本文以安装debian为例。<br />
+
先从debian官网下载live iso文件:[https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/ debian-12.7.0-arm64-netinst.iso],然后使用scp命令上传到开发板的对应目录, Windows用户可以使用WinScp软件上传:
+
<syntaxhighlight lang="bash">
+
scp debian-12.7.0-arm64-netinst.iso root@192.168.1.200:/var/lib/vz/template/iso/
+
</syntaxhighlight>
+
点击右上角 “创建虚拟机” 按钮,然后在向导界面上对虚拟机进行配置,重要的设置项如下,其余的使用默认值即可:
+
{| class="wikitable"
+
! Section !! Content !! Description
+
|-
+
| 常规 || '''名称''': 随意填写 ||
+
|-
+
| 操作系统 || '''EFI Storage''': local<br />'''ISO镜像''': debian-12.7.0-arm64-netinst.iso || 选择Debian安装所需的iso文件
+
 
|-
 
|-
| 系统 || '''机型''': virt<br />'''BIOS''': OVMF (UEFI)<br />'''SCSI控制器''': VirtIO-SCSI ||  
+
| Baud rate
 +
| 1500000
 
|-
 
|-
| 磁盘 || '''存储''': local ||  
+
| Data bit
 +
| 8
 
|-
 
|-
| CPU || '''核心''': 1 || 这里使用单核心
+
| Parity check
 +
| None
 
|-
 
|-
| 内存 || '''内存(MiB)''': 512<br />'''最小内存(MiB)''': 512 || Memory allocation for the VM
+
| Stop bit
 +
| 1
 
|-
 
|-
| 网络 || '''桥接''': wan<br />'''模型''': VirtIO (paravirtualized) || 可以选择wan和br-lan
+
| Flow control
 +
| None
 
|}
 
|}
* 建议先使用单核的CPU配置完成系统的安装,再尝试更改成多核
+
* HDMI:通过显示器连接,直接登录到 Alpine 系统。
* 需要注意的是,由于不支持异端架构,CPU大小核不能混用,要么全用大核,要么全用小核, 具体做法是明确指定虚拟机使用的核心,序号从0开始,比如某些CPU序号0-3是大核, 虚拟机要使用4个核心,就填写'''0,1,2,3'''
+
* SSH:通过网络连接到设备后,可通过 SSH 登录。默认情况下,Alpine Linux 只配置了 eth0 网口。如果开发板有多个网口,请将网线连接到 WAN 口(某些开发板可能会标记为数字,请选择数字最小的网口)。
* 默认情况下系统已经创建好wan和br-lan两个网桥,虚拟机绑定到wan,则虚拟机和开发板处于同一网段,会从上游路由器分配IP地址 (本例中分配得到192.168.1.0/24网段的地址),虚拟机绑定网络到lan,则会从本机的dhcp server分配得到网段为192.168.2的IP地址
+
==初始化设置==
====启动虚拟机====
+
首次启动时,使用 setup-alpine 命令进行基本的系统设置,配置网络、时区、主机名等信息:
在左边导航区选择新创建的虚拟机,点击“控制台”,再点"Start Now"
+
===使用qcow2磁盘映像文件创建虚拟机===
+
下面演示使用命令行来创建虚拟机,将qcow2磁盘映像文件导入到虚拟机,  请将下面的example.qcow2替换成真实的文件名,当你在网上下载qcow2文件时,注意选用文件名含有aarch64和efi字样的版本:
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
# download 
+
setup-alpine
wget https://github.com/xxx/yyy/releases/download/armv8/example.qcow2 -O example.qcow2
+
 
+
# create vm with id(200)
+
qm create 200 --name example --memory 1024 --net0 virtio,bridge=wan --bios ovmf --cores 1 --cpu host
+
 
+
# create EFI disk for id(200)
+
qm set 200 --bios ovmf
+
qm set 200 --efidisk0 local:1
+
qm set 200 --boot c --bootdisk scsi0
+
qm set 200 --scsihw virtio-scsi-pci
+
 
+
# import img file into vm
+
qm importdisk 200 example.qcow2 local
+
 
</syntaxhighlight>
 
</syntaxhighlight>
回到界面,可以看到多了一个 “example“ 的虚拟机,<br />
+
==安装软件包==
选中它,点“硬件“,双击“未使用的磁盘”, 在弹出的对话框中更改如下选项:<br />
+
Alpine 使用 apk 包管理器来安装软件包。你可以使用以下命令安装所需的软件包:
总线/设备:'''SCSI'''<br />
+
SCSI控制器: '''VirtIO SCSI'''<br />
+
最后点 “添加”<br />
+
回到管理界面,点 “控制台”, 点 “Star Now" 启动虚拟机<br />
+
显示 "Display output is not active" 时需要耐心等待。
+
==其他==
+
===增加Swap空间===
+
建议内存2G及以下机器进行该设置
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
dd if=/dev/zero of=/swapfile bs=1M count=4096
+
apk add <package_name>
chmod 600 /swapfile
+
mkswap /swapfile
+
swapon /swapfile
+
echo "/swapfile none swap sw 0 0" >> /etc/fstab
+
 
</syntaxhighlight>
 
</syntaxhighlight>
查看状态
+
例如,安装 vim 编辑器:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
swapon --show
+
apk update
free -h
+
apk add vim
 
</syntaxhighlight>
 
</syntaxhighlight>
===切换国内软件源===
+
你可以通过修改 /etc/apk/repositories 文件配置软件包的源地址。
请参考 [https://mirrors.ustc.edu.cn/help/Alpine-Linux.html Alpine-Linux中文源]
+
==定制属于自已的 Alpine Linux 系统==
===检查内核是否开启了KVM===
+
===方法1: Fork Github Action项目===
 +
* Fork 项目:点击以下链接,并在右上角点击 “Fork” 按钮,将项目复制到你的 GitHub 账户:https://github.com/friendlyarm/Actions-Alpine-Linux
 +
* 修改脚本文件 scripts/setup-alpine.sh,该文件用于初始化 Alpine Linux 系统。你可以通过修改此文件来自定义你的 Alpine 系统
 +
* 修改仓库权限:进入仓库的 Settings -> Actions -> General -> Workflow permissions,将选项修改为 “Read and write permissions”
 +
* 触发 GitHub Actions 构建:默认情况下,点击 Star 即可触发构建。你可以通过 GitHub 仪表盘查看构建进度和结果
 +
===方法2: 使用原材料重新打包===
 +
访问 https://github.com/friendlyarm/Actions-Alpine-Linux/releases 下载文件 image-assets-rkXXXX.tgz(其中 XXXX 替换为具体的 CPU 型号)。该文件包含了文件系统及各个分区的镜像文件,用户可以对其进行简单修改,并重新打包成可烧录的固件。例如,重新打包 rk3528 平台的固件:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
root@prox4nanopi:~# ls -l /dev/kvm
+
git clone https://github.com/friendlyarm/sd-fuse_rk3528 -b kernel-6.1.y
crw-rw---- 1 root kvm 10, 232 Oct 11 04:23 /dev/kvm
+
tar xzf image-assets-rk3528.tgz -C sd-fuse_rk3528 --strip-components=1
root@prox4nanopi:~# dmesg | grep kvm
+
cd sd-fuse_rk3528
[    7.796613] kvm [1]: IPA Size Limit: 40 bits
+
# modify rootfs
[    7.796627] kvm [1]: GICv3: no GICV resource entry
+
./tools/extract-rootfs-tar.sh rootfs.tgz
[    7.796631] kvm [1]: disabling GICv2 emulation
+
echo "hello" > rootfs/root/welcome.txt
[    7.796642] kvm [1]: GIC system register CPU interface enabled
+
# re-package rootfs.img
[    7.796755] kvm [1]: vgic interrupt IRQ9
+
./build-rootfs-img.sh rootfs alpine-linux-arm64
[    7.796959] kvm [1]: VHE mode initialized successfully
+
# download kernel source code
 +
git clone https://github.com/friendlyarm/kernel-rockchip -b nanopi6-v6.1.y kernel --depth 1
 +
cat > kernel/arch/arm64/configs/custom.config<<EOL
 +
CONFIG_ANDROID_LOW_MEMORY_KILLER=n
 +
CONFIG_ANDROID_BINDER_IPC=y
 +
CONFIG_ANDROID_BINDERFS=y
 +
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder,anbox-binder,anbox-hwbinder,anbox-vndbinder"
 +
EOL
 +
# check default defconfig
 +
grep "KCFG:=" ./build-kernel.sh
 +
# re-build kernel with customize config
 +
KCFG="nanopi5_linux_defconfig kvm.config custom.config" kernel_src=kernel ./build-kernel.sh alpine-linux-arm64
 +
# re-package sdraw image
 +
./mk-sd-image.sh alpine-linux-arm64
 +
# re-package sd-to-emmc image (Select Y when asking whether to download the eflasher file.)
 +
./mk-emmc-image.sh alpine-linux-arm64
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
==Alpine Linux官方文档==
 +
更多Alpine Linux的使用指南,请参考官方文档:<br />
 +
https://wiki.alpinelinux.org/

Latest revision as of 05:58, 14 March 2025

English

1 Alpine Linux 系统的简单介绍

Alpine Linux 是一个轻量级、基于 musl libc 和 busybox 的 Linux 发行版,专为安全性、简洁性和高效性设计。它的核心非常小巧,仅包含最基本的功能,适合嵌入式设备、容器(如 Docker)以及其他资源受限的应用场景。Alpine 的包管理器 apk 提供快速、简单的包安装和更新,支持广泛的软件包。

友善电子根据 Alpine Linux 系统的特点,提供了基于 GitHub Actions 构建的 Alpine Linux 系统镜像。用户可以直接下载并进行测试使用,也可以通过 fork 仓库,根据自身需求灵活定制系统。

2 支持的平台

  • RK3328
  • RK3399
  • RK3528
  • RK3566
  • RK3568
  • RK3588

3 下载系统映像

你可以从这里下载到针对友善电子开发板,使用Github Action在线构建的Alpine Linux镜像:
https://github.com/friendlyarm/Actions-Alpine-Linux

用户根据所用开发板的CPU,选择下载适合的版本的镜像文件。
镜像文件以CPU型号开头(例如rk3568,rk3588),文件名中的sd和eflasher代表文件的不同用途,其含义如下:

  • sd: 安装系统到TF卡时使用
  • eflasher: 需要通过TF卡烧写系统到eMMC时使用

4 安装Alpine Linux

4.1 通过TF卡运行系统

下载带 "-sd-" 字样的镜像文件,使用你熟悉的写卡工具将镜像文件写入TF卡,然后将TF卡插入开发板,上电启动开发板即可启动Alpine Linux系统。

4.2 烧写系统到eMMC

下载带 "-eflasher-" 字样的镜像文件,使用你熟悉的写卡工具将镜像文件写入TF卡,然后将TF卡插入开发板,上电启动开发板,会自动烧写系统到eMMC,烧写完成后,拨出TF卡会自动重启并进入eMMC中的Alpine Linux系统。
如果有连接HDMI显示器, 可通过图形界面观察烧写进度, 也可以通过板载LED灯来掌握烧写进度,以NanoPi-R5S/NanoPi-R3S/NanoPi-R5C为例,LED的行为如下:

进度

SYS灯 (红灯)

LAN灯(绿灯)

WAN灯(绿灯)

上电开机

长亮

系统启动

慢闪

正在烧写

快闪

烧写完成

慢闪

长亮

长亮

5 登录Alpine Linux

默认帐号:

用户名: root
密码: fa

有如下三种方法登录Alpine Linux:

  • 串口:连接串口终端,使用如下设置:
Baud rate 1500000
Data bit 8
Parity check None
Stop bit 1
Flow control None
  • HDMI:通过显示器连接,直接登录到 Alpine 系统。
  • SSH:通过网络连接到设备后,可通过 SSH 登录。默认情况下,Alpine Linux 只配置了 eth0 网口。如果开发板有多个网口,请将网线连接到 WAN 口(某些开发板可能会标记为数字,请选择数字最小的网口)。

6 初始化设置

首次启动时,使用 setup-alpine 命令进行基本的系统设置,配置网络、时区、主机名等信息:

setup-alpine

7 安装软件包

Alpine 使用 apk 包管理器来安装软件包。你可以使用以下命令安装所需的软件包:

apk add <package_name>

例如,安装 vim 编辑器:

apk update
apk add vim

你可以通过修改 /etc/apk/repositories 文件配置软件包的源地址。

8 定制属于自已的 Alpine Linux 系统

8.1 方法1: Fork Github Action项目

  • Fork 项目:点击以下链接,并在右上角点击 “Fork” 按钮,将项目复制到你的 GitHub 账户:https://github.com/friendlyarm/Actions-Alpine-Linux
  • 修改脚本文件 scripts/setup-alpine.sh,该文件用于初始化 Alpine Linux 系统。你可以通过修改此文件来自定义你的 Alpine 系统
  • 修改仓库权限:进入仓库的 Settings -> Actions -> General -> Workflow permissions,将选项修改为 “Read and write permissions”
  • 触发 GitHub Actions 构建:默认情况下,点击 Star 即可触发构建。你可以通过 GitHub 仪表盘查看构建进度和结果

8.2 方法2: 使用原材料重新打包

访问 https://github.com/friendlyarm/Actions-Alpine-Linux/releases 下载文件 image-assets-rkXXXX.tgz(其中 XXXX 替换为具体的 CPU 型号)。该文件包含了文件系统及各个分区的镜像文件,用户可以对其进行简单修改,并重新打包成可烧录的固件。例如,重新打包 rk3528 平台的固件:

git clone https://github.com/friendlyarm/sd-fuse_rk3528 -b kernel-6.1.y
tar xzf image-assets-rk3528.tgz -C sd-fuse_rk3528 --strip-components=1
cd sd-fuse_rk3528
# modify rootfs
./tools/extract-rootfs-tar.sh rootfs.tgz
echo "hello" > rootfs/root/welcome.txt
# re-package rootfs.img
./build-rootfs-img.sh rootfs alpine-linux-arm64
# download kernel source code
git clone https://github.com/friendlyarm/kernel-rockchip -b nanopi6-v6.1.y kernel --depth 1
cat > kernel/arch/arm64/configs/custom.config<<EOL
CONFIG_ANDROID_LOW_MEMORY_KILLER=n
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder,anbox-binder,anbox-hwbinder,anbox-vndbinder"
EOL
# check default defconfig
grep "KCFG:=" ./build-kernel.sh
# re-build kernel with customize config
KCFG="nanopi5_linux_defconfig kvm.config custom.config" kernel_src=kernel ./build-kernel.sh alpine-linux-arm64
# re-package sdraw image
./mk-sd-image.sh alpine-linux-arm64
# re-package sd-to-emmc image (Select Y when asking whether to download the eflasher file.)
./mk-emmc-image.sh alpine-linux-arm64

9 Alpine Linux官方文档

更多Alpine Linux的使用指南,请参考官方文档:
https://wiki.alpinelinux.org/