<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Danielfdickinson</id>
	<title>Alpine Linux - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Danielfdickinson"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Danielfdickinson"/>
	<updated>2026-05-02T00:52:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Installation&amp;diff=22070</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Installation&amp;diff=22070"/>
		<updated>2022-07-10T05:32:10Z</updated>

		<summary type="html">&lt;p&gt;Danielfdickinson: Add link to netbooting guide for install via iPXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Image:hdd_mount.png|left|link=]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page explains the basics to get started. But before actually installing, it can also help to skim through the [[Alpine_Linux:FAQ| Frequenty Asked Questions (FAQ)]].&lt;br /&gt;
&lt;br /&gt;
{{Tip|This is a wiki!&lt;br /&gt;
If something isn&#039;t correct (anymore), or still incomplete, you will have to try figuring it out, or ask for the correct solution in the [https://alpinelinux.org/community/ community].&lt;br /&gt;
&lt;br /&gt;
And then carefully edit the wiki page.&lt;br /&gt;
&lt;br /&gt;
Just as those before you did it for you.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Minimal Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
* At least 100 MB of RAM. [A graphical desktop system may require up to 1 GB minimum.]&lt;br /&gt;
* At least 0-700 MB space on a writable storage device. [Only required in &amp;quot;sys&amp;quot; or &amp;quot;data&amp;quot; mode installations (explained below). It is optional in &amp;quot;diskless&amp;quot; mode, where it may be used to save newer data and configurations states of a running system.]&lt;br /&gt;
&lt;br /&gt;
For more information please check [[Requirements]]&lt;br /&gt;
&lt;br /&gt;
== Installation Overview ==&lt;br /&gt;
&lt;br /&gt;
=== The general course of action ===&lt;br /&gt;
{{Note|For single-board-computer (SBC) architectures which can not boot .iso images, see [[Alpine_on_ARM|Alpine on ARM]] for peculiarities.}}&lt;br /&gt;
&lt;br /&gt;
As usual, the regular installation procedure starts with three basic steps (additional details for all the steps follow [[Installation#additional details|below]]):&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Downloading and verifying the proper [http://alpinelinux.org/downloads stable-release ISO installation image-file] for the computer&#039;s architecture, and the corresponding &amp;lt;code&amp;gt;sha256&amp;lt;/code&amp;gt; (checksum) and &amp;lt;code&amp;gt;GPG&amp;lt;/code&amp;gt; (signature) files. &lt;br /&gt;
# Either burning the ISO image-file onto a blank CD/DVD/Blu-ray disk with disk burning software, or flashing the installation image onto a bootable storage device (USB-device, CF-/MMC-/SD-card, floppy, ...).&lt;br /&gt;
# Booting the computer from the prepared disk or storage device.&lt;br /&gt;
&lt;br /&gt;
The boot process of the installation image first copies the entire operating system into the RAM memory, and then already starts a complete Alpine Linux system from there. It will initially only provide a basic command line environment that does not depend on reading from any (possibly slow) initial boot media, anymore.&lt;br /&gt;
&lt;br /&gt;
Log-in is possible as the user &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;. Initially, the root user has no password.&lt;br /&gt;
&lt;br /&gt;
At the command prompt, an interactive script named &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-alpine|setup-alpine]]&amp;lt;/code&amp;gt; is available to configure and install the initial Alpine Linux system.&lt;br /&gt;
&lt;br /&gt;
The question-and-answer dialog of &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-alpine|setup-alpine]]&amp;lt;/code&amp;gt; takes care of the base configuration and allows to configure the system to&amp;lt;/br&amp;gt;&lt;br /&gt;
boot into one of three different &#039;&#039;&#039;Alpine Linux disk modes&#039;&#039;&#039;: &#039;&#039;&#039;&amp;quot;diskless&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;data&amp;quot;&#039;&#039;&#039;, or &#039;&#039;&#039;&amp;quot;sys&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
These modes are explained in more detail in the following subsections.&lt;br /&gt;
&lt;br /&gt;
{{Note|It can be helpful to know that it is possible to first only complete a base configuration of the initial &amp;quot;diskless&amp;quot; installation system in order to to prepare the system. For example, to download and install some specific driver or software tool. And then use more specific [[Alpine_setup_scripts|setup-scripts]] afterwards, to proceed with the final installation. The base configuration of the &amp;quot;diskless&amp;quot; system may be completed by running &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-alpine|setup-alpine]]&amp;lt;/code&amp;gt; and answering &amp;quot;none&amp;quot; when asked for the disk to use, and where to store configs, as well as for the location for the package cache.&lt;br /&gt;
&lt;br /&gt;
Examples of preparation options:&lt;br /&gt;
&lt;br /&gt;
* Preparing a custom partitioning or filesystem scheme that avoids to use and/or overwrite an entire disk ([[Installation#Custom_partitioning_of_the_harddisk|details below]]).&lt;br /&gt;
* Installing something that may be missing in the live system to configure the hardware, e.g. by using the alpine package manager &amp;lt;code&amp;gt;[[Alpine_Linux_package_management|apk]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Examples of proceeding options:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-lbu|setup-lbu]]&amp;lt;/code&amp;gt; to configure a &amp;quot;local backup&amp;quot; location for the diskless system, and &amp;lt;code&amp;gt;[[Alpine_local_backup|lbu commit]]&amp;lt;/code&amp;gt; to then save the local configuration state.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-apkcache|setup-apkcache]]&amp;lt;/code&amp;gt; to configure a local package cache storage location.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-disk|setup-disk]]&amp;lt;/code&amp;gt; to add a &amp;quot;data&amp;quot; mode partition, or do a classic full install of the &amp;quot;diskless&amp;quot; system onto a &amp;quot;sys&amp;quot; disk or partition.&lt;br /&gt;
&lt;br /&gt;
There are many more [[Alpine_setup_scripts|setup-scripts]] available. All these tools may also be run later to adjust specific configurations. For example, to set up a graphical environment as covered under [[Installation#Post-Install|Post-Install]] below.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Diskless Mode&#039;&#039;&#039;=== &lt;br /&gt;
This means the entire operating system with all applications are first loaded into RAM and then only run from there. This is the method used to boot for the .iso installation images. It&#039;s is extremely fast and can save on unnecessary disk spin-ups, power, and wear. It is similar to what other linux distributions may call a &amp;quot;frugal&amp;quot; install and boot into with a &amp;quot;toram&amp;quot; option. However, &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-alpine|setup-alpine]]&amp;lt;/code&amp;gt; can also configure the installed system to boot like this if &amp;quot;disk=none&amp;quot; is specified.&lt;br /&gt;
&lt;br /&gt;
Custom configurations and package selections may optionally still be preserved or &amp;quot;persist&amp;quot; across reboots by using the Alpine local backup tool &amp;lt;code&amp;gt;[[Alpine_local_backup|lbu]]&amp;lt;/code&amp;gt;. It enables committing and reverting system states by using .apkovl files that are saved to writable storage and loaded when booting. If additional or updated packages have been added to the system, these may also be made available for automatic (re)installation during the boot phase without any (re)downloading, by enabling a [[Alpine_Linux_package_management#Local_Cache|local package cache]] on the writable storage.&lt;br /&gt;
&lt;br /&gt;
[[https://gitlab.alpinelinux.org/alpine/alpine-conf/-/issues/10473 FIXME-1]: Storing local configs and the package cache on an &#039;&#039;internal&#039;&#039; disk still requires [[Alpine_local_backup#Saving_and_loading_ISO_image_customizations|some manual steps]] to have the partition listed, i.e. making a /etc/fstab entry, mountpoint, and mount, *before* running setup-alpine. The linked workaround also still requires to commit these configurations to disk manually before rebooting.]&lt;br /&gt;
&lt;br /&gt;
If a writable partition is available, &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; can be told to store the configs and the package cache on that writable partition. (Later, another directory on that same partition or another available partition may also be mounted as /home, or for example, for selected important applications to keep their run-time and user data on it.)&lt;br /&gt;
&lt;br /&gt;
The boot device of the newly configured local &amp;quot;diskless&amp;quot; system may remain the initial (and possibly read-only) installation media. But it is also possible to copy the boot system to a partition (e.g. /dev/sdXY) with &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-bootable|setup-bootable]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Data Disk Mode&#039;&#039;&#039;=== &lt;br /&gt;
This mode also runs from system RAM, thus it enjoys the same accelerated operation speed as &amp;quot;diskless&amp;quot; mode. However, swap storage and the entire {{Path|/var}} directory tree get mounted from a persistent storage device (two newly created partitions). The directory {{Path|/var}} holds e.g. all log files, mailspools, databases, etc., as well as &amp;lt;code&amp;gt;[[Alpine_local_backup|lbu]]&amp;lt;/code&amp;gt; backup commits and the package cache. This mode is useful for having RAM accelerated servers with variable amounts of user-data that exceed the available RAM size. It enables the entire current system state (not just the boot state) to survive a system crash in accordance with the particular filesystem guarantees. &lt;br /&gt;
&lt;br /&gt;
[[https://gitlab.alpinelinux.org/alpine/alpine-conf/-/issues/10474 FIXME-2]]: Setup-alpine will create the data partition and mount it as /var, but can not yet configure lbu storage settings automatically. It is currently necessary to select &amp;quot;none&amp;quot; at the &#039;where to store configs&#039; prompt (the new data partition is not listed) and configure lbu manually. For example, after running &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; and before rebooting:&lt;br /&gt;
 &lt;br /&gt;
# Set LBU_MEDIA=sdXY in  /etc/lbu/lbu.conf&lt;br /&gt;
# Execute a corresponding &amp;lt;code&amp;gt;echo &amp;quot;/dev/sdXY /media/sdXY &amp;lt;fstype&amp;gt; rw 0 0&amp;quot; &amp;gt;&amp;gt; /etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save the configuration for the next boot with &amp;lt;code&amp;gt;lbu commit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In data disk mode, the boot device may also remain the initial (and possibly read-only) installation media, or be copied to a partition (e.g. /dev/sdXY) with &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-bootable|setup-bootable]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;System Disk Mode&#039;&#039;&#039;=== &lt;br /&gt;
This is a traditional hard-disk install.&lt;br /&gt;
&lt;br /&gt;
If this mode is selected, the &amp;lt;code&amp;gt;[[setup-alpine]]&amp;lt;/code&amp;gt; script creates three partitions on the selected storage device, {{Path|/boot}}, {{Path|swap}} and {{Path|/}} (the filesystem root). This mode may, for example, be used for generic [[Desktops|desktop]] and development machines.&lt;br /&gt;
&lt;br /&gt;
For custom partitioning, see [[Setting_up_disks_manually]].&lt;br /&gt;
&lt;br /&gt;
To install along side another operating systems, see [[Installing_Alpine_on_HDD_dualbooting]].&lt;br /&gt;
&lt;br /&gt;
== Basic Installation Step Details ==&lt;br /&gt;
&lt;br /&gt;
{{Expand|  }}&lt;br /&gt;
&lt;br /&gt;
This &amp;quot;Additional Details&amp;quot; section needs to be consolidated with the work at &#039;&#039;&#039;[https://docs.alpinelinux.org https://docs.alpinelinux.org] (not finished)&#039;&#039;&#039; &lt;br /&gt;
(Restructuring things there, moving and linking from here or there?). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Verifying the downloaded image-file ===&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:95%; align=center&amp;quot;&lt;br /&gt;
|+ Commands to verify the checksum and GPG signature of a downloaded image-file on different systems.&lt;br /&gt;
|-&lt;br /&gt;
! width=100px |  OS type&lt;br /&gt;
!  &amp;lt;code&amp;gt;SHA256&amp;lt;/code&amp;gt; check !! &amp;lt;code&amp;gt;SHA256&amp;lt;/code&amp;gt; calculation (to be compared manually) !! &amp;lt;code&amp;gt;GPG&amp;lt;/code&amp;gt; signature verification&lt;br /&gt;
|-&lt;br /&gt;
! Linux&lt;br /&gt;
| &amp;lt;code&amp;gt;sha256sum -c alpine-*.iso.sha256&amp;lt;/code&amp;gt; ||        || &amp;lt;code&amp;gt;curl https://alpinelinux.org/keys/ncopa.asc &amp;amp;#124; gpg --import ;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; gpg --verify alpine-&amp;lt;version&amp;gt;.iso.asc alpine-&amp;lt;version&amp;gt;.iso&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! MACOS  &lt;br /&gt;
| - ? -  || &amp;lt;code&amp;gt;shasum -a 256 alpine-*.iso&amp;lt;/code&amp;gt; || - ? -&lt;br /&gt;
|-&lt;br /&gt;
! OpenBSD  &lt;br /&gt;
| &amp;lt;code&amp;gt;sha256 -C alpine-*.sha256 alpine-*.iso&amp;lt;/code&amp;gt; ||        || &amp;lt;code&amp;gt;doas pkg_add gnupg;&lt;br /&gt;
ftp -o - https://alpinelinux.org/keys/ncopa.asc &amp;amp;#124; gpg --import ;&lt;br /&gt;
gpg --verify alpine-&amp;lt;version&amp;gt;.iso.asc alpine-&amp;lt;version&amp;gt;.iso&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! FreeBSD  &lt;br /&gt;
| - ? - || &amp;lt;code&amp;gt;/usr/local/bin/shasum -a 256 alpine-*.iso&amp;lt;/code&amp;gt; || - ? -&lt;br /&gt;
|-&lt;br /&gt;
! NetBSD  &lt;br /&gt;
| - ? - || &amp;lt;code&amp;gt;/usr/local/bin/shasum -a 256 alpine-*.iso&amp;lt;/code&amp;gt; || - ? -&lt;br /&gt;
|-&lt;br /&gt;
! Windows (PowerShell installed)&lt;br /&gt;
|                 - ? -             || &amp;lt;code&amp;gt;Get-FileHash .\alpine-&amp;lt;image-version&amp;gt;.iso -Algorithm SHA256&amp;lt;/code&amp;gt; || - ? -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flashing (direct data writing) the installation image-file onto a device or media  ===&lt;br /&gt;
&lt;br /&gt;
==== Unix/Linux ====&lt;br /&gt;
&lt;br /&gt;
Under Unix (and thus Linux), &amp;quot;everything is a file&amp;quot; and the data in the image-file can be written to a device or media with the &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; command. Afterward, executing the &amp;lt;code&amp;gt;eject&amp;lt;/code&amp;gt; command removes the target device from the system and ensures the write cache is completely flushed.&lt;br /&gt;
&lt;br /&gt;
 dd if=&amp;lt;iso-file-to-read-in&amp;gt; of=&amp;lt;target-device-node-to-write-out-to&amp;gt; bs=4M oflag=sync status=progress; eject &amp;lt;target-device-node-to-write-to&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be careful to correctly identify the target device as any data on it &#039;&#039;&#039;will&#039;&#039;&#039; be lost! All connected &amp;quot;bulk storage devices&amp;quot; can be listed with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lsblk&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;blkid&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 # lsblk&lt;br /&gt;
 NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT&lt;br /&gt;
 sdX               0:0    0  64,0G  0 disk  &lt;br /&gt;
 ├─sdX1            0:1    0     2G  0 part  &lt;br /&gt;
 └─sdX2            0:2    0    30G  0 part  /mnt/sdX2&lt;br /&gt;
 &lt;br /&gt;
 # blkid&lt;br /&gt;
 /dev/sdX1: LABEL=&amp;quot;some&amp;quot; UUID=&amp;quot;...&amp;quot; TYPE=&amp;quot;vfat&amp;quot;&lt;br /&gt;
 /dev/sdX2: LABEL=&amp;quot;other&amp;quot; UUID=&amp;quot;...&amp;quot; TYPE=&amp;quot;ext4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, if /dev/sdX is the desired target device, first make sure you un-mount all mounted partitions of the target device. For example sdX1 and sdX2:&lt;br /&gt;
&lt;br /&gt;
 umount  /dev/sdX1  /dev/sdX2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&#039;s output-file (&amp;lt;code&amp;gt;of=&amp;lt;/code&amp;gt;), however, do &#039;&#039;&#039;not&#039;&#039;&#039; specify a partition number. For example, write to sdX, &#039;&#039;&#039;not&#039;&#039;&#039; sdX1:&lt;br /&gt;
&lt;br /&gt;
Warning: &#039;&#039;&#039;This will overwrite the target device /dev/sdX&#039;&#039;&#039;, so before executing, make sure you have a backup of the data if you can&#039;t afford to lose it.&lt;br /&gt;
&lt;br /&gt;
 dd if=~/Downloads/alpine-standard-3.00.0-x86_64.iso of=/dev/sdX bs=4M oflag=sync status=progress; eject /dev/sdX&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
For example, there is the [https://rufus.ie/ Rufus] program. Rufus will enable you to create bootable USB flash drives under Windows. &lt;br /&gt;
&lt;br /&gt;
Rufus has been tested and works for Alpine Linux 3.12.x with the following settings:&lt;br /&gt;
* &#039;&#039;&#039;Partition scheme&#039;&#039;&#039;: &amp;lt;code&amp;gt;MBR&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Target system&#039;&#039;&#039;: &amp;lt;code&amp;gt;BIOS or UEFI&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;File system&#039;&#039;&#039;: &amp;lt;code&amp;gt;FAT32&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Cluster size&#039;&#039;&#039;: &amp;lt;code&amp;gt;4096 bytes (default)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Verifying the written installation media ===&lt;br /&gt;
&lt;br /&gt;
After detaching and re-attaching the device, a bit-wise comparison can verify the data written to the device (instead of just data buffered in RAM). If the comparison terminates with an end-of-file error on the .iso file side, all the contents from the image have been written (and re-read) successfully:&lt;br /&gt;
&lt;br /&gt;
 # cmp ~/Downloads/alpine-standard-3.00.0-x86_64.iso /dev/sdX&lt;br /&gt;
 cmp: EOF on alpine-standard-3.00.0-x86_64.iso&lt;br /&gt;
&lt;br /&gt;
=== Booting from external devices ===&lt;br /&gt;
&lt;br /&gt;
Insert the boot media to a proper drive or port of the computer and turn the machine on, or restart it, if already running.&lt;br /&gt;
&lt;br /&gt;
If the computer does not automatically boot from the desired device, one needs to bring up the boot menu and choose the media to boot from. Depending on the computer, the menu may be accessed by repeatedly pressing a key quickly when booting starts. Some computers require that you press the button &#039;&#039;before&#039;&#039; starting the computer and hold it down while the computer boots. Typical keys are:  `F9`-`F12`, sometimes `F7` or `F8`. If these don&#039;t bring up the boot menu, it may be necessary to enter the BIOS configuration and adjust the boot settings, for which typical keys are: `Del.` `F1` `F2` `F6` or `Esc.`&lt;br /&gt;
&lt;br /&gt;
=== Custom partitioning of the harddisk ===&lt;br /&gt;
&lt;br /&gt;
It is possible to specify configurations for RAID, encryption, LVM, etc. as well as manual partitioning.&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;diskless&amp;quot; or &amp;quot;data disk&amp;quot; mode installs, manual partitioning may be needed to prepare the harddisk for committing local backups of the system state with &amp;lt;code&amp;gt;[[Alpine_local_backup|lbu commit]]&amp;lt;/code&amp;gt;, to have a place for a package cache, or to use it for a /var mount. &lt;br /&gt;
&lt;br /&gt;
For a &amp;quot;sys&amp;quot; install, custom partitioning is needed only if the desired scheme differs from overwriting an entire disk, or using the default set of a /boot, swap and root partition on the disk.&lt;br /&gt;
&lt;br /&gt;
See [[Setting_up_disks_manually]] for the alpine options for RAID, encryption, LVM, etc. and manual partitioning.&lt;br /&gt;
&lt;br /&gt;
=== Questions asked by &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[File:Installation-alpine-alpine-setup-3-setup-scripts.png|350px|thumb|right|Example &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; session]]&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;[[setup-alpine]]&amp;lt;/code&amp;gt; script offers the following configuration options:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Keyboard Layout&#039;&#039;&#039; (Local keyboard language and usage mode, e.g. &#039;&#039;us&#039;&#039; and variant of &#039;&#039;us-nodeadkeys&#039;&#039;.)&lt;br /&gt;
* &#039;&#039;&#039;Hostname&#039;&#039;&#039; (The name for the computer.)&lt;br /&gt;
* &#039;&#039;&#039;Network&#039;&#039;&#039; (For example, automatic IP address discovery with the &amp;quot;DHCP&amp;quot; protocol.)&lt;br /&gt;
* &#039;&#039;&#039;DNS Servers&#039;&#039;&#039; (Domain Name Servers to query. For privacy reasons it is NOT recommended to route every local request to servers like google&#039;s &amp;lt;s&amp;gt;8.8.8.8&amp;lt;/s&amp;gt; .)&lt;br /&gt;
* &#039;&#039;&#039;Timezone&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Proxy&#039;&#039;&#039; (Proxy server to use for accessing the web. Use &amp;quot;none&amp;quot; for direct connections to the internet.)&lt;br /&gt;
* &#039;&#039;&#039;Mirror&#039;&#039;&#039; (From where to download packages. Choose the organization you trust giving your usage patterns to.)&lt;br /&gt;
* &#039;&#039;&#039;SSH&#039;&#039;&#039; (Secure SHell remote access server. &amp;quot;Openssh&amp;quot; is part of the default install image. Use &amp;quot;none&amp;quot; to disable remote login, e.g. on laptops.)&lt;br /&gt;
* &#039;&#039;&#039;NTP&#039;&#039;&#039; (Network Time Protocol client used for keeping the system clock in sync with a time server. Package &amp;quot;chrony&amp;quot; is part of the default install image.)&lt;br /&gt;
* &#039;&#039;&#039;Disk Mode&#039;&#039;&#039; (Select between diskless (disk=&amp;quot;none&amp;quot;), &amp;quot;data&amp;quot; or &amp;quot;sys&amp;quot;, as described above.) &lt;br /&gt;
  {{Warning|The data on a chosen device will be overwritten!}}&lt;br /&gt;
&lt;br /&gt;
=== Preparing for the first boot ===&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; has finished configuring the &amp;quot;sys&amp;quot; disk mode, the system should be ready to reboot right away (see next subsection).&lt;br /&gt;
&lt;br /&gt;
If the new local system was configured to run in &amp;quot;diskless&amp;quot; or &amp;quot;data&amp;quot; mode, and you do not want keep booting from the initial (and possibly read-only) installation media, the boot system needs to be copied to another device or partition.&lt;br /&gt;
&lt;br /&gt;
The target partition may be identified using &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lsblk&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (after installing it with &amp;lt;code&amp;gt;apk add lsblk&amp;lt;/code&amp;gt;) and/or &amp;lt;code&amp;gt;blkid&amp;lt;/code&amp;gt;, similar to previously identifying the initial installation media device.&lt;br /&gt;
&lt;br /&gt;
The procedure to copy the boot system is explained at &amp;lt;code&amp;gt;[[Alpine_setup_scripts#setup-bootable|setup-bootable]]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once everything is in place, save your customized configuration with &amp;lt;code&amp;gt;lbu commit&amp;lt;/code&amp;gt; before rebooting.&lt;br /&gt;
&lt;br /&gt;
=== Rebooting and testing the new system ===&lt;br /&gt;
&lt;br /&gt;
First, remove the initial installation media from the boot drive, or detach it fron the port it&#039;s connected to.&lt;br /&gt;
&lt;br /&gt;
The system may now be power-cycled or rebooted to confirm everything is working correctly.&lt;br /&gt;
&lt;br /&gt;
The relevant commands for this are &amp;lt;code&amp;gt;poweroff&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Completing the installation ===&lt;br /&gt;
&lt;br /&gt;
The installation script installs only the base operating system. &#039;&#039;&#039;No&#039;&#039;&#039; applications e.g. web server, mail server, desktop environment, or web browser are installed, and &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; is the only user.&lt;br /&gt;
&lt;br /&gt;
Please look under &amp;quot;Post-Install&amp;quot; below, for some common things to do after installation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Further Installation Instructions =&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
* [[Kernels]] &#039;&#039;(kernel selection, e.g. for VMs or RPi)&#039;&#039;&lt;br /&gt;
* [[How to make a custom ISO image with mkimage]] &#039;&#039;(installation media with its own configuration)&#039;&#039;&lt;br /&gt;
* [[Directly booting an ISO file]] &#039;&#039;(without flashing it to a disk or device)&#039;&#039;&lt;br /&gt;
* [[Dualbooting|Dual/multi-boot install to HDD partition]]&lt;br /&gt;
* [[Netboot Alpine Linux using iPXE]]&lt;br /&gt;
&lt;br /&gt;
=== Post-Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- COMMENT FOR EDITORS&lt;br /&gt;
&lt;br /&gt;
If you edit Post-Install,&lt;br /&gt;
&lt;br /&gt;
  * Consider that there are already [[Tutorials_and_Howtos#Post-Install]], [[Developer_Documentation#Package_management]] and the Handbook, please work towards reducing duplication and providing an overview, and topic details of considerable size on their own pages.&lt;br /&gt;
  * Here, only the most relevant jumping off points are listed, not exact list duplicates!!!&lt;br /&gt;
  * Keep short-list of links here, as overview to more detailed topic specific pages.&lt;br /&gt;
  * Don&#039;t aggregate different topics at yet another place.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|A [[Post installation|Post Installation]] wiki page has been created, however, its information is better to be kept at their individually manageable topic pages and only directly referenced (linked) from the list in the [[Installation]] overview page in the future. If you would like to help with this process please go ahead.}}&lt;br /&gt;
&lt;br /&gt;
* [[Setting up a new user]] &#039;&#039;(to allow remote, console, or graphical logins)&#039;&#039;&lt;br /&gt;
* [[Tutorials_and_Howtos#Networking|Setting up Networking]] &#039;&#039;(including non-standard configurations)&#039;&#039;&lt;br /&gt;
* [[Package_management|Package Management (apk)]] &#039;&#039;(how to search/add/del packages etc.)&#039;&#039;&lt;br /&gt;
** [[Package_management#Upgrade_a_Running_System|Upgrading Alpine]] &#039;&#039;(checking for and installing updates)&#039;&#039;&lt;br /&gt;
** [[Repositories#Enabling_the_community_repository|Enabling the community repository]] &#039;&#039;(access to additional packages)&#039;&#039;&lt;br /&gt;
* [[FAQ#Why_don.27t_I_have_man_pages_or_where_is_the_.27man.27_command.3F|man command/man pages]]&lt;br /&gt;
* [[Change default shell]]&lt;br /&gt;
* [[Running glibc programs]] &#039;&#039;(installation and development)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Alpine_local_backup|Local backup utility &amp;lt;code&amp;gt;lbu&amp;lt;/code&amp;gt;]] &#039;&#039;(persisting RAM system configurations)&#039;&#039;&lt;br /&gt;
** [[Back Up a Flash Memory Installation]] &#039;&#039;(&amp;quot;diskless mode&amp;quot; systems)&#039;&#039;&lt;br /&gt;
** [[Manually_editing_a_existing_apkovl]] &#039;&#039;(the stored custom configs)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[OpenRC|Init System (OpenRC)]] &#039;&#039;(configure a service to automatically boot at next reboot)&#039;&#039;&lt;br /&gt;
** [[Writing Init Scripts]]&lt;br /&gt;
** [[Multiple Instances of Services]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Alpine setup scripts#setup-xorg-base|&amp;lt;code&amp;gt;setup-xorg-base&amp;lt;/code&amp;gt;]] &#039;&#039;(setup graphical base environment)&#039;&#039;&lt;br /&gt;
** [[Tutorials_and_Howtos#Desktop_Environment|Desktop Environments]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Hosting services on Alpine]] &#039;&#039;(links to several mail/web/ssh server setup pages)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[How to get regular stuff working]] &#039;&#039;(things one may miss in a too lightweight installation )&#039;&#039;&lt;br /&gt;
* Running applications and services in their own [[Firejail Security Sandbox]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Also see other [[:Category:Installation|Installation Category]] pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Broader Usage Guides ===&lt;br /&gt;
&lt;br /&gt;
* See: [[Tutorials and Howtos]]&lt;br /&gt;
&lt;br /&gt;
= General Documentation =&lt;br /&gt;
&lt;br /&gt;
{{Tip| Alpine Linux packages stay close to the upstream design. Therefore, all upstream documentation about configuring a software package, as well as good configuration guides from other distributions that stay close to upstream, e.g. those in the [https://wiki.archlinux.org/ Arch Wiki], are to a large degree, also applicable to configuring the software on Alpine Linux, thus can be very useful.}}&lt;br /&gt;
&lt;br /&gt;
* [[FAQ|FAQs]]&lt;br /&gt;
&lt;br /&gt;
* [[Contribute|How to Contribute]]&lt;br /&gt;
* [[Developer Documentation]]&lt;br /&gt;
* [[Alpine_Linux:Wiki_etiquette|Wiki etiquette]] &#039;&#039;(to collaborate on this documentation)&#039;&#039;&lt;br /&gt;
* [[Comparison with other distros]] &#039;&#039;(how common things are done on Alpine)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Danielfdickinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Netboot_Alpine_Linux_using_iPXE&amp;diff=22069</id>
		<title>Netboot Alpine Linux using iPXE</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Netboot_Alpine_Linux_using_iPXE&amp;diff=22069"/>
		<updated>2022-07-10T05:28:14Z</updated>

		<summary type="html">&lt;p&gt;Danielfdickinson: Fix typo in ipxeboot network name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;Copy the files needed by iPXE to a web server&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;For this guide we will provide the files at http://ipxe-boot.example.com/ from the directory &amp;lt;code&amp;gt;/var/www/ixpe-boot.example.com/&amp;lt;/code&amp;gt; on the web server, which is writable by your non-root admin user. We also assume the web server follows symlinks within &amp;lt;code&amp;gt;/var/www/ipxe-boot.example.com&amp;lt;/code&amp;gt; (but not outside that directory tree).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Copy the netboot tarball (for example the [https://dl-cdn.alpinelinux.org/alpine/v3.16/releases/x86_64/alpine-netboot-3.16.0-x86_64.tar.gz 3.16.0 stable release of Alpine&#039;s netboot image for x86_64]) to your non-root admin user on your web server.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Extract the netboot tarball to your webserver directory. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tar -C /var/www/ipxe-boot.example.com -xzf alpine-netboot-3.16.0-x86_64.tar.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;This will create a directory structure such as:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;boot/&lt;br /&gt;
boot/initramfs-lts&lt;br /&gt;
boot/config-virt&lt;br /&gt;
boot/dtbs-virt/&lt;br /&gt;
boot/System.map-lts&lt;br /&gt;
boot/vmlinuz-virt&lt;br /&gt;
boot/System.map-virt&lt;br /&gt;
boot/config-lts&lt;br /&gt;
boot/initramfs-virt&lt;br /&gt;
boot/modloop-lts&lt;br /&gt;
boot/modloop-virt&lt;br /&gt;
boot/dtbs-lts/&lt;br /&gt;
boot/vmlinuz-lts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;atx&amp;quot; id=&amp;quot;create-an-ipxe-boot-script&amp;quot;&amp;gt;Create an iPXE boot script&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For example, create a script called &amp;lt;code&amp;gt;boot.ipxe&amp;lt;/code&amp;gt; with contents:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#!ipxe&lt;br /&gt;
&lt;br /&gt;
set base-url http://ipxe-boot.example.com&lt;br /&gt;
&lt;br /&gt;
kernel ${base-url}/boot/vmlinuz-virt console=tty0 modules=loop,squashfs quiet nomodeset alpine_repo=https://dl-cdn.alpinelinux.org/alpine/v3.16/main modloop=http://ipxe-boot.example.com/boot/modloop-virt&lt;br /&gt;
initrd ${base-url}/boot/initramfs-virt&lt;br /&gt;
boot&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;atx&amp;quot; id=&amp;quot;boot-using-the-ipxe-boot-script&amp;quot;&amp;gt;Boot using the iPXE boot script&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;atx&amp;quot; id=&amp;quot;using-qemu-for-testing&amp;quot;&amp;gt;Using QEMU (for testing)&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Assuming you have the binary &amp;lt;code&amp;gt;qemu-system-x86_64&amp;lt;/code&amp;gt; on your system:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;qemu-system-x86_64 -boot n -m 512M -enable-kvm -device virtio-net,netdev=n1 -netdev user,id=n1,tftp=$(pwd),bootfile=/boot.ipxe&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;atx&amp;quot; id=&amp;quot;using-libvirt&amp;quot;&amp;gt;Using Libvirt&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Copy the &amp;lt;code&amp;gt;boot.ipxe&amp;lt;/code&amp;gt; script to your webserver at &amp;lt;code&amp;gt;/var/www/ipxe-boot.example.com/boot.ipxe&amp;lt;/code&amp;gt; (substituting for your actual directory, of course).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create a new NAT network with XML such:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;network&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;name&amp;amp;gt;ipxeboot&amp;amp;lt;/name&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;forward mode=&amp;quot;nat&amp;quot;&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;nat&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;port start=&amp;quot;1024&amp;quot; end=&amp;quot;65535&amp;quot;/&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/nat&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;/forward&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;bridge name=&amp;quot;virbr1&amp;quot; stp=&amp;quot;on&amp;quot; delay=&amp;quot;0&amp;quot;/&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;mac address=&amp;quot;52:54:00:a4:10:b3&amp;quot;/&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;domain name=&amp;quot;ipxeboot&amp;quot;/&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;ip address=&amp;quot;192.168.129.1&amp;quot; netmask=&amp;quot;255.255.255.0&amp;quot;&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;dhcp&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;range start=&amp;quot;192.168.129.128&amp;quot; end=&amp;quot;192.168.129.254&amp;quot;/&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;bootp file=&amp;quot;http://ipxe-boot.example.com/boot.ipxe&amp;quot;/&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/dhcp&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;/ip&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/network&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Use &amp;lt;code&amp;gt;virt-install&amp;lt;/code&amp;gt; such as:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;virt-install -n vm-name --memory 512 --vcpus 1 --pxe --disk size=5,bus=virtio --network network=ipxeboot,model=virtio --input tablet --video virtio --os-variant id=http://alpinelinux.org/alpinelinux/3.13&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;atx&amp;quot; id=&amp;quot;on-vultrcom&amp;quot;&amp;gt;On Vultr.com&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;NOTE&amp;lt;/em&amp;gt;: Other cloud providers have similar features, but I haven&#039;t used them.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[https://www.vultr.com/docs/ipxe-boot-feature/ iPXE Boot Feature - Vultr.com]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;atx&amp;quot; id=&amp;quot;see-also&amp;quot;&amp;gt;See Also&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[https://boot.alpinelinux.org/ Alpine linux netboot server]&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Danielfdickinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Netboot_Alpine_Linux_using_iPXE&amp;diff=22068</id>
		<title>Netboot Alpine Linux using iPXE</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Netboot_Alpine_Linux_using_iPXE&amp;diff=22068"/>
		<updated>2022-07-10T05:26:38Z</updated>

		<summary type="html">&lt;p&gt;Danielfdickinson: Add topic &amp;quot;Netboot Alpine Linux using iPXE&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;Copy the files needed by iPXE to a web server&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;For this guide we will provide the files at http://ipxe-boot.example.com/ from the directory &amp;lt;code&amp;gt;/var/www/ixpe-boot.example.com/&amp;lt;/code&amp;gt; on the web server, which is writable by your non-root admin user. We also assume the web server follows symlinks within &amp;lt;code&amp;gt;/var/www/ipxe-boot.example.com&amp;lt;/code&amp;gt; (but not outside that directory tree).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Copy the netboot tarball (for example the [https://dl-cdn.alpinelinux.org/alpine/v3.16/releases/x86_64/alpine-netboot-3.16.0-x86_64.tar.gz 3.16.0 stable release of Alpine&#039;s netboot image for x86_64]) to your non-root admin user on your web server.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Extract the netboot tarball to your webserver directory. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tar -C /var/www/ipxe-boot.example.com -xzf alpine-netboot-3.16.0-x86_64.tar.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;This will create a directory structure such as:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;boot/&lt;br /&gt;
boot/initramfs-lts&lt;br /&gt;
boot/config-virt&lt;br /&gt;
boot/dtbs-virt/&lt;br /&gt;
boot/System.map-lts&lt;br /&gt;
boot/vmlinuz-virt&lt;br /&gt;
boot/System.map-virt&lt;br /&gt;
boot/config-lts&lt;br /&gt;
boot/initramfs-virt&lt;br /&gt;
boot/modloop-lts&lt;br /&gt;
boot/modloop-virt&lt;br /&gt;
boot/dtbs-lts/&lt;br /&gt;
boot/vmlinuz-lts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;atx&amp;quot; id=&amp;quot;create-an-ipxe-boot-script&amp;quot;&amp;gt;Create an iPXE boot script&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For example, create a script called &amp;lt;code&amp;gt;boot.ipxe&amp;lt;/code&amp;gt; with contents:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#!ipxe&lt;br /&gt;
&lt;br /&gt;
set base-url http://ipxe-boot.example.com&lt;br /&gt;
&lt;br /&gt;
kernel ${base-url}/boot/vmlinuz-virt console=tty0 modules=loop,squashfs quiet nomodeset alpine_repo=https://dl-cdn.alpinelinux.org/alpine/v3.16/main modloop=http://ipxe-boot.example.com/boot/modloop-virt&lt;br /&gt;
initrd ${base-url}/boot/initramfs-virt&lt;br /&gt;
boot&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;atx&amp;quot; id=&amp;quot;boot-using-the-ipxe-boot-script&amp;quot;&amp;gt;Boot using the iPXE boot script&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;atx&amp;quot; id=&amp;quot;using-qemu-for-testing&amp;quot;&amp;gt;Using QEMU (for testing)&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Assuming you have the binary &amp;lt;code&amp;gt;qemu-system-x86_64&amp;lt;/code&amp;gt; on your system:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;qemu-system-x86_64 -boot n -m 512M -enable-kvm -device virtio-net,netdev=n1 -netdev user,id=n1,tftp=$(pwd),bootfile=/boot.ipxe&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;atx&amp;quot; id=&amp;quot;using-libvirt&amp;quot;&amp;gt;Using Libvirt&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Copy the &amp;lt;code&amp;gt;boot.ipxe&amp;lt;/code&amp;gt; script to your webserver at &amp;lt;code&amp;gt;/var/www/ipxe-boot.example.com/boot.ipxe&amp;lt;/code&amp;gt; (substituting for your actual directory, of course).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create a new NAT network with XML such:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;network&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;name&amp;amp;gt;ipxeboot&amp;amp;lt;/name&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;forward mode=&amp;quot;nat&amp;quot;&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;nat&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;port start=&amp;quot;1024&amp;quot; end=&amp;quot;65535&amp;quot;/&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/nat&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;/forward&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;bridge name=&amp;quot;virbr1&amp;quot; stp=&amp;quot;on&amp;quot; delay=&amp;quot;0&amp;quot;/&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;mac address=&amp;quot;52:54:00:a4:10:b3&amp;quot;/&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;domain name=&amp;quot;ipxeboot&amp;quot;/&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;ip address=&amp;quot;192.168.129.1&amp;quot; netmask=&amp;quot;255.255.255.0&amp;quot;&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;dhcp&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;range start=&amp;quot;192.168.129.128&amp;quot; end=&amp;quot;192.168.129.254&amp;quot;/&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;bootp file=&amp;quot;http://ipxe-boot.example.com/boot.ipxe&amp;quot;/&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/dhcp&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;/ip&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/network&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Use &amp;lt;code&amp;gt;virt-install&amp;lt;/code&amp;gt; such as:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;virt-install -n vm-name --memory 512 --vcpus 1 --pxe --disk size=5,bus=virtio --network network=ipxeeboot,model=virtio --input tablet --video virtio --os-variant id=http://alpinelinux.org/alpinelinux/3.13&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;atx&amp;quot; id=&amp;quot;on-vultrcom&amp;quot;&amp;gt;On Vultr.com&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;NOTE&amp;lt;/em&amp;gt;: Other cloud providers have similar features, but I haven&#039;t used them.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[https://www.vultr.com/docs/ipxe-boot-feature/ iPXE Boot Feature - Vultr.com]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;atx&amp;quot; id=&amp;quot;see-also&amp;quot;&amp;gt;See Also&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[https://boot.alpinelinux.org/ Alpine linux netboot server]&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Danielfdickinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Testing_modified_install_images_and_packages&amp;diff=22067</id>
		<title>Testing modified install images and packages</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Testing_modified_install_images_and_packages&amp;diff=22067"/>
		<updated>2022-07-10T05:05:03Z</updated>

		<summary type="html">&lt;p&gt;Danielfdickinson: Add new topic &amp;quot;Testing modified install images and packages&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Modifying packages that are part of the install diskless boot (e.g. on install media), or the parameters that can be accepted by the boot process, is a little more involved than modifying individual packages, especially for netboot images. This author discovered that then when working on [https://gitlab.alpinelinux.org/alpine/mkinitfs/-/issues/26 feat: answerfile kernel cmdline parameter (#26) · Issues · alpine / mkinitfs · GitLab] an issue he opened to request / offer to develop an improvement to unattended installation by adding the option of applying a &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; &#039;answerfile&#039; automatically via netboot, by providing a URL to a new &amp;lt;code&amp;gt;answerfile&amp;lt;/code&amp;gt; kernel commandline parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;atx&amp;quot; id=&amp;quot;the-easy-part&amp;quot;&amp;gt;The easy part&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update the list of options accepted by the installer using the kernel command line by modifying [https://gitlab.alpinelinux.org/alpine/mkinitfs mkinitfs] &amp;lt;code&amp;gt;initramfs-init.in&amp;lt;/code&amp;gt; and updating the &amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt; page in &amp;lt;code&amp;gt;mkinitfs-bootparam.7.in&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the new &amp;lt;code&amp;gt;mkinitfs&amp;lt;/code&amp;gt; into one&#039;s build environment using &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;mkinitfs&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Build a new image using &amp;lt;code&amp;gt;scripts/mkimage.sh&amp;lt;/code&amp;gt; from [https://gitlab.alpinelinux.org/alpine/aports aports] with the appropriate parameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You now have an image that will accept your new parameter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;atx&amp;quot; id=&amp;quot;challenge-1&amp;quot;&amp;gt;Challenge #1&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In the case of &amp;lt;code&amp;gt;answerfile&amp;lt;/code&amp;gt; an additional change needs to be make to the &amp;lt;code&amp;gt;firstboot&amp;lt;/code&amp;gt; initscript, which is part of the &amp;lt;code&amp;gt;openrc&amp;lt;/code&amp;gt; package.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;That means building a new &amp;lt;code&amp;gt;openrc&amp;lt;/code&amp;gt; package and getting it into the generated image.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To do that one has to point &amp;lt;code&amp;gt;scripts/mkimage.sh&amp;lt;/code&amp;gt; at the package repository created when building the modified &amp;lt;code&amp;gt;openrc&amp;lt;/code&amp;gt; package.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;This is sufficient for images where all the packages used during boot and install are present on the install media.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;atx&amp;quot; id=&amp;quot;challenge-2-netboot&amp;quot;&amp;gt;Challenge #2 (netboot)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For netboot, however, the process is more involved because the &amp;lt;code&amp;gt;openrc&amp;lt;/code&amp;gt; package has to be downloaded from an external repository during the boot process.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;This would seem easy; one might think you one could just supply put the &amp;lt;code&amp;gt;packages&amp;lt;/code&amp;gt; directory created during the &amp;lt;code&amp;gt;openrc&amp;lt;/code&amp;gt; build on a web server and using the &amp;lt;code&amp;gt;alpine_repo=&amp;amp;lt;URI_of_repo&amp;amp;gt;&amp;lt;/code&amp;gt;, but the problem is that &amp;lt;code&amp;gt;alpine_repo&amp;lt;/code&amp;gt; only accepts a single repository.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In addition the package list must be signed by a key which appears in the image (that part is easy using the &amp;lt;code&amp;gt;mkimage.sh&amp;lt;/code&amp;gt; parameters).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;This means one must have include &amp;lt;em&amp;gt;all&amp;lt;/em&amp;gt; the packages netboot and install will require in the new repository.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There is one more gotcha; One must include all the &amp;lt;em&amp;gt;dependencies&amp;lt;/em&amp;gt; for the packages in the repository or the packages will fail to install.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;atx&amp;quot; id=&amp;quot;one-method-of-creating-the-necessary-signed-repository&amp;quot;&amp;gt;One method of creating the necessary signed repository&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4 class=&amp;quot;atx&amp;quot; id=&amp;quot;identify-all-the-base-packages-needed-by-netboot&amp;quot;&amp;gt;Identify all the base packages needed by netboot&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In the &amp;lt;code&amp;gt;mkinitfs&amp;lt;/code&amp;gt; repository issue &amp;lt;code&amp;gt;grep pkgs initfamfs-init.in&amp;lt;/code&amp;gt; and make note of all the packages that may be used by the initramfs.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In &amp;lt;code&amp;gt;aports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;grep apks scripts/*&amp;lt;/code&amp;gt;. This will identify all base packages added by the &amp;lt;code&amp;gt;mkimage.sh&amp;lt;/code&amp;gt; script.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You also need &amp;lt;code&amp;gt;linux-lts linux-virt wireless-regdb scanelf alpine-conf alpine-base openssl&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h4 class=&amp;quot;atx&amp;quot; id=&amp;quot;identify-all-the-dependencies-of-the-base-packages&amp;quot;&amp;gt;Identify all the dependencies of the base packages&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create a file with the list of base packages on a single line, separated by spaces. For example a file named &amp;lt;code&amp;gt;~/base-packages.lst&amp;lt;/code&amp;gt; containing:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;package1 package2 package3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Install the package &amp;lt;code&amp;gt;lua-aports&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;From a package directory in a package from &amp;lt;code&amp;gt;aports&amp;lt;/code&amp;gt;, issue the following command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ap recursive-deps $(cat ~/base-packages.lst) &amp;amp;gt;~/base-deps.lst&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h4 class=&amp;quot;atx&amp;quot; id=&amp;quot;build-all-required-packages&amp;quot;&amp;gt;Build all required packages&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;h5 class=&amp;quot;atx&amp;quot; id=&amp;quot;create-required-list-of-package-directories-in-aports&amp;quot;&amp;gt;Create required list of package directories in &amp;lt;code&amp;gt;aports&amp;lt;/code&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Take the list of base packages and dependencies above and create a single file with all packages on a single line, separated by spaces. For &amp;lt;code&amp;gt;~/base-deps.lst&amp;lt;/code&amp;gt; above you could do:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat ~/base-deps.lst ~/base-pkgs.lst | tr $&#039;\n&#039; &#039; &#039; &amp;amp;gt;~/oneline-deps.lst&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;From a package directory in a package from &amp;lt;code&amp;gt;aports&amp;lt;/code&amp;gt;, issue the following command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ap builddirs $(cat ~/oneline-deps.lst) &amp;amp;gt;~/packages-to-build.lst&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h5 class=&amp;quot;atx&amp;quot; id=&amp;quot;create-a-directory-for-the-package-repository&amp;quot;&amp;gt;Create a directory for the package repository&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;fenced-code-block language-shell&amp;quot;&amp;gt;mkdir -p ~/packages/main&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h5 class=&amp;quot;atx&amp;quot; id=&amp;quot;add-this-directory-to-the-system-apk-repositories&amp;quot;&amp;gt;Add this directory to the system APK repositories&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;NOTE&amp;lt;/strong&amp;gt;: This will break things if you are not running latest (edge) Alpine in your build environment&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Assuming your user home dir is &amp;lt;code&amp;gt;/home/user&amp;lt;/code&amp;gt;, then to the file &amp;lt;code&amp;gt;/etc/apk/repositories&amp;lt;/code&amp;gt; add&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/home/user/packages/main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h5 class=&amp;quot;atx&amp;quot; id=&amp;quot;build-the-packages&amp;quot;&amp;gt;Build the packages&amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~&lt;br /&gt;
for pdir in $(cat ~/packages-to-build.lst); do (cd $pdir &amp;amp;amp;&amp;amp;amp; abuild -r -m | tee -a ~/build.log); done&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4 class=&amp;quot;atx&amp;quot; id=&amp;quot;build-a-netboot-image&amp;quot;&amp;gt;Build a netboot image&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;From the &amp;lt;code&amp;gt;aports&amp;lt;/code&amp;gt; directory:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./scripts/mkimage.sh --profile netboot --repository /home/user/packages/main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;atx&amp;quot; id=&amp;quot;copy-to-your-netboot-server-and-netboot&amp;quot;&amp;gt;Copy to your netboot server and netboot&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;See [[Netboot Alpine Linux using iPXE]] and adjust paths as necessary.&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Danielfdickinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Developer_Documentation&amp;diff=22066</id>
		<title>Developer Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Developer_Documentation&amp;diff=22066"/>
		<updated>2022-07-10T04:43:11Z</updated>

		<summary type="html">&lt;p&gt;Danielfdickinson: Add a new &amp;#039;misc&amp;#039; topic &amp;quot;Testing modified install images and packages&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:package_system.svg|right|link=]]&lt;br /&gt;
&lt;br /&gt;
== Package management ==&lt;br /&gt;
&amp;lt;!-- If you edit the following, please coordinate with Tutorials_and_Howtos#Post-Install and Installation#Post-Install.  Note that these three sections are not exact duplicates. --&amp;gt;&lt;br /&gt;
* [[Alpine Linux package management|Package Management (apk)]] &#039;&#039;(How to add/remove packages on your Alpine)&#039;&#039; &amp;lt;!-- &lt;br /&gt;
  [[Alpine Linux package management#Local_Cache|How to enable APK caching]] --&amp;gt;  &amp;lt;!-- includes [[Local APK cache]] --&amp;gt;&lt;br /&gt;
** [[Comparison with other distros]]&lt;br /&gt;
** [[apk spec]]&lt;br /&gt;
* [[Repositories#Upgrading_to_edge|Upgrading to Edge]]&lt;br /&gt;
* [[Alpine local backup|Alpine local backup (lbu)]] &#039;&#039;(Permanently store your modifications in case your box needs reboot)&#039;&#039;&lt;br /&gt;
** [[Back Up a Flash Memory Installation]]&lt;br /&gt;
** [[Manually editing a existing apkovl]]&lt;br /&gt;
&amp;lt;!-- [[Replacing a package]] Obsolete? --&amp;gt;&lt;br /&gt;
* [[How to setup a Alpine Linux mirror]]&lt;br /&gt;
* [[How to use xdelta and download only differential update files]]&lt;br /&gt;
* [[How to make a custom ISO image]]&lt;br /&gt;
** [[Burning ISOs]]&lt;br /&gt;
&lt;br /&gt;
== Init system ==&lt;br /&gt;
* [[initramfs init]]&lt;br /&gt;
* [[Alpine Linux Init System|Init System (OpenRC)]] &#039;&#039;(Configure a service to automatically launch at next reboot)&#039;&#039;&lt;br /&gt;
** [[Multiple Instances of Services]]&lt;br /&gt;
* [[Writing Init Scripts]]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
=== Configuring your system ===&lt;br /&gt;
* [[Repositories#Upgrading_to_edge|Upgrading to Edge]] &amp;lt;!-- Pkg and Dev and Installation --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- If you edit the following, please coordinate with Installation#Advanced.  Note that these two sections are not exact duplicates. --&amp;gt;&lt;br /&gt;
* [[Setting up the build environment on HDD]] &amp;lt;!-- Dev and Installation --&amp;gt;&lt;br /&gt;
&amp;lt;!-- [[Setting up the build environment 1.7]] Obsolete, only Dev --&amp;gt;&lt;br /&gt;
** [[Creating_an_Alpine_package#Setup_your_system_and_account|Setup your system and account for building packages]]&lt;br /&gt;
** [[Abuild_and_Helpers#abuild-keygen|Abuild-keygen]]&lt;br /&gt;
&lt;br /&gt;
* [[Installing Alpine Linux in a chroot]] &amp;lt;!-- only Installation --&amp;gt;&lt;br /&gt;
** [[Buildlab]] &#039;&#039;(Tool for creating and managing chroots)&#039;&#039;&lt;br /&gt;
* [[Install Alpine on LXC]]&lt;br /&gt;
* Install Alpine on [[Install Alpine on VirtualBox|VirtualBox]], [[Install Alpine on VMware|VMware]], [[Install Alpine on coLinux|coLinux]], [[Qemu]], &amp;lt;!-- includes [[Install Alpine in Qemu]], [[Running Alpine in Qemu Live mode]], [[Running Alpine Linux As a QEMU networked Guest]] --&amp;gt; or [[Install Alpine on Amazon EC2|Amazon EC2]]&lt;br /&gt;
&lt;br /&gt;
* [[Xen Dom0]] &#039;&#039;(Setting up Alpine as a dom0 for Xen hypervisor)&#039;&#039;&lt;br /&gt;
** [[Xen Dom0 on USB or SD]]&lt;br /&gt;
** [[Create Alpine Linux PV DomU]]&lt;br /&gt;
** [[Xen LiveCD]]&lt;br /&gt;
&lt;br /&gt;
* [[Setting up a basic vserver]] &amp;lt;!-- only Installation --&amp;gt;&lt;br /&gt;
* [[Setting up a compile vserver]] for official or for [[Setting up a compile vserver for third party packages|third party]] packages &amp;lt;!-- Dev and Installation --&amp;gt;&lt;br /&gt;
&amp;lt;!-- [[Create an Alpine 1.9 vserver template]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building from source and creating packages ===&lt;br /&gt;
&lt;br /&gt;
* [[Aports tree]] &amp;lt;!-- &amp;lt;== APKBUILD --&amp;gt;&lt;br /&gt;
* [[Abuild and Helpers]] &#039;&#039;(Scripts for packaging)&#039;&#039;&lt;br /&gt;
  &amp;lt;!-- includes [[Abuild_and_Helpers#apkbuild-cpan|Apkbuild-cpan]] --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- includes [[Abuild_and_Helpers#apkbuild-pypi|Apkbuild-pypi]] --&amp;gt;&lt;br /&gt;
  &amp;lt;!--&lt;br /&gt;
   [[Abuild_and_Helpers#buildrepo|Buildrepo]]&lt;br /&gt;
   [[Abuild_and_Helpers#abuild-sign|Abuild-sign]]&lt;br /&gt;
   [[Abuild_and_Helpers#abuild-tar|Abuild-tar]]&lt;br /&gt;
   [[Abuild_and_Helpers#abump|Abump]]&lt;br /&gt;
   [[Abuild_helpers#apkgrel|Apkgrel]]&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
* [[Creating an Alpine package]]&lt;br /&gt;
  &amp;lt;!-- includes [[Setup your system and account for building packages]] --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- includes [[Newapkbuild]]&lt;br /&gt;
       To create the actual APKBUILD file, newapkbuild can give you a template to start with.&lt;br /&gt;
       It will create a directory with the given package name, place an example/template APKBUILD &lt;br /&gt;
       file to the given directory, and fill some variables if those are provided. --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- includes [[Local_APK_cache]] --&amp;gt;&lt;br /&gt;
** [[Package policies]]&lt;br /&gt;
** [[Package Maintainers]]&lt;br /&gt;
* [[Custom Kernel]]&lt;br /&gt;
* [[APKBUILD Reference]]&lt;br /&gt;
* [[APKBUILD examples]]&lt;br /&gt;
* [[Alpine package format]]&lt;br /&gt;
* [[Apkindex format]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Development using git]] &amp;lt;!-- includes [[Development using git:Configuration]] [[Development using git:Email]] --&amp;gt;&lt;br /&gt;
** [[Development using git:Basic usage|Basic usage]]&lt;br /&gt;
** [[Package Maintainers]]&lt;br /&gt;
** [[Creating patches]]&lt;br /&gt;
** [[Development using git:Developer repositories|Developer repositories]]&lt;br /&gt;
** [[Development using git:Cgit|Cgit]]&lt;br /&gt;
** [[Cgit|Another cgit page]]&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
* [[Alpine Package Testing Suite]] &#039;&#039;work in progress&#039;&#039;&lt;br /&gt;
* [[Alpine Release Testing Checklist]]&lt;br /&gt;
* [[Running glibc programs]]&lt;br /&gt;
* [[Alpine Source Map by boot sequence]]&lt;br /&gt;
* [[Testing modified install images and packages]]&lt;br /&gt;
&lt;br /&gt;
== Alpine Configuration Framework ==&lt;br /&gt;
{{Draft|Needs to be organized/consolidated.}}&lt;br /&gt;
&lt;br /&gt;
* [[Alpine Configuration Framework Design]] (Why ACF is the way it is)&lt;br /&gt;
* [[Writing User Documentation for ACF]]&lt;br /&gt;
* [[ACF mvc.lua reference|mvc.lua reference]] - mvc.lua is the core of ACF &lt;br /&gt;
* [[ACF mvc.lua example|mvc.lua example]] - build a simple (command-line) application &lt;br /&gt;
* [[ACF acf www-controller.lua reference|acf www-controller reference]] - ACF www application functions &lt;br /&gt;
* [[ACF acf www example|acf www-controller example]] - webify the above examples &lt;br /&gt;
* [[ACF how to write]] - Step by step howto for writing acfs &lt;br /&gt;
* [[ACF core principles]] - Things that are standard across the application &lt;br /&gt;
* [[LuaPosix]] - Documentation for the Lua Posix functions &lt;br /&gt;
* [[ACF Libraries]] - Document the libraries and common functions &lt;br /&gt;
* [[Writing ACF Views]] - Guide for writing a view &lt;br /&gt;
* [[Writing ACF Controllers]] - Guide for writing a controller &lt;br /&gt;
* [[Writing ACF Models]] - Guide for writing a model&lt;br /&gt;
&lt;br /&gt;
* [[ACF css]]&lt;br /&gt;
* [[ACF packages]]&lt;br /&gt;
* [[APKBUILD examples:ACF]]&lt;br /&gt;
* [[Apk.lua]]&lt;br /&gt;
* [[Changing passwords for ACF]]&lt;br /&gt;
* [[Generating SSL certs with ACF]]&lt;br /&gt;
* [[Generating SSL certs with ACF 1.9]]&lt;br /&gt;
* [[Getting started with ACF development]]&lt;br /&gt;
* [[Managing ACF]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Alpine-developed Utilities ==&lt;br /&gt;
* [[Alpine Wall]] - [[How-To Alpine Wall]] - [[Alpine Wall User&#039;s Guide]] &#039;&#039;(a new firewall management framework)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Alpine Design Docs ==&lt;br /&gt;
* [[Architecture]]&lt;br /&gt;
* [[File Formats]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Danielfdickinson</name></author>
	</entry>
</feed>