Alpine 源代码地图(按启动顺序)

来自 Alpine Linux

Alpine 源代码地图(按启动顺序)

此材料为进行中的工作...

备用消息。
(最后编辑者:Dlin,于 2016 年 11 月 29 日。)

Alpine 有许多不同的运行模式/环境。在这里,我尝试描述我通过追踪源代码所学到的知识。

启动顺序

Alpine 的典型启动顺序是

  1. 硬件 BIOS
  2. 启动加载器 (syslinux 的 isolinux)
  3. Initramfs (linux-grsec)
  4. 内核 (linux-grsec)
  5. Init 系统 (openrc)
  6. Shell (busybox 的 ash)

对于嵌入式系统

  1. 启动加载器 (UBOOT)
  2. 内核
  3. Init 系统
  4. Shell

对于 Docker

  1. Shell (Docker 镜像 https://hub.docker.com/_/alpine/)

syslinux

syslinux 的 'syslinux.cfg' 位于 https://github.com/alpinelinux/alpine-iso/blob/master/Makefile

initramfs

您可以使用 gzip -dc initramfs-grsec|cpio -vid 解压它。您可以删除 'quiet' 并在内核启动选项中添加 'debug' 标志以显示更多调试信息。init 的源代码可以在 apk info -W /usr/share/mkinitfs/initramfs-init 中找到 https://github.com/alpinelinux/mkinitfs

linux-grsec

将内核包打包到 ISO 文件的方法位于 https://github.com/alpinelinux/alpine-iso/blob/master/Makefile

内核的源代码位于 linux-grsec

openrc

Alpine 定制脚本位于 https://github.com/alpinelinux/aports/tree/master/main/openrc

  1. /etc/inittab https://github.com/alpinelinux/aports/blob/master/main/alpine-baselayout/inittab
  2. /etc/runlevels/boot/bootmisc https://github.com/OpenRC/openrc/blob/master/init.d/bootmisc.in


shell

通过 'apk info -W /etc/profile',我们知道默认 profile 在 alpine-baselayout 中定制 https://github.com/alpinelinux/aports/tree/master/main/alpine-baselayout

开发者环境

在 Docker 中追踪代码

在任何现代 Linux 发行版中,运行 Docker 都会让您获得相同的开发者环境。

 docker run -it --name alpine alpine /bin/sh


在 Docker 内部创建构建/开发环境

 apk update
 apk add tmux vim diffutils # my tools
 apk add alpine-sdk xorriso syslinux
 adduser YOUR_ID # There are some build scripts can't work under 'root' account.
 su - YOUR_ID
 abuild-keygen -i -a

构建一个软件包示例(例如 openrc)

 git clone https://github.com/alpinelinux/aports
 cd aports/main/openrc  # change this line to the package which you want to change
 abuild -r
 ls -l ~/packages/x86_64/openrc*

当您关闭 PC 时,您可以通过以下方式重新调用 Docker 'alpine' 容器

 docker start alpine
 docker attach alpine


测试

  • 测试 ISO 文件
 qemu-system-x86_64 -enable-kvm -localtime -m 512M -vga std  \
   -drive file=YOUR_ISO_FILE ,cache=none,if=virtio
  • 在 Docker 中测试软件包

为了确保您获得与默认软件包环境相同的环境,只需使用 Docker 即可。

 docker run --it --rm --name alpine-test alpine /bin/sh
 apk update
  # on other window copy your new apk into the 'alpine-test' container
 docker cp foo.apk alpine-test:/tmp
  # back to 'alpine-test' container
 apk fix /tmp/foo.apk