Alpine Source Map by boot sequence

From Alpine Linux
Revision as of 04:59, 29 November 2016 by Dlin (talk | contribs) (→‎Boot Sequence)

Alpine Source Map by boot sequence

This material is work-in-progress ...

Alternate message.
(Last edited by Dlin on 29 Nov 2016.)

There are many different running mode/environment for Alpine. Here I try to describe what I've learned by tracing the source code.

Boot Sequence

A typical boot sequence of Alpine is:

  1. Hardware BIOS
  2. Boot Loader (syslinux's isolinux)
  3. Initramfs (linux-grsec)
  4. Kernel (linux-grsec)
  5. Init System(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
    3. ...
  6. Shell(busybox's ash)

For Embedded System:

  1. Boot Loader(UBOOT)
  2. Kernel
  3. Init System
  4. Shell

For docker:

  1. Shell (docker image https://hub.docker.com/_/alpine/)

syslinux

The 'syslinux.cfg' of syslinux in put in https://github.com/alpinelinux/alpine-iso/blob/master/Makefile

linux-grsec

The package kernel into ISO file method in https://github.com/alpinelinux/alpine-iso/blob/master/Makefile.

The source of kernel in linux-grsec

openrc

The Alpine customized scripts are in https://github.com/alpinelinux/aports/tree/master/main/openrc

shell

By 'apk info -W /etc/profile', we know the default profile is customized in alpine-baselayout https://github.com/alpinelinux/aports/tree/master/main/alpine-baselayout

Developer Environment

Trace code in docker

In any modern Linux distribution, run docker will let you get the same developer environment.

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


Create the build/development inside 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

Build one package sample(eg. 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*

When you shut down your PC, you can recall the docker 'alpine' container by

 docker start alpine
 docker attach alpine


Test

  • Test ISO file
 qemu-system-x86_64 -enable-kvm -localtime -m 512M -vga std  \
   -drive file=YOUR_ISO_FILE ,cache=none,if=virtio
  • Test Package in docker

To make sure you got the same environment of default package environment, just use 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