<?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=Innsill</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=Innsill"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Innsill"/>
	<updated>2026-05-02T08:10:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:FAQ&amp;diff=18858</id>
		<title>Alpine Linux:FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:FAQ&amp;diff=18858"/>
		<updated>2021-04-20T15:24:21Z</updated>

		<summary type="html">&lt;p&gt;Innsill: /* Where to start? */  + https://distrotest.net/AlpineLinux/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:filetypes.svg|64px|left|link=]]&lt;br /&gt;
This is a list of &#039;&#039;&#039;frequently asked questions&#039;&#039;&#039; about Alpine Linux.&amp;lt;br&amp;gt;&lt;br /&gt;
If your question is not answered on this page, use the search box above to find work in progress pages not linked here, or in case of no answer, edit this page and write down your question.&lt;br /&gt;
{{Tip| Prepare your question. Think it through. Make it simple and understandable.}} &lt;br /&gt;
&lt;br /&gt;
=General=&lt;br /&gt;
&lt;br /&gt;
Alpine Linux is used heavily in containers (e.g. docker images) on servers, so many of its main packages are focused on server services.&lt;br /&gt;
&lt;br /&gt;
== Where to start? ==&lt;br /&gt;
&lt;br /&gt;
The «[[Installation|Installation page]]» provides a basic orientation.&lt;br /&gt;
&lt;br /&gt;
A broader overview may be found on the official «[http://alpinelinux.org/about About page]», and at the «[[Alpine Linux:Overview|Wiki Overview]]».&lt;br /&gt;
&lt;br /&gt;
Please note that testing is safer on your own virtual machine or on a public «[https://distrotest.net/AlpineLinux/ DistroTest.net]».&lt;br /&gt;
&lt;br /&gt;
== I have found a bug, where can I report it? ==&lt;br /&gt;
&lt;br /&gt;
You can report it in the [https://gitlab.alpinelinux.org/groups/alpine/-/issues bugtracker], but search it first to see if the issue has already been reported.&lt;br /&gt;
&lt;br /&gt;
== Are there any details about the releases available? ==&lt;br /&gt;
Yes, please check the [https://alpinelinux.org/releases/ releases] page.&lt;br /&gt;
&lt;br /&gt;
== How can I contribute? ==&lt;br /&gt;
You can contribute by:&lt;br /&gt;
* Using the software and giving feedback.&lt;br /&gt;
* Documenting your [http://www.alpinelinux.org Alpine Linux] experiences on this [[Main_Page|wiki]].&lt;br /&gt;
* In many other ways.&lt;br /&gt;
Please visit [[Contribute|Contribute page]] to read more about this topic.&lt;br /&gt;
&lt;br /&gt;
== Why don&#039;t I have man pages or where is the &#039;man&#039; command? ==&lt;br /&gt;
The &#039;&#039;man&#039;&#039; command and &#039;&#039;man pages&#039;&#039; are not installed by default. Many packages have documentation companion packages suffixed &#039;&#039;-doc&#039;&#039;. Keep in mind, not all packages have a corresponding documentation package and when there is one it may not include &#039;&#039;man pages&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To install the &#039;&#039;man&#039;&#039; command, and related utilities, first add the {{pkg|man-db}} package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk add man-db&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once installed, add documentation for the package where you need it. For example, say you installed {{pkg|nftables}} and you now require its man pages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk add nftables-doc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ve installed &#039;&#039;nft(8)&#039;&#039; and [https://pkgs.alpinelinux.org/contents?branch=edge&amp;amp;name=nftables-doc&amp;amp;arch=x86_64&amp;amp;repo=main other documentation] to our system and you can issue the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;man nft&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To allways install the documentation companion package, when available, add the {{pkg|docs}} meta package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk add docs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is the difference between edge and stable releases? ==&lt;br /&gt;
Stable releases are just what they sound like: initially a point-in-time snapshot of the package archives, but then maintained with bug-fixes only in order to keep a stable environment.&lt;br /&gt;
&lt;br /&gt;
[[Edge]] is more of a rolling-release, with the latest and greatest packages available in the online repositories.&amp;lt;br&amp;gt;&lt;br /&gt;
Occasionally, snapshot ISO images of the then-current state of [[edge]] are made and are available for download.&amp;lt;br&amp;gt;&lt;br /&gt;
Typically these are made when there are major kernel upgrades or package upgrades that require initramfs rebuilds.&lt;br /&gt;
&lt;br /&gt;
== What architectures does Alpine support? ==&lt;br /&gt;
As Alpine uses the Linux kernel, it supports:&lt;br /&gt;
* &#039;&#039;&#039;aarch64&#039;&#039;&#039;: The 64-bit only ARM execution state of the ARMv8 device machines.&lt;br /&gt;
* &#039;&#039;&#039;armhf&#039;&#039;&#039;: The newer ARM hard-float for newer, more powerful 32-bit devices alongside 64-bit&lt;br /&gt;
* &#039;&#039;&#039;armv7&#039;&#039;&#039;: The 32-bit only ARM execution state of the ARMv7 devices machines.&lt;br /&gt;
* &#039;&#039;&#039;mips64&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;s390x&#039;&#039;&#039;: For the Super powered IBM mainframes, especially IBM Z and IBM LinuxONE servers.&lt;br /&gt;
* &#039;&#039;&#039;ppc64le&#039;&#039;&#039;: For 64-bit PowerPC devices with pure little-endian mode, mostly for POWER8 and POWER9&lt;br /&gt;
* &#039;&#039;&#039;x86&#039;&#039;&#039;: (i386, PC 32bit) and x86_64 (i686, PC 64bit and amd64)&lt;br /&gt;
* &#039;&#039;&#039;x86_64&#039;&#039;&#039;: The popular AMD64 compatible 64-bit x86 based machines, i386 is not recommended for newer/latest hardware.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please check [https://alpinelinux.org/downloads Download] page for media availability on each one&#039;&#039;&#039; and check [[Alpine_Linux:Releases|Releases]] pages for latest.&lt;br /&gt;
&lt;br /&gt;
== What kind of release of Alpine Linux are available? ==&lt;br /&gt;
Please check the [https://alpinelinux.org/releases/ Releases] page for more information.&lt;br /&gt;
&lt;br /&gt;
=Setup=&lt;br /&gt;
&lt;br /&gt;
== What is the difference between &#039;&#039;sys&#039;&#039;, &#039;&#039;data&#039;&#039;, and &#039;&#039;diskless&#039;&#039; when running &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sys:&#039;&#039;&#039; This mode is a traditional disk install. The following partitions will be created on the disk: &#039;&#039;/boot/&#039;&#039;, &#039;&#039;/&#039;&#039; (filesystem root) and &#039;&#039;swap&#039;&#039;.&lt;br /&gt;
This mode may be used for development boxes, desktops, virtual servers, etc.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;data:&#039;&#039;&#039; This mode uses your disk(s) for data storage, not for the operating system. Runs from the media and only a &#039;&#039;/var/&#039;&#039; is created on disk.  The system itself will run from a &#039;&#039;tmpfs&#039;&#039; (RAM).  Use this mode if you only want to use the disk(s) for data, like &#039;&#039;mailspool&#039;&#039;, &#039;&#039;databases&#039;&#039;, &#039;&#039;logs&#039;&#039;, etc.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;diskless:&#039;&#039;&#039; No disks are to be used.  [[Alpine local backup]] may still be used in this mode.&lt;br /&gt;
&lt;br /&gt;
These modes are explained further [[Installation#Installation_Overview|on the &#039;&#039;&#039;Installation&#039;&#039;&#039; page]].&lt;br /&gt;
&lt;br /&gt;
== How do I upgrade Alpine? ==&lt;br /&gt;
&lt;br /&gt;
To upgrade to a new stable release or edge:&lt;br /&gt;
&amp;lt;code&amp;gt;apk upgrade --available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==My cron jobs don&#039;t run?==&lt;br /&gt;
&lt;br /&gt;
Start service &#039;&#039;crond&#039;&#039; and add it to runlevel:&lt;br /&gt;
&lt;br /&gt;
: {{cmd|rc-service crond start &amp;amp;&amp;amp; rc-update add crond}}&lt;br /&gt;
&lt;br /&gt;
After that the cron daemon is started automatically on system boot and executes the scripts placed in the folders under &#039;&#039;/etc/periodic/&#039;&#039; - there&#039;re folders for &#039;&#039;15min&#039;&#039;, &#039;&#039;hourly&#039;&#039;, &#039;&#039;daily&#039;&#039;, &#039;&#039;weekly&#039;&#039; and &#039;&#039;monthly&#039;&#039; scripts.&lt;br /&gt;
&lt;br /&gt;
To check whether your scripts are likely to run, use the &#039;&#039;run-parts&#039;&#039; command, for example:&lt;br /&gt;
&lt;br /&gt;
{{cmd|run-parts --test /etc/periodic/15min}}&lt;br /&gt;
&lt;br /&gt;
This command will tell you what should run but will not actually execute the scripts.&lt;br /&gt;
&lt;br /&gt;
If the results of the test are not as expected, check the following:&lt;br /&gt;
&lt;br /&gt;
* Make sure the script is executable - if unsure, issue the command {{cmd|chmod a+x /etc/periodic/[path/scriptname]}}&lt;br /&gt;
* Make sure the first line of your script is &amp;lt;code&amp;gt;#!/bin/sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* Do not use periods on your script file names - this stops them from working; for example: &amp;lt;code&amp;gt;/etc/periodic/daily/myscript&amp;lt;/code&amp;gt; will run, but &amp;lt;code&amp;gt;/etc/periodic/daildy/myscript.sh&amp;lt;/code&amp;gt; won&#039;t.&lt;br /&gt;
&lt;br /&gt;
= Time and timezones =&lt;br /&gt;
&lt;br /&gt;
== How do I set the local timezone? ==&lt;br /&gt;
&lt;br /&gt;
If you wish to edit the &#039;&#039;timezone&#039;&#039; (TZ) after installation, run the [[Alpine_setup_scripts#setup-timezone|setup-timezone]] script.&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
== Can you build an apk package for ...? ==&lt;br /&gt;
Yes, we probably can.&amp;lt;br&amp;gt;&lt;br /&gt;
Please create an [https://gitlab.alpinelinux.org/alpine/aports/issues/new issue] in the [https://gitlab.alpinelinux.org bugtracker]. Prefix with &amp;quot;feat&amp;quot; in title and include a short description (one-line), an URL for the home page, and an URL for the source package.&lt;br /&gt;
&lt;br /&gt;
== How can I build my own package? ==&lt;br /&gt;
Please see the [[Creating an Alpine package]] page.&lt;br /&gt;
&lt;br /&gt;
== What does &amp;quot;required by: world[$pkgname]&amp;quot; mean? ==&lt;br /&gt;
&lt;br /&gt;
It means that the package you try to install does not exist in the repositories you have configured.&lt;br /&gt;
&lt;br /&gt;
Maybe you forgot to add community, testing or unmaintained to &#039;&#039;/etc/apk/repositories&#039;&#039;? &lt;br /&gt;
&lt;br /&gt;
Or is the package in a [[Alpine_Linux_package_management#Repository_pinning|pinned repository]] and you forgot to suffix the package with the repo tag? Example:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add experimental-package@testing}}&lt;br /&gt;
&lt;br /&gt;
== How can I find out if a certain package exists in Alpine? ==&lt;br /&gt;
&lt;br /&gt;
If you want to only search repositories you have configured in /etc/apk/repositories, then &amp;lt;code&amp;gt;apk search $pkgname&amp;lt;/code&amp;gt; should get you sorted. If you want to search all repositories have a look at the [https://pkgs.alpinelinux.org/ online pkg oracle]&lt;br /&gt;
&lt;br /&gt;
== WARNING: Ignoring APKINDEX.xxxx.tar.gz ==&lt;br /&gt;
If you get &amp;lt;code&amp;gt;WARNING: Ignoring APKINDEX.xxxx.tar.gz: No such file or directory&amp;lt;/code&amp;gt; while running [[Alpine_Linux_package_management|package related tools]], check your &#039;&#039;/etc/apk/repositories&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
To check the content of the repositories file&lt;br /&gt;
{{Cmd|cat /etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
{{Cmd|setup-apkrepos}}&lt;br /&gt;
&lt;br /&gt;
= Dynamic DNS =&lt;br /&gt;
== How do I schedule a regular dynamic DNS update? ==&lt;br /&gt;
You&#039;ll want to install the {{pkg|ez-ipupdate}} package:&lt;br /&gt;
{{cmd|apk add ez-ipupdate}}&lt;br /&gt;
&lt;br /&gt;
After that, create a new file at {{path|/etc/ez-ipupdate.conf}} with contents similar to:&lt;br /&gt;
 service-type=dyndns&lt;br /&gt;
 user=myusername:mypassword&lt;br /&gt;
 interface=eth1&lt;br /&gt;
 host=myhostname.dyndns.org&lt;br /&gt;
&lt;br /&gt;
Make the new ip cache directory:&lt;br /&gt;
{{cmd|mkdir /var/cache/ez-ipupdate&lt;br /&gt;
lbu add /var/cache/ez-ipupdate}}&lt;br /&gt;
&lt;br /&gt;
Then schedule a new cron job with this command:&lt;br /&gt;
{{cmd|echo &amp;gt;&amp;gt; /var/log/ez-ipupdate &amp;amp;&amp;amp; \&amp;lt;br&amp;gt;/bin/date &amp;gt;&amp;gt; /var/log/ez-ipupdate &amp;amp;&amp;amp; \&amp;lt;br&amp;gt;ez-ipupdate --config-file /etc/ez-ipupdate.conf -f -F /var/run/ez-ipupdate.pid \&amp;lt;br&amp;gt;  --cache-file /var/cache/ez-ipupdate/ipcache --quiet &amp;gt;&amp;gt; /var/log/ez-ipupdate 2&amp;gt;&amp;amp;1}}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to backup your settings!&lt;br /&gt;
{{cmd|lbu ci}}&lt;br /&gt;
&lt;br /&gt;
= Terminal =&lt;br /&gt;
&lt;br /&gt;
== How to enable/fix colors for git? ==&lt;br /&gt;
&lt;br /&gt;
The problem is not in git itself or terminal, but in the &amp;lt;tt&amp;gt;less&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
Busybox’s &amp;lt;tt&amp;gt;less&amp;lt;/tt&amp;gt; doesn’t support &amp;lt;tt&amp;gt;-r&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;--raw-control-chars&amp;lt;/tt&amp;gt;) and &amp;lt;tt&amp;gt;-R&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;--RAW-CONTROL-CHARS&amp;lt;/tt&amp;gt;) options.&lt;br /&gt;
&lt;br /&gt;
The simplest (yet not ideal) solution is to install GNU less:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add less}}&lt;br /&gt;
&lt;br /&gt;
= Old questions, no longer freqently asked =&lt;br /&gt;
&lt;br /&gt;
== Alpine freezes during boot from Compact Flash, how can I fix? ==&lt;br /&gt;
Most Compact Flash card readers do not support proper DMA.&amp;lt;br&amp;gt;&lt;br /&gt;
You should append &#039;&#039;&#039;nodma&#039;&#039;&#039; to the &#039;&#039;append&#039;&#039; line in {{path|syslinux.cfg}}.&lt;br /&gt;
&lt;br /&gt;
== How do I remove the CDROM? ==&lt;br /&gt;
Since the modloop loopback device is on CDROM you cannot just run &amp;lt;code&amp;gt;eject&amp;lt;/code&amp;gt;. You need to unmount the modloop first.&amp;lt;br&amp;gt;&lt;br /&gt;
Unmounting both the modloop and the CDROM in one step can be done by executing:&lt;br /&gt;
{{Cmd|/etc/init.d/modloop stop}}&lt;br /&gt;
&lt;br /&gt;
Then it&#039;s possible to eject the CDROM:&lt;br /&gt;
{{Cmd|eject}}&lt;br /&gt;
&lt;br /&gt;
== How can I install a custom firmware in a diskless system? ==&lt;br /&gt;
&lt;br /&gt;
The modules and firmware are both special images which are mounted as read-only.&amp;lt;br&amp;gt;&lt;br /&gt;
To fix this issue you can copy the firmware directory to your writeable media (cf/usb) and copy your custom firmware to it.&amp;lt;br&amp;gt;&lt;br /&gt;
After reboot Alpine should automatically use the directory on your local storage instead of the loopback device.&lt;br /&gt;
&lt;br /&gt;
== How do I play my .ogg/.mp3 files? ==&lt;br /&gt;
First, the sound card should be recognized (you must have {{path|/dev/snd/*****}} files)&lt;br /&gt;
&lt;br /&gt;
{{pkg|sox}}, {{pkg|mpg123}}, etc all use the oss sound driver, while Alpine uses ALSA drivers.&amp;lt;br&amp;gt;&lt;br /&gt;
So you need to load the snd-pcm-oss compatibility module.&amp;lt;br&amp;gt;&lt;br /&gt;
While you&#039;re at it, you might need {{pkg|aumix}} to turn up the sound volume&lt;br /&gt;
{{cmd|echo snd-pcm-oss &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
modprobe snd-pcm-oss &lt;br /&gt;
apk_add aumix sox&lt;br /&gt;
aumix (set volume settings)&lt;br /&gt;
play really_cool_song.mp3}}&lt;br /&gt;
&lt;br /&gt;
== OpenNTPD reports an error with &amp;quot;adjtime&amp;quot; ==&lt;br /&gt;
Your log contains something like:&lt;br /&gt;
 reply from 85.214.86.126: offset 865033148.784255 delay 0.055466, next query 32s&lt;br /&gt;
 reply from 202.150.212.24: offset 865033148.779314 delay 0.400771, next query 3s&lt;br /&gt;
 adjusting local clock by 865033148.779835s                                      &lt;br /&gt;
 adjtime failed: Invalid argument    &lt;br /&gt;
&lt;br /&gt;
{{pkg|openntpd}} is supposed to make small adjustments in the time without causing time jumps.&amp;lt;br&amp;gt;&lt;br /&gt;
If the adjustment is too big then something is clearly wrong and ntpd gives up. (its actually adjtime(3) that has a limit on how big adjustments are allowed)&lt;br /&gt;
&lt;br /&gt;
You can make ntpd set the time at startup by adding &#039;&#039;-s&#039;&#039; option to ntpd. This is done by setting &#039;&#039;&#039;NTPD_OPTS=&amp;quot;-s&amp;quot;&#039;&#039;&#039; in {{path|/etc/conf.d/ntpd}}.&lt;br /&gt;
&lt;br /&gt;
== Using a cron job to keep the time in sync ==&lt;br /&gt;
Add the following to {{path|/etc/periodic/daily}} (or use another folder under the {{path|/etc/periodic}} heirarchy if you want to run the script more/less frequently)&lt;br /&gt;
&lt;br /&gt;
Example: file called {{path|do-ntp}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ntpd -d -q -n -p uk.pool.ntp.org&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This queries the uk time server pool - you can modify this to suit your localisation, or just use &#039;&#039;pool.ntp.org&#039;&#039;. More info here: [http://www.pool.ntp.org/zone/@ http://www.pool.ntp.org/zone/@]&lt;br /&gt;
&lt;br /&gt;
== Windows clients reports an error when trying to sync ==&lt;br /&gt;
{{pkg|openntpd}} needs to run for a while before it is satisfied it is in sync.&lt;br /&gt;
Until then it will set a flag &amp;quot;clock not synchronized&amp;quot; and Windows will report an error while trying to sync with your {{pkg|openntpd}} server.&lt;br /&gt;
&lt;br /&gt;
Only thing to do is wait, do something else for 15-20mins and then check.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Newbie]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Flatpak&amp;diff=16681</id>
		<title>Flatpak</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Flatpak&amp;diff=16681"/>
		<updated>2019-11-19T09:25:18Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Flatpak is a technology for building and distributing desktop applications on GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
There are currently 3 main [[runtime]]s available: &lt;br /&gt;
* [http://docs.flatpak.org/en/latest/available-runtimes.html Freedesktop]&lt;br /&gt;
** [[GNOME]] (based on the Freedesktop runtime)&lt;br /&gt;
** [[KDE]] (based on the Freedesktop runtime)&lt;br /&gt;
These are all hosted on [https://flathub.org/ Flathub.org].&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://flatpak.org/ flatpak.org]&lt;br /&gt;
* [https://flatpak.org/setup/Alpine/ Alpine Quick Setup. Follow these simple steps to start using Flatpak]&lt;br /&gt;
* [http://docs.flatpak.org/en/latest/using-flatpak.html#the-flatpak-command The flatpak command]&lt;br /&gt;
* [https://blogs.gnome.org/alexl/2018/06/20/flatpak-a-history/ Flatpak – a history] Alexander Larsson 2018&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://winepak.org/ winepak.org]&lt;br /&gt;
* [http://archive.is/BzBfV How to Easily Install Windows Games on Linux with Winepak] Nick Congleton 2018&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://unix.stackexchange.com/questions/487787/why-os-needs-explicit-support-for-musl Why OS needs explicit support for musl?] Stephen Kitt 2018&lt;br /&gt;
&lt;br /&gt;
[[Category:Flatpak]]&lt;br /&gt;
[[category: desktop]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16680</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16680"/>
		<updated>2019-11-19T08:32:48Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /dev/sda               /dev/nvme0n1  &lt;br /&gt;
  (old bios bootable)    (m.2 PCIe NVMe, unbootable)&lt;br /&gt;
  +-------------------+  +-------------------+&lt;br /&gt;
  |  *--------------+ |  |  +--------------+ |&lt;br /&gt;
  |  | /boot        | |  |  | swap         | |&lt;br /&gt;
  |  +--------------+ |  |  +--------------+ |&lt;br /&gt;
  +-------------------+  |  +--------------+ |&lt;br /&gt;
                         |  |  /           | |&lt;br /&gt;
                         |  +--------------+ |&lt;br /&gt;
                         +-------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://alpinelinux.org/downloads/ alpine-extended-3.10.3-x86_64.iso]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= setup-alpine =&lt;br /&gt;
&#039;&#039;&#039;{{c| setup-alpine}}&#039;&#039;&#039;    ...none, none, none,...&lt;br /&gt;
&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= setup-disk =&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; &#039;&#039;&#039;{{c| setup-disk /mnt}}&#039;&#039;&#039;&lt;br /&gt;
* {{c| mount /dev/ /mnt/dev/ --bind}} &amp;lt;/br&amp;gt; {{c| mount -t proc none /mnt/proc}} &amp;lt;/br&amp;gt; {{c| mount -o bind /sys /mnt/sys}} &amp;lt;/br&amp;gt; chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
echo &amp;quot;ff  ALL = (ALL) NOPASSWD: /usr/sbin/hdparm -Y /dev/sda&amp;quot; &amp;gt;&amp;gt; /etc/sudoers.d/ff&lt;br /&gt;
&lt;br /&gt;
chmod 400 /etc/sudoers.d/ff&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;sudo hdparm -Y /dev/sda&amp;quot; &amp;gt;&amp;gt; /home/ff/.profile&lt;br /&gt;
&lt;br /&gt;
= X ??? =&lt;br /&gt;
* {{c| X -configure}}&lt;br /&gt;
** {{c| vi xorg.conf.new}}&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier  &amp;quot;Card0&amp;quot;&lt;br /&gt;
        Driver      &amp;quot;[[amdgpu]]&amp;quot;&lt;br /&gt;
        BusID       &amp;quot;PCI:0:17:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
$vi .xinitrc {{cat |/home/ff/.xinitrc |&amp;lt;nowiki&amp;gt;setxkbmap ... &amp;amp;&lt;br /&gt;
exec dvm&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;br /&gt;
* [[dwm]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/omxplayer-starter_(amdhf)&amp;diff=16677</id>
		<title>User:Innsill/omxplayer-starter (amdhf)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/omxplayer-starter_(amdhf)&amp;diff=16677"/>
		<updated>2019-11-17T16:21:17Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Warning| &lt;br /&gt;
Be careful !&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Spy backdoors China/Huawei&amp;lt;/s&amp;gt; !&amp;lt;/br&amp;gt;&lt;br /&gt;
Spy backdoors USA/Microsoft: &#039;&#039;[http://archive.fo/caysY#selection-691.152-697.117 Archive], [https://ownyourbits.com/2019/02/02/whats-wrong-with-the-raspberry-pi/ Source], [https://en.wikipedia.org/wiki/ThreadX#Products_Using_ThreadX ThreadX]&#039;&#039; }}&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br/&amp;gt;https://alpinelinux.org/downloads/&lt;br /&gt;
#* alpine-rpi-3.10.3-armhf.tar.gz&lt;br /&gt;
#* alpine-rpi-3.10.3-armhf.tar.gz.sha256&lt;br /&gt;
#** sha256sum --check {{c |alpine-rpi-3.10.3-armhf.tar.gz.sha256}}&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt; find / -name setup* -print | sort&lt;br /&gt;
#* setup-alpine&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt; [https://pkgs.alpinelinux.org/contents?file=omxplayer&amp;amp;path=&amp;amp;name=&amp;amp;branch=v3.10&amp;amp;arch=armhf omxplayer ?]&lt;br /&gt;
#* vi {{c |/etc/apk/repositories}}&lt;br /&gt;
#* apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
#* apk add omxplayer&lt;br /&gt;
# &amp;lt;/br&amp;gt; vi {{c| /etc/inittab}} {{cat |/etc/inittab |&amp;lt;nowiki&amp;gt;tty1::respawn:/bin/login -f root&lt;br /&gt;
tty2::respawn:/sbin/getty 38400 tty2&lt;br /&gt;
#tty3::respawn:/sbin/getty 38400 tty3 &amp;lt;/nowiki&amp;gt;}} &amp;lt;/br&amp;gt; vi {{c| .profile}} {{cat |/root/.profile |&amp;lt;nowiki&amp;gt;mount /dev/sda1 /mnt&lt;br /&gt;
mount /dev/sda /mnt&lt;br /&gt;
cd /mnt&lt;br /&gt;
VIDEO=$( ls | sort )&lt;br /&gt;
for i in $VIDEO&lt;br /&gt;
        do&lt;br /&gt;
        omxplayer $i&lt;br /&gt;
        done&amp;lt;/nowiki&amp;gt;}} &amp;lt;/br&amp;gt; lbu include /root/.profile &amp;lt;/br&amp;gt; lbu commit&lt;br /&gt;
= =&lt;br /&gt;
* [https://elinux.org/Omxplayer Omxplayer] eLinux.org&lt;br /&gt;
* [https://www.raspberrypi.org/documentation/raspbian/applications/omxplayer.md OMXPlayer: An accelerated command line media player] raspberrypi.org&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/omxplayer-starter_(amdhf)&amp;diff=16663</id>
		<title>User:Innsill/omxplayer-starter (amdhf)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/omxplayer-starter_(amdhf)&amp;diff=16663"/>
		<updated>2019-11-13T09:58:35Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Warning| &lt;br /&gt;
Be careful !&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Spy backdoors China/Huawei&amp;lt;/s&amp;gt; !&amp;lt;/br&amp;gt;&lt;br /&gt;
Spy backdoors USA/Microsoft: &#039;&#039;[http://archive.fo/caysY#selection-691.152-697.117 Archive], [https://ownyourbits.com/2019/02/02/whats-wrong-with-the-raspberry-pi/ Source], [https://en.wikipedia.org/wiki/ThreadX#Products_Using_ThreadX ThreadX]&#039;&#039; }}&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br/&amp;gt;https://alpinelinux.org/downloads/&lt;br /&gt;
#* alpine-rpi-3.10.3-armhf.tar.gz&lt;br /&gt;
#* alpine-rpi-3.10.3-armhf.tar.gz.sha256&lt;br /&gt;
#** sha256sum --check {{c |alpine-rpi-3.10.3-armhf.tar.gz.sha256}}&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt; find / -name setup* -print | sort&lt;br /&gt;
#* setup-alpine&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt; [https://pkgs.alpinelinux.org/contents?file=omxplayer&amp;amp;path=&amp;amp;name=&amp;amp;branch=v3.10&amp;amp;arch=armhf omxplayer ?]&lt;br /&gt;
#* vi {{c |/etc/apk/repositories}}&lt;br /&gt;
#* apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
#* apk add omxplayer&lt;br /&gt;
# &amp;lt;/br&amp;gt; vi {{c| /etc/inittab}} {{cat |/etc/inittab |&amp;lt;nowiki&amp;gt;tty1::respawn:/bin/login -f root&lt;br /&gt;
tty2::respawn:/sbin/getty 38400 tty2&lt;br /&gt;
#tty3::respawn:/sbin/getty 38400 tty3 &amp;lt;/nowiki&amp;gt;}} &amp;lt;/br&amp;gt; vi {{c| .profile}} {{cat |/root/.profile |&amp;lt;nowiki&amp;gt;mount /dev/sda1 /mnt&lt;br /&gt;
cd /mnt&lt;br /&gt;
VIDEO=$( ls | sort )&lt;br /&gt;
for i in $VIDEO&lt;br /&gt;
        do&lt;br /&gt;
        omxplayer $i&lt;br /&gt;
        done&amp;lt;/nowiki&amp;gt;}} &amp;lt;/br&amp;gt; lbu include /root/.profile &amp;lt;/br&amp;gt; lbu commit&lt;br /&gt;
= =&lt;br /&gt;
* [https://elinux.org/Omxplayer Omxplayer] eLinux.org&lt;br /&gt;
* [https://www.raspberrypi.org/documentation/raspbian/applications/omxplayer.md OMXPlayer: An accelerated command line media player] raspberrypi.org&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/omxplayer-starter_(amdhf)&amp;diff=16659</id>
		<title>User:Innsill/omxplayer-starter (amdhf)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/omxplayer-starter_(amdhf)&amp;diff=16659"/>
		<updated>2019-11-12T11:09:38Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Warning| &lt;br /&gt;
Be careful !&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Spy backdoors China/Huawei&amp;lt;/s&amp;gt; !&amp;lt;/br&amp;gt;&lt;br /&gt;
Spy backdoors USA/Microsoft: &#039;&#039;[http://archive.fo/caysY#selection-691.152-697.117 Archive], [https://ownyourbits.com/2019/02/02/whats-wrong-with-the-raspberry-pi/ Source], [https://en.wikipedia.org/wiki/ThreadX#Products_Using_ThreadX ThreadX]&#039;&#039; }}&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br/&amp;gt;https://alpinelinux.org/downloads/&lt;br /&gt;
#* alpine-rpi-3.10.3-armhf.tar.gz&lt;br /&gt;
#* alpine-rpi-3.10.3-armhf.tar.gz.sha256&lt;br /&gt;
#** sha256sum --check {{c |alpine-rpi-3.10.3-armhf.tar.gz.sha256}}&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt; find / -name setup* -print | sort&lt;br /&gt;
#* setup-alpine&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt; [https://pkgs.alpinelinux.org/contents?file=omxplayer&amp;amp;path=&amp;amp;name=&amp;amp;branch=v3.10&amp;amp;arch=armhf omxplayer ?]&lt;br /&gt;
#* vi {{c |/etc/apk/repositories}}&lt;br /&gt;
#* apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
#* apk add omxplayer&lt;br /&gt;
# &amp;lt;/br&amp;gt; vi {{c| /etc/inittab}} {{cat |/etc/inittab |&amp;lt;nowiki&amp;gt;tty1::respawn:/bin/login -f root&lt;br /&gt;
tty2::respawn:/sbin/getty 38400 tty2&lt;br /&gt;
#tty3::respawn:/sbin/getty 38400 tty3 &amp;lt;/nowiki&amp;gt;}} &amp;lt;/br&amp;gt; vi {{c| .profile}} {{cat |/root/.profile |&amp;lt;nowiki&amp;gt;mount /dev/sda1 /mnt&lt;br /&gt;
omxplayer /mnt/video&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://elinux.org/Omxplayer Omxplayer] eLinux.org&lt;br /&gt;
* [https://www.raspberrypi.org/documentation/raspbian/applications/omxplayer.md OMXPlayer: An accelerated command line media player] raspberrypi.org&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/omxplayer-starter_(amdhf)&amp;diff=16658</id>
		<title>User:Innsill/omxplayer-starter (amdhf)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/omxplayer-starter_(amdhf)&amp;diff=16658"/>
		<updated>2019-11-12T11:02:49Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Warning| &lt;br /&gt;
Be careful !&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Spy backdoors China/Huawei&amp;lt;/s&amp;gt; !&amp;lt;/br&amp;gt;&lt;br /&gt;
Spy backdoors USA/Microsoft: &#039;&#039;[http://archive.fo/caysY#selection-691.152-697.117 Archive], [https://ownyourbits.com/2019/02/02/whats-wrong-with-the-raspberry-pi/ Source], [https://en.wikipedia.org/wiki/ThreadX#Products_Using_ThreadX ThreadX]&#039;&#039; }}&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br/&amp;gt;https://alpinelinux.org/downloads/&lt;br /&gt;
#* alpine-rpi-3.10.3-armhf.tar.gz&lt;br /&gt;
#* alpine-rpi-3.10.3-armhf.tar.gz.sha256&lt;br /&gt;
#** sha256sum --check alpine-rpi-3.10.3-armhf.tar.gz.sha256&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt; find / -name setup* -print | sort&lt;br /&gt;
#* setup-alpine&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt; [https://pkgs.alpinelinux.org/contents?file=omxplayer&amp;amp;path=&amp;amp;name=&amp;amp;branch=v3.10&amp;amp;arch=armhf omxplayer ?]&lt;br /&gt;
#* vi /etc/apk/repositories&lt;br /&gt;
#* apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
#* apk add omxplayer&lt;br /&gt;
# &amp;lt;/br&amp;gt; vi {{c| /etc/inittab}} {{cat |/etc/inittab |&amp;lt;nowiki&amp;gt;tty1::respawn:/bin/login -f root&lt;br /&gt;
tty2::respawn:/sbin/getty 38400 tty2&lt;br /&gt;
#tty3::respawn:/sbin/getty 38400 tty3 &amp;lt;/nowiki&amp;gt;}} &amp;lt;/br&amp;gt; $vi {{c| .profile}} {{cat |/root/.profile |&amp;lt;nowiki&amp;gt;mount /dev/sda1 /mnt&lt;br /&gt;
omxplayer /mnt/video&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://elinux.org/Omxplayer Omxplayer] eLinux.org&lt;br /&gt;
* [https://www.raspberrypi.org/documentation/raspbian/applications/omxplayer.md OMXPlayer: An accelerated command line media player] raspberrypi.org&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill&amp;diff=16657</id>
		<title>User:Innsill</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill&amp;diff=16657"/>
		<updated>2019-11-11T08:28:56Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Special: UncategorizedPages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Innsill/firefox-starter (x86-64 ) |firefox-starter (x86-64)]] -- PC&lt;br /&gt;
* [[User:Innsill/omxplayer-starter (amdhf) |omxplayer-starter (amdhf)]] -- Raspberry-2&lt;br /&gt;
* [[User:Innsill/dwm-starter (aarch64)     |dwm-starter (aarch64)]] -- Odroid-C2&lt;br /&gt;
* [[user: Innsill/dwm-starter (x86-64)     |dwm-starter (x86-64)]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16656</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16656"/>
		<updated>2019-11-11T08:23:49Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /dev/sda               /dev/nvme0n1  (m.2 PCIe NVMe, unbootable)&lt;br /&gt;
  +-------------------+  +-------------------+&lt;br /&gt;
  |  *--------------+ |  |  +--------------+ |&lt;br /&gt;
  |  | /boot        | |  |  | swap         | |&lt;br /&gt;
  |  +--------------+ |  |  +--------------+ |&lt;br /&gt;
  +-------------------+  |  +--------------+ |&lt;br /&gt;
                         |  |  /           | |&lt;br /&gt;
                         |  +--------------+ |&lt;br /&gt;
                         +-------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://alpinelinux.org/downloads/ alpine-extended-3.10.3-x86_64.iso]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= setup-alpine =&lt;br /&gt;
&#039;&#039;&#039;{{c| setup-alpine}}&#039;&#039;&#039;    ...none, none, none,...&lt;br /&gt;
&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= setup-disk =&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; &#039;&#039;&#039;{{c| setup-disk /mnt}}&#039;&#039;&#039;&lt;br /&gt;
* {{c| mount /dev/ /mnt/dev/ --bind}} &amp;lt;/br&amp;gt; {{c| mount -t proc none /mnt/proc}} &amp;lt;/br&amp;gt; {{c| mount -o bind /sys /mnt/sys}} &amp;lt;/br&amp;gt; chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
echo &amp;quot;ff  ALL = (ALL) NOPASSWD: /usr/sbin/hdparm -Y /dev/sda&amp;quot; &amp;gt;&amp;gt; /etc/sudoers.d/ff&lt;br /&gt;
&lt;br /&gt;
chmod 400 /etc/sudoers.d/ff&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;sudo hdparm -Y /dev/sda&amp;quot; &amp;gt;&amp;gt; /home/ff/.profile&lt;br /&gt;
&lt;br /&gt;
= X ??? =&lt;br /&gt;
* {{c| X -configure}}&lt;br /&gt;
** {{c| vi xorg.conf.new}}&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier  &amp;quot;Card0&amp;quot;&lt;br /&gt;
        Driver      &amp;quot;[[amdgpu]]&amp;quot;&lt;br /&gt;
        BusID       &amp;quot;PCI:0:17:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16655</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16655"/>
		<updated>2019-11-11T08:21:25Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /dev/sda               /dev/nvme0n1  (m.2 PCIe NVMe, unbootable)&lt;br /&gt;
  +-------------------+  +-------------------+&lt;br /&gt;
  |  +--------------+ |  |  +--------------+ |&lt;br /&gt;
  |  | /boot        | |  |  | swap         | |&lt;br /&gt;
  |  +--------------* |  |  +--------------+ |&lt;br /&gt;
  +-------------------+  |  +--------------* |&lt;br /&gt;
                         |  |  /           | |&lt;br /&gt;
                         |  +--------------* |&lt;br /&gt;
                         +-------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://alpinelinux.org/downloads/ alpine-extended-3.10.3-x86_64.iso]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= setup-alpine =&lt;br /&gt;
&#039;&#039;&#039;{{c| setup-alpine}}&#039;&#039;&#039;    ...none, none, none,...&lt;br /&gt;
&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= setup-disk =&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; &#039;&#039;&#039;{{c| setup-disk /mnt}}&#039;&#039;&#039;&lt;br /&gt;
* {{c| mount /dev/ /mnt/dev/ --bind}} &amp;lt;/br&amp;gt; {{c| mount -t proc none /mnt/proc}} &amp;lt;/br&amp;gt; {{c| mount -o bind /sys /mnt/sys}} &amp;lt;/br&amp;gt; chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
echo &amp;quot;ff  ALL = (ALL) NOPASSWD: /usr/sbin/hdparm -Y /dev/sda&amp;quot; &amp;gt;&amp;gt; /etc/sudoers.d/ff&lt;br /&gt;
&lt;br /&gt;
chmod 400 /etc/sudoers.d/ff&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;sudo hdparm -Y /dev/sda&amp;quot; &amp;gt;&amp;gt; /home/ff/.profile&lt;br /&gt;
&lt;br /&gt;
= X ??? =&lt;br /&gt;
* {{c| X -configure}}&lt;br /&gt;
** {{c| vi xorg.conf.new}}&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier  &amp;quot;Card0&amp;quot;&lt;br /&gt;
        Driver      &amp;quot;[[amdgpu]]&amp;quot;&lt;br /&gt;
        BusID       &amp;quot;PCI:0:17:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Suspend_on_LID_close&amp;diff=16653</id>
		<title>Suspend on LID close</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Suspend_on_LID_close&amp;diff=16653"/>
		<updated>2019-11-09T08:08:49Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article explains how to make your laptop go to Suspend when closing the LID.&lt;br /&gt;
&lt;br /&gt;
This can be done via &amp;lt;code&amp;gt;acpid&amp;lt;/code&amp;gt; with a hook in {{path|/etc/acpi/LID/00000080}}:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a) with pm-utils:&#039;&#039;&#039;&lt;br /&gt;
{{cmd|apk add pm-utils}}&lt;br /&gt;
{{cat|/etc/acpi/LID/00000080|#!/bin/sh&lt;br /&gt;
exec pm-suspend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b) with this raw variant:&#039;&#039;&#039;&lt;br /&gt;
{{cat|/etc/acpi/LID/00000080|#!/bin/sh&lt;br /&gt;
echo mem &amp;gt; /sys/power/state&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the hook executable:&lt;br /&gt;
{{cmd|chmod +x /etc/acpi/LID/00000080}}&lt;br /&gt;
&lt;br /&gt;
And that should be it. Make sure that the acpid daemon is running:&lt;br /&gt;
{{cmd|/etc/init.d/acpid start}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://unix.stackexchange.com/questions/484550/pm-suspend-vs-systemctl-suspend pm-suspend vs systemd...]&lt;br /&gt;
* [http://archive.md/Bcqlz pm-utils (arch wiki)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Power Management]]&lt;br /&gt;
[[category: Desktop]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Suspend_on_LID_close&amp;diff=16652</id>
		<title>Suspend on LID close</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Suspend_on_LID_close&amp;diff=16652"/>
		<updated>2019-11-09T08:02:30Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link  pm-utils (arch wiki)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article explains how to make your laptop go to Suspend when closing the LID.&lt;br /&gt;
&lt;br /&gt;
This can be done via &amp;lt;code&amp;gt;acpid&amp;lt;/code&amp;gt; with a hook in {{path|/etc/acpi/LID/00000080}}:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a) with pm-utils:&#039;&#039;&#039;&lt;br /&gt;
{{cmd|apk add pm-utils}}&lt;br /&gt;
{{cat|/etc/acpi/LID/00000080|#!/bin/sh&lt;br /&gt;
exec pm-suspend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b) with this raw variant:&#039;&#039;&#039;&lt;br /&gt;
{{cat|/etc/acpi/LID/00000080|#!/bin/sh&lt;br /&gt;
echo mem &amp;gt; /sys/power/state&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the hook executable:&lt;br /&gt;
{{cmd|chmod +x /etc/acpi/LID/00000080}}&lt;br /&gt;
&lt;br /&gt;
And that should be it. Make sure that the acpid daemon is running:&lt;br /&gt;
{{cmd|/etc/init.d/acpid start}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://unix.stackexchange.com/questions/484550/pm-suspend-vs-systemctl-suspend pm-suspend vs systemd...]&lt;br /&gt;
* [http://archive.fo/Bcqlz pm-utils (arch wiki)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Power Management]]&lt;br /&gt;
[[category: Desktop]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Suspend_on_LID_close&amp;diff=16651</id>
		<title>Suspend on LID close</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Suspend_on_LID_close&amp;diff=16651"/>
		<updated>2019-11-09T07:27:56Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article explains how to make your laptop go to Suspend when closing the LID.&lt;br /&gt;
&lt;br /&gt;
This can be done via &amp;lt;code&amp;gt;acpid&amp;lt;/code&amp;gt; with a hook in {{path|/etc/acpi/LID/00000080}}:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a) with pm-utils:&#039;&#039;&#039;&lt;br /&gt;
{{cmd|apk add pm-utils}}&lt;br /&gt;
{{cat|/etc/acpi/LID/00000080|#!/bin/sh&lt;br /&gt;
exec pm-suspend&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b) with this raw variant:&#039;&#039;&#039;&lt;br /&gt;
{{cat|/etc/acpi/LID/00000080|#!/bin/sh&lt;br /&gt;
echo mem &amp;gt; /sys/power/state&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the hook executable:&lt;br /&gt;
{{cmd|chmod +x /etc/acpi/LID/00000080}}&lt;br /&gt;
&lt;br /&gt;
And that should be it. Make sure that the acpid daemon is running:&lt;br /&gt;
{{cmd|/etc/init.d/acpid start}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://unix.stackexchange.com/questions/484550/pm-suspend-vs-systemctl-suspend pm-suspend vs systemd...]&lt;br /&gt;
&lt;br /&gt;
[[Category:Power Management]]&lt;br /&gt;
[[category: Desktop]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16646</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16646"/>
		<updated>2019-11-08T08:53:08Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&#039;&#039;&#039;[https://alpinelinux.org/downloads/ alpine-extended-3.10.3-x86_64.iso]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= setup-alpine =&lt;br /&gt;
&#039;&#039;&#039;{{c| setup-alpine}}&#039;&#039;&#039;    ...none, none, none,...&lt;br /&gt;
&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= setup-disk =&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; &#039;&#039;&#039;{{c| setup-disk /mnt}}&#039;&#039;&#039;&lt;br /&gt;
* {{c| mount /dev/ /mnt/dev/ --bind}} &amp;lt;/br&amp;gt; {{c| mount -t proc none /mnt/proc}} &amp;lt;/br&amp;gt; {{c| mount -o bind /sys /mnt/sys}} &amp;lt;/br&amp;gt; chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
echo &amp;quot;ff  ALL = (ALL) NOPASSWD: /usr/sbin/hdparm -Y /dev/sda&amp;quot; &amp;gt;&amp;gt; /etc/sudoers.d/ff&lt;br /&gt;
&lt;br /&gt;
chmod 400 /etc/sudoers.d/ff&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;sudo hdparm -Y /dev/sda&amp;quot; &amp;gt;&amp;gt; /home/ff/.profile&lt;br /&gt;
&lt;br /&gt;
= X =&lt;br /&gt;
* {{c| X -configure}}&lt;br /&gt;
** {{c| vi xorg.conf.new}}&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier  &amp;quot;Card0&amp;quot;&lt;br /&gt;
        Driver      &amp;quot;[[amdgpu]]&amp;quot;&lt;br /&gt;
        BusID       &amp;quot;PCI:0:17:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16641</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16641"/>
		<updated>2019-11-06T10:04:26Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&#039;&#039;&#039;[https://alpinelinux.org/downloads/ alpine-extended-3.10.3-x86_64.iso]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= setup-alpine =&lt;br /&gt;
&#039;&#039;&#039;{{c| setup-alpine}}&#039;&#039;&#039;    ...none, none, none,...&lt;br /&gt;
&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= setup-disk =&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; &#039;&#039;&#039;{{c| setup-disk /mnt}}&#039;&#039;&#039;&lt;br /&gt;
* {{c| mount /dev/ /mnt/dev/ --bind}} &amp;lt;/br&amp;gt; {{c| mount -t proc none /mnt/proc}} &amp;lt;/br&amp;gt; {{c| mount -o bind /sys /mnt/sys}} &amp;lt;/br&amp;gt; chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{c| hdparm -Y /dev/sda}}&lt;br /&gt;
&lt;br /&gt;
rc-update  ... &lt;br /&gt;
&lt;br /&gt;
= X =&lt;br /&gt;
* {{c| X -configure}}&lt;br /&gt;
** {{c| vi xorg.conf.new}}&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier  &amp;quot;Card0&amp;quot;&lt;br /&gt;
        Driver      &amp;quot;[[amdgpu]]&amp;quot;&lt;br /&gt;
        BusID       &amp;quot;PCI:0:17:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Kernels&amp;diff=16640</id>
		<title>Kernels</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Kernels&amp;diff=16640"/>
		<updated>2019-11-06T09:51:25Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Alpine Linux has [//pkgs.alpinelinux.org/packages?name=linux-*&amp;amp;branch=edge several kernels] designed to suit different situations.&lt;br /&gt;
&lt;br /&gt;
* [//git.alpinelinux.org/aports/tree/main/linux-vanilla linux-vanilla] is the stock modular kernel and is configured for a generous selection of hardware.&lt;br /&gt;
* linux-virt ([//git.alpinelinux.org/aports/tree/main/linux-vanilla linux-vanilla], see the -virt configs) is recommended for Alpine Linux guests, and disables most hardware in favor of a commonly-virtualized subset of drivers.&lt;br /&gt;
* [//git.alpinelinux.org/aports/tree/main/linux-rpi linux-rpi] is optimized for the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
For installing a custom kernel, see [[Custom Kernel]]. To select a specific kernel or firmware packages during installation from the Alpine ISO, simply install the desired kernel flavor and firmware packages with &amp;lt;code&amp;gt;apk add&amp;lt;/code&amp;gt; before running &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
The [//pkgs.alpinelinux.org/package/edge/main/x86/linux-firmware linux-firmware] meta-package is included in the [[Installation|default installation]], and depends on all firmware. This is a large download, and you may be better served by installing [//pkgs.alpinelinux.org/packages?name=linux-firmware-*&amp;amp;branch=edge only the firmwares you need], or [//pkgs.alpinelinux.org/package/edge/main/x86/linux-firmware-none linux-firmware-none] if you do not require any firmware. If you&#039;re unsure which firmware you need, boot up with no firmware installed and run &amp;lt;code&amp;gt;dmesg | grep firmware&amp;lt;/code&amp;gt; to get an idea. Be aware that most firmware is nonfree.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Kernel]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Category:Kernel&amp;diff=16639</id>
		<title>Category:Kernel</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Category:Kernel&amp;diff=16639"/>
		<updated>2019-11-06T09:37:27Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + category: Development&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category: Development]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Radeon_Video&amp;diff=16638</id>
		<title>Radeon Video</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Radeon_Video&amp;diff=16638"/>
		<updated>2019-11-05T09:03:56Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link KMS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
The following instructions are for modern AMD GPU chipsets covered by the radeon driver.&lt;br /&gt;
&lt;br /&gt;
== Setup Xorg/udev ==&lt;br /&gt;
&lt;br /&gt;
# Run the &amp;lt;code&amp;gt;[[Alpine setup scripts#setup-xorg-base|setup-xorg-base]]&amp;lt;/code&amp;gt; script.&lt;br /&gt;
# Install the Xorg AMD video drivers: {{Cmd|# apk add xf86-video-ati}}&lt;br /&gt;
# For newer devices, use: {{Cmd|# apk add xf86-video-amdgpu}}&lt;br /&gt;
# Enable [[#Kernel Modesetting (KMS)]]. Specifically, the &amp;lt;code&amp;gt;fbcon&amp;lt;/code&amp;gt; module is necessary, or leaving Xorg (via &amp;lt;code&amp;gt;Ctrl+Alt+F1&amp;lt;/code&amp;gt; or quitting) will result in a black screen until the machine is power cycled. If you have already launch Xorg and don&#039;t want to experience this effect, you can &amp;lt;code&amp;gt;modprobe fbcon&amp;lt;/code&amp;gt; while Xorg is running.&lt;br /&gt;
&lt;br /&gt;
== Kernel Modesetting (KMS) ==&lt;br /&gt;
&lt;br /&gt;
To enable [[KMS]] at boot:&lt;br /&gt;
# Add the &amp;lt;code&amp;gt;radeon&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;fbcon&amp;lt;/code&amp;gt; modules to {{Path|/etc/modules}}: {{Cmd|$ echo radeon &amp;gt;&amp;gt; /etc/modules&amp;lt;br /&amp;gt;$ echo fbcon &amp;gt;&amp;gt; /etc/modules}}&lt;br /&gt;
# Install &amp;lt;code&amp;gt;mkinitfs&amp;lt;/code&amp;gt;: {{Cmd|apk add mkinitfs}}&lt;br /&gt;
# Enable the &amp;lt;code&amp;gt;kms&amp;lt;/code&amp;gt; feature in the &amp;lt;code&amp;gt;mkinitfs&amp;lt;/code&amp;gt; configuration by adding it to the &amp;lt;var&amp;gt;features&amp;lt;/var&amp;gt; variable, e.g., {{cat|/etc/mkinitfs/mkinitfs.conf|features{{=}}&amp;quot;keymap cryptsetup kms ata base ide scsi usb virtio ext4&amp;quot;}}&lt;br /&gt;
# Run &amp;lt;code&amp;gt;mkinitfs&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Reboot to test the configuration.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
=== Fixing MESA-LOADER errors===&lt;br /&gt;
{{Obsolete|Alpine no longer ships with the &#039;&#039;linux-hardened&#039;&#039; kernel}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;linux-hardened&#039;&#039; kernel package places restrictions on sysfs and will prevent the MESA-LOADER from working as a normal user even if added to the video group.&lt;br /&gt;
&lt;br /&gt;
See https://bugs.alpinelinux.org/issues/7265&lt;br /&gt;
&lt;br /&gt;
Either switch to the &#039;&#039;linux-vanilla&#039;&#039; package or apply the &#039;&#039;&#039;grsec_sysfs_restrict=0&#039;&#039;&#039; kernel parameter to allow normal users to access hardware acceleration on the desktop.&lt;br /&gt;
&lt;br /&gt;
=== Fixing a frozen X11 when invoking startx ===&lt;br /&gt;
&lt;br /&gt;
You may need to set the AccelMethod to exa not glamor which is the default for the driver.&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/X11/xorg.conf|&lt;br /&gt;
  Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Option      &amp;quot;AccelMethod&amp;quot;        	&amp;quot;exa&amp;quot;&lt;br /&gt;
	Identifier  &amp;quot;Card0&amp;quot;&lt;br /&gt;
	Driver      &amp;quot;radeon&amp;quot;&lt;br /&gt;
	BusID       &amp;quot;PCI:1:0:0&amp;quot;&lt;br /&gt;
  EndSection}}&lt;br /&gt;
 &lt;br /&gt;
= =&lt;br /&gt;
* [https://wiki.archlinux.org/index.php/ATI archlinux.org / ATI]&lt;br /&gt;
* [https://wiki.archlinux.org/index.php/Xorg archlinux.org / Xorg]&lt;br /&gt;
&lt;br /&gt;
[[Category:Drivers]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=KMS&amp;diff=16637</id>
		<title>KMS</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=KMS&amp;diff=16637"/>
		<updated>2019-11-05T09:03:04Z</updated>

		<summary type="html">&lt;p&gt;Innsill: Redirected page to Kernel Modesetting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Kernel Modesetting]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Kernel_Modesetting&amp;diff=16636</id>
		<title>Kernel Modesetting</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Kernel_Modesetting&amp;diff=16636"/>
		<updated>2019-11-05T09:01:57Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Expand|Needs nVidia driver information}}&lt;br /&gt;
&lt;br /&gt;
; Intel&lt;br /&gt;
: See [[Intel_Video#Kernel_Modesetting_(KMS)]]&lt;br /&gt;
; Radeon&lt;br /&gt;
: See [[Radeon_Video#Kernel_Modesetting_(KMS)]]&lt;br /&gt;
; nVidia&lt;br /&gt;
: {{Todo|Find out how KMS works with nVidia drivers}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://wiki.archlinux.org/index.php/Kernel_mode_setting  Kernel mode setting] archlinux.org&lt;br /&gt;
&lt;br /&gt;
[[Category:Kernel]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16635</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16635"/>
		<updated>2019-11-04T09:41:48Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://alpinelinux.org/downloads/ alpine-extended-3.10.3-x86_64.iso]&#039;&#039;&#039;&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; setup-disk /mnt&lt;br /&gt;
* {{c| mount /dev/ /mnt/dev/ --bind}} &amp;lt;/br&amp;gt; {{c| mount -t proc none /mnt/proc}} &amp;lt;/br&amp;gt; {{c| mount -o bind /sys /mnt/sys}} &amp;lt;/br&amp;gt; chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{c| hdparm -Y /dev/sda}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* {{c| X -configure}}&lt;br /&gt;
** {{c| vi xorg.conf.new}}&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier  &amp;quot;Card0&amp;quot;&lt;br /&gt;
        Driver      &amp;quot;[[amdgpu]]&amp;quot;&lt;br /&gt;
        BusID       &amp;quot;PCI:0:17:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16634</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16634"/>
		<updated>2019-11-04T09:32:44Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://alpinelinux.org/downloads/ alpine-extended-3.10.3-x86_64.iso]&#039;&#039;&#039;&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; setup-disk /mnt&lt;br /&gt;
* {{c| mount /dev/ /mnt/dev/ --bind}} &amp;lt;/br&amp;gt; {{c| mount -t proc none /mnt/proc}} &amp;lt;/br&amp;gt; {{c| mount -o bind /sys /mnt/sys}} &amp;lt;/br&amp;gt; chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* {{c| X -configure}}&lt;br /&gt;
** {{c| vi xorg.conf.new}}&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier  &amp;quot;Card0&amp;quot;&lt;br /&gt;
        Driver      &amp;quot;[[amdgpu]]&amp;quot;&lt;br /&gt;
        BusID       &amp;quot;PCI:0:17:0&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Amdgpu&amp;diff=16633</id>
		<title>Amdgpu</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Amdgpu&amp;diff=16633"/>
		<updated>2019-11-04T09:32:10Z</updated>

		<summary type="html">&lt;p&gt;Innsill: Redirected page to Radeon Video&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Radeon Video]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16632</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16632"/>
		<updated>2019-11-03T08:04:19Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://alpinelinux.org/downloads/ alpine-extended-3.10.3-x86_64.iso]&#039;&#039;&#039;&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; setup-disk /mnt&lt;br /&gt;
* {{c| mount /dev/ /mnt/dev/ --bind}} &amp;lt;/br&amp;gt; {{c| mount -t proc none /mnt/proc}} &amp;lt;/br&amp;gt; {{c| mount -o bind /sys /mnt/sys}} &amp;lt;/br&amp;gt; chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16631</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16631"/>
		<updated>2019-11-03T08:01:43Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
* alpine-extended-3.10.3-x86_64.iso&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; setup-disk /mnt&lt;br /&gt;
* {{c| mount /dev/ /mnt/dev/ --bind}} &amp;lt;/br&amp;gt; {{c| mount -t proc none /mnt/proc}} &amp;lt;/br&amp;gt; {{c| mount -o bind /sys /mnt/sys}} &amp;lt;/br&amp;gt; chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Template:C&amp;diff=16630</id>
		<title>Template:C</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Template:C&amp;diff=16630"/>
		<updated>2019-11-03T07:44:21Z</updated>

		<summary type="html">&lt;p&gt;Innsill: Created page with &amp;quot;&amp;lt;code&amp;gt;{{{1}}}&amp;lt;/code&amp;gt;&amp;lt;noinclude&amp;gt;category: abc-template&amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;{{{1}}}&amp;lt;/code&amp;gt;&amp;lt;noinclude&amp;gt;[[category: abc-template]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Radeon_Video&amp;diff=16629</id>
		<title>Radeon Video</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Radeon_Video&amp;diff=16629"/>
		<updated>2019-11-03T06:56:59Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
The following instructions are for modern AMD GPU chipsets covered by the radeon driver.&lt;br /&gt;
&lt;br /&gt;
== Setup Xorg/udev ==&lt;br /&gt;
&lt;br /&gt;
# Run the &amp;lt;code&amp;gt;[[Alpine setup scripts#setup-xorg-base|setup-xorg-base]]&amp;lt;/code&amp;gt; script.&lt;br /&gt;
# Install the Xorg AMD video drivers: {{Cmd|# apk add xf86-video-ati}}&lt;br /&gt;
# For newer devices, use: {{Cmd|# apk add xf86-video-amdgpu}}&lt;br /&gt;
# Enable [[#Kernel Modesetting (KMS)]]. Specifically, the &amp;lt;code&amp;gt;fbcon&amp;lt;/code&amp;gt; module is necessary, or leaving Xorg (via &amp;lt;code&amp;gt;Ctrl+Alt+F1&amp;lt;/code&amp;gt; or quitting) will result in a black screen until the machine is power cycled. If you have already launch Xorg and don&#039;t want to experience this effect, you can &amp;lt;code&amp;gt;modprobe fbcon&amp;lt;/code&amp;gt; while Xorg is running.&lt;br /&gt;
&lt;br /&gt;
== Kernel Modesetting (KMS) ==&lt;br /&gt;
&lt;br /&gt;
To enable KMS at boot:&lt;br /&gt;
# Add the &amp;lt;code&amp;gt;radeon&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;fbcon&amp;lt;/code&amp;gt; modules to {{Path|/etc/modules}}: {{Cmd|$ echo radeon &amp;gt;&amp;gt; /etc/modules&amp;lt;br /&amp;gt;$ echo fbcon &amp;gt;&amp;gt; /etc/modules}}&lt;br /&gt;
# Install &amp;lt;code&amp;gt;mkinitfs&amp;lt;/code&amp;gt;: {{Cmd|apk add mkinitfs}}&lt;br /&gt;
# Enable the &amp;lt;code&amp;gt;kms&amp;lt;/code&amp;gt; feature in the &amp;lt;code&amp;gt;mkinitfs&amp;lt;/code&amp;gt; configuration by adding it to the &amp;lt;var&amp;gt;features&amp;lt;/var&amp;gt; variable, e.g., {{cat|/etc/mkinitfs/mkinitfs.conf|features{{=}}&amp;quot;keymap cryptsetup kms ata base ide scsi usb virtio ext4&amp;quot;}}&lt;br /&gt;
# Run &amp;lt;code&amp;gt;mkinitfs&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Reboot to test the configuration.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
=== Fixing MESA-LOADER errors===&lt;br /&gt;
{{Obsolete|Alpine no longer ships with the &#039;&#039;linux-hardened&#039;&#039; kernel}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;linux-hardened&#039;&#039; kernel package places restrictions on sysfs and will prevent the MESA-LOADER from working as a normal user even if added to the video group.&lt;br /&gt;
&lt;br /&gt;
See https://bugs.alpinelinux.org/issues/7265&lt;br /&gt;
&lt;br /&gt;
Either switch to the &#039;&#039;linux-vanilla&#039;&#039; package or apply the &#039;&#039;&#039;grsec_sysfs_restrict=0&#039;&#039;&#039; kernel parameter to allow normal users to access hardware acceleration on the desktop.&lt;br /&gt;
&lt;br /&gt;
=== Fixing a frozen X11 when invoking startx ===&lt;br /&gt;
&lt;br /&gt;
You may need to set the AccelMethod to exa not glamor which is the default for the driver.&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/X11/xorg.conf|&lt;br /&gt;
  Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Option      &amp;quot;AccelMethod&amp;quot;        	&amp;quot;exa&amp;quot;&lt;br /&gt;
	Identifier  &amp;quot;Card0&amp;quot;&lt;br /&gt;
	Driver      &amp;quot;radeon&amp;quot;&lt;br /&gt;
	BusID       &amp;quot;PCI:1:0:0&amp;quot;&lt;br /&gt;
  EndSection}}&lt;br /&gt;
 &lt;br /&gt;
= =&lt;br /&gt;
* [https://wiki.archlinux.org/index.php/ATI archlinux.org / ATI]&lt;br /&gt;
* [https://wiki.archlinux.org/index.php/Xorg archlinux.org / Xorg]&lt;br /&gt;
&lt;br /&gt;
[[Category:Drivers]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Category:Drivers&amp;diff=16628</id>
		<title>Category:Drivers</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Category:Drivers&amp;diff=16628"/>
		<updated>2019-11-03T06:43:15Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + category: Installation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These pages contain information about drivers for video and other hardware.&lt;br /&gt;
&lt;br /&gt;
[[category: Installation]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux_in_a_chroot&amp;diff=16627</id>
		<title>Alpine Linux in a chroot</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux_in_a_chroot&amp;diff=16627"/>
		<updated>2019-11-03T06:40:23Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + category: System Administration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
Inside the chroot environment, you can build, debug, and run alpine packages or develop things. It&#039;s the most knowed way to do so if not wants to trash your main Alpine system.&lt;br /&gt;
&lt;br /&gt;
This document explains how to set up an [[Alpine_newbie#Developer|Alpine build environment]] in a chroot under a host Linux distro, can also be used to install Alpine Linux from a non-Alpine Linux livecd.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* Working Linux instalation where to perform all the process&lt;br /&gt;
* Linux kernel 2.6.22, with &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;chroot&amp;lt;/code&amp;gt; installed&lt;br /&gt;
* target media with at least 100M, 900MB for more complete solution as minimum&lt;br /&gt;
* internet connection&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
The variables below: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;${chroot_dir}&#039;&#039;&#039; = Should point to the chroot directory where you &lt;br /&gt;
*&#039;&#039;&#039;${mirror}&#039;&#039;&#039; = Should be replaced with [http://nl.alpinelinux.org/alpine/MIRRORS.txt one of the available Alpine Linux mirrors].&lt;br /&gt;
*&#039;&#039;&#039;${arch}&#039;&#039;&#039; =  Should be the cpu architecture like x86 (i386) or amd64(x86_64)..&lt;br /&gt;
&lt;br /&gt;
== Set up APK ==&lt;br /&gt;
&lt;br /&gt;
Download the latest apk static package (replace &amp;lt;tt&amp;gt;${version}&amp;lt;/tt&amp;gt; with actual version):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|wget ${mirror}/latest-stable/main/${arch}/apk-tools-static-${version}.apk}}&lt;br /&gt;
&lt;br /&gt;
.apk packages are just gzipped tarballs, unpack using:&lt;br /&gt;
{{Cmd|tar -xzf apk-tools-static-*.apk}}&lt;br /&gt;
&lt;br /&gt;
== Install the alpine base installation onto the chroot ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./sbin/apk.static -X ${mirror}/latest-stable/main -U --allow-untrusted --root ${chroot_dir} --initdb add alpine-base}}&lt;br /&gt;
&lt;br /&gt;
== Set up the chroot ==&lt;br /&gt;
&lt;br /&gt;
Before made and enter into the chrooted system must be prepared with device nodes and tempfs :&lt;br /&gt;
&lt;br /&gt;
===== Method 1.A fast way: using bind mount =====&lt;br /&gt;
&lt;br /&gt;
{{Note|Mounts with bind, can mount in read-only the /dev at the alpine chroot so due limited will not touch the  access time of the host system}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mount /dev/ /alpine/dev/ --bind&lt;br /&gt;
mount -o remount,ro,bind /alpine/dev&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you need SCSI or R/W access only do the first command, mounting with &amp;quot;ro&amp;quot; makes more secure your chroot.&lt;br /&gt;
&lt;br /&gt;
===== Method 1.B manual way: creating need nodes =====&lt;br /&gt;
&lt;br /&gt;
{{Warning|Manually creating devices will only provide those representation that you have created.. for auto availability use bind mounts}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mknod -m 666 ${chroot_dir}/dev/full c 1 7&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/ptmx c 5 2&lt;br /&gt;
mknod -m 644 ${chroot_dir}/dev/random c 1 8&lt;br /&gt;
mknod -m 644 ${chroot_dir}/dev/urandom c 1 9&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/zero c 1 5&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/tty c 5 0}}&lt;br /&gt;
&lt;br /&gt;
If you need SCSI disc access:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mknod -m 666 ${chroot_dir}/dev/sda b 8 0&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sda1 b 8 1&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sda2 b 8 2&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sda3 b 8 3&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sda4 b 8 4&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sda5 b 8 5&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sda6 b 8 6&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sdb b 8 16&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sdb1 b 8 17&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sdb2 b 8 18&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sdb3 b 8 19&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sdb4 b 8 20&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sdb5 b 8 21&lt;br /&gt;
mknod -m 666 ${chroot_dir}/dev/sdb6 b 8 22}}&lt;br /&gt;
&lt;br /&gt;
==== Made available proc and sys fs ====&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mount -t proc none ${chroot_dir}/proc&lt;br /&gt;
mount -o bind /sys ${chroot_dir}/sys}}&lt;br /&gt;
&lt;br /&gt;
==== Make networking resolution access ====&lt;br /&gt;
&lt;br /&gt;
A resolv.conf is needed for name resolution: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /etc/resolv.conf ${chroot_dir}/etc/&lt;br /&gt;
mkdir -p ${chroot_dir}/root}}&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to copy the resolv.conf from the local machine, you can create a new one using OpenDNS servers (or any other): &lt;br /&gt;
{{Cmd|echo -e &#039;nameserver 8.8.8.8\nnameserver 2620:0:ccc::2&#039; &amp;gt; ${chroot_dir}/etc/resolv.conf}}&lt;br /&gt;
&lt;br /&gt;
==== prepare the apk sources software ====&lt;br /&gt;
&lt;br /&gt;
Set up APK mirror (replace &amp;lt;tt&amp;gt;${branch}&amp;lt;/tt&amp;gt; with the latest stable branch name, e.g. v3.3):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p ${chroot_dir}/etc/apk&lt;br /&gt;
echo &amp;quot;${mirror}/${branch}/main&amp;quot; &amp;gt; ${chroot_dir}/etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
== Entering your chroot ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|At this point, Alpine has been succesfully installed onto the chroot directory &#039;&#039;&#039;but still not able to boot it&#039;&#039;&#039;. }}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chroot ${chroot_dir} /bin/bash -l}}&lt;br /&gt;
&lt;br /&gt;
==== Perform init process ====&lt;br /&gt;
&lt;br /&gt;
Need to add some minimal initscripts to appropriate runlevels:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-update add devfs sysinit&lt;br /&gt;
rc-update add dmesg sysinit&lt;br /&gt;
rc-update add mdev sysinit&lt;br /&gt;
&lt;br /&gt;
rc-update add hwclock boot&lt;br /&gt;
rc-update add modules boot&lt;br /&gt;
rc-update add sysctl boot&lt;br /&gt;
rc-update add hostname boot&lt;br /&gt;
rc-update add bootmisc boot&lt;br /&gt;
rc-update add syslog boot&lt;br /&gt;
&lt;br /&gt;
rc-update add mount-ro shutdown&lt;br /&gt;
rc-update add killprocs shutdown&lt;br /&gt;
rc-update add savecache shutdown}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== hardened kernels or alpine as chroot host ==&lt;br /&gt;
&lt;br /&gt;
If you are using Alpine as a Native build system you will have to make sure that chroot can run chmod. Add following to &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;kernel.grsecurity.chroot_deny_chmod = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the following command&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sysctl -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chroot: cannot run command &#039; ... Exec format error ==&lt;br /&gt;
&lt;br /&gt;
This usually indicates that you booted with one architecture (e.g. armf) and are trying to chroot into another (e.g. x86_64). If you plans to make chroot into another installation must use same arch for both host and hosted chrooted!&lt;br /&gt;
&lt;br /&gt;
Note that with &#039;&#039;&#039;one exception you can run 32 bit x86 chroot in x86_64, but not viceversa&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
== WARNING: Ignoring APKINDEX.xxxx.tar.gz ==&lt;br /&gt;
&lt;br /&gt;
Make sure &amp;lt;code&amp;gt;${chroot_dir}/etc/apk/repositories&amp;lt;/code&amp;gt; is valid and inside the chroot run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
&lt;br /&gt;
* You can also use script [https://github.com/alpinelinux/alpine-chroot-install/ alpine-chroot-install]&lt;br /&gt;
* https://web.archive.org/web/20190808203313/https://isc.sans.edu/forums/diary/Forensic+use+of+mount+bind/22854/&lt;br /&gt;
* Alpine Linux in a chroot on Fedora : http://git.alpinelinux.org/cgit/user/fab/scripts/tree/alpine-chroot.sh script&lt;br /&gt;
* Alpine Linux aarch64 in a chroot on AWS Linux : https://gist.github.com/emolitor/0567e51c0ce04f4b025fc78d2cf0b4f1 script&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[category: System Administration]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16626</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16626"/>
		<updated>2019-11-02T22:40:48Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
* alpine-extended-3.10.3-x86_64.iso&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -t btrfs -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
&amp;lt;!--* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1 --&amp;gt;&lt;br /&gt;
* BOOTLOADER=grub &amp;lt;/br&amp;gt; setup-disk /mnt&lt;br /&gt;
*... chroot /mnt &amp;lt;/br&amp;gt; grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16624</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16624"/>
		<updated>2019-11-02T11:01:45Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L RC100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L OLD_HDD /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1&lt;br /&gt;
* ./setup-disk /mnt&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, m.2, NVMe] gh.de&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCIe 3] gh.de&lt;br /&gt;
* [https://gh.de/asus-m4a78lt-m-90-mibbj0-g0eay00z-a495831.html ASUS M4A78LT-M PCIe 2]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16623</id>
		<title>User:Innsill/dwm-starter (x86-64)</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/dwm-starter_(x86-64)&amp;diff=16623"/>
		<updated>2019-11-02T10:47:08Z</updated>

		<summary type="html">&lt;p&gt;Innsill: Created page with &amp;quot;... ??? * lsblk * wipefs /dev/nvme0n1  * __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1 ** &amp;#039;&amp;#039;&amp;#039;o&amp;#039;&amp;#039;&amp;#039; - clear out any partitions ** &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; *** &amp;#039;&amp;#039;&amp;#039;p&amp;#039;&amp;#039;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;... ???&lt;br /&gt;
* lsblk&lt;br /&gt;
* wipefs /dev/nvme0n1 &lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/nvme0n1&lt;br /&gt;
** &#039;&#039;&#039;o&#039;&#039;&#039; - clear out any partitions&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;p&#039;&#039;&#039; - primary &amp;lt;/br&amp;gt; &#039;&#039;&#039;1&#039;&#039;&#039; - first partition on the drive &amp;lt;/br&amp;gt; +16G &amp;lt;/br&amp;gt; &#039;&#039;&#039;t&#039;&#039;&#039; - 82 Linux swap &amp;lt;/br&amp;gt; ...&lt;br /&gt;
** &#039;&#039;&#039;n&#039;&#039;&#039; &amp;lt;/br&amp;gt; ...  &#039;&#039;&#039;enter&#039;&#039;&#039; - to accept the default ending sectors &lt;br /&gt;
** ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; fdisk /dev/sda &lt;br /&gt;
** ... &amp;lt;/br&amp;gt; &#039;&#039;&#039;a&#039;&#039;&#039; - toggle a bootable flag &amp;lt;/br&amp;gt; ...&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mkfs.btrfs -L rc100 /dev/nvme0n1p2 &amp;lt;/br&amp;gt; mkfs.ext3 -L old_hdd /dev/sda2 &amp;lt;/br&amp;gt; wipefs /dev/nvme0n1p2 &amp;lt;/br&amp;gt; wipefs /dev/sda2&lt;br /&gt;
* __________________________________________________&amp;lt;/br&amp;gt; mount -o compress /dev/nvme0n1p2 /mnt &amp;lt;/br&amp;gt; mkdir /mnt/boot &amp;lt;/br&amp;gt; mount /dev/sda2 /mnt/boot&lt;br /&gt;
* swapon /dev/sda1 &amp;lt;/br&amp;gt;  swapon /dev/nvme0n1p1&lt;br /&gt;
* ./setup-disk /mnt&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://gh.de/delock-pci-express-x16-x4-x8-card-to-1x-nvme-m-2-key-m-for-server-90303-a1985030.html DeLOCK PCI.3 Express Card to NVMe M.2] gh.de&lt;br /&gt;
* [https://gh.de/toshiba-ocz-rc100-120gb-thn-rc10z1200g8-a1831493.html Toshiba OCZ RC100 120GB, M.2] gh.de&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_disks_manually&amp;diff=16622</id>
		<title>Setting up disks manually</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_disks_manually&amp;diff=16622"/>
		<updated>2019-11-02T08:59:45Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft|Some information on this page may be incomplete or outdate.}}&lt;br /&gt;
&lt;br /&gt;
You may have complex needs that aren&#039;t handled automatically by the [[Alpine Setup Scripts]]. In those cases, you&#039;ll need to prepare your disks manually.&lt;br /&gt;
&lt;br /&gt;
It is possible to have one or more of RAID, encryption, and/or LVM on your {{Path|/}} (root) volume. However, the Alpine init script only knows how to handle them when they&#039;re layered in that order, and your initram and extlinux.conf file in the {{Path|/boot}} partition are configured properly.&lt;br /&gt;
&lt;br /&gt;
Your {{Path|/boot}} cannot reside on an encrypted or LVM volume, at least not with Alpine&#039;s default bootloader (extlinux). (Grub2 can deal with {{Path|/boot}} being on an LVM volume.) The usual practice is to create a small partition for {{Path|/boot}}, and then devote the rest of your disk to a separate partition on which you layer one or more of RAID, encryption, and/or LVM.&lt;br /&gt;
&lt;br /&gt;
Sometimes {{Path|/boot}} is also setup as a mirrored (RAID1) volume, however this is just for post-init access. That way, when you write a new kernel or bootloader config file to {{Path|/boot}}, it gets written to multiple physical partitions. During the pre-init, bootloader phase, only one of those partitions will be read from.&lt;br /&gt;
&lt;br /&gt;
So, typical setups might look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
One-disk system&lt;br /&gt;
---------------&lt;br /&gt;
  +------------------------------------------------+&lt;br /&gt;
  |  small partition (32--100M), holding           |&lt;br /&gt;
  |  only /boot, filesystem needn&#039;t be journaled   |&lt;br /&gt;
  +------------------------------------------------+&lt;br /&gt;
  |  rest of disk in second partition              |&lt;br /&gt;
  |  +------------------------------------------+  |&lt;br /&gt;
  |  | cryptsetup volume                        |  |&lt;br /&gt;
  |  |  +-------------------------------------+ |  |&lt;br /&gt;
  |  |  |  LVM PV, containing single VG,      | |  |&lt;br /&gt;
  |  |  |  containing multiple LVs, holding   | |  |&lt;br /&gt;
  |  |  |  /, /home, swap, etc                | |  |&lt;br /&gt;
  |  |  +-------------------------------------+ |  |&lt;br /&gt;
  |  +------------------------------------------+  |&lt;br /&gt;
  +------------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Two-disk system&lt;br /&gt;
---------------&lt;br /&gt;
  +------------------------------------------------+  +------------------------------------------------+&lt;br /&gt;
  |  small partition (32--100M), holding           |  |  small partition (32--100M), holding           | These 2 partitions might&lt;br /&gt;
  |  only /boot, filesystem needn&#039;t be journaled   |  |  only /boot, filesystem needn&#039;t be journaled   | form a mirrored (RAID1)&lt;br /&gt;
  +------------------------------------------------+  +------------------------------------------------+ volume&lt;br /&gt;
  |  rest of disk in second partition              |  |  rest of disk in second partition              |&lt;br /&gt;
  | T================================================================================================T | These 2 partitions form&lt;br /&gt;
  | T +--------------------------------------------------------------------------------------------+ T | a second mirrored&lt;br /&gt;
  | T | cryptsetup volume                                                                          | T | (RAID1) volume&lt;br /&gt;
  | T |  +---------------------------------------------------------------------------------------+ | T |&lt;br /&gt;
  | T |  | LVM PV, containing single VG,                                                         | | T |&lt;br /&gt;
  | T |  | containing multiple LVs, holding                                                      | | T |&lt;br /&gt;
  | T |  | /, /home, swap, etc                                                                   | | T |&lt;br /&gt;
  | T |  +---------------------------------------------------------------------------------------+ | T |&lt;br /&gt;
  | T +--------------------------------------------------------------------------------------------+ T |&lt;br /&gt;
  | T================================================================================================T |&lt;br /&gt;
  |                                                |  |                                                |&lt;br /&gt;
  +------------------------------------------------+  +------------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a three-disk system, the {{Path|/boot}} would still be RAID1, but the larger partition might in that case be RAID5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
&amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt; will automatically build a RAID array if you supply the &#039;&#039;&#039;-r&#039;&#039;&#039; switch, or if you specify more than one device.&lt;br /&gt;
&lt;br /&gt;
If you instead want to build your RAID array manually, see [[Setting up a software RAID array]]. Then you can add additional layers of encryption and/or LVM, or just assemble the RAID array, and supply the {{Path|/dev/md&amp;lt;i&amp;gt;i&amp;lt;/i&amp;gt;}} device directly to [[setup-disk]]. When you&#039;re finished, be sure to disassemble the RAID array before rebooting.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt; sees that you&#039;re using RAID---either because you gave it the &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt; switch, or multiple devices, or a {{Path|/dev/md&amp;lt;i&amp;gt;i&amp;lt;/i&amp;gt;}} device---then it will setup your initramfs and extlinux.conf file properly. However, in other cases, such as when you&#039;re also using encryption, or you invoke &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt; with a mounted directory argument, these might not be properly setup for RAID. In that case, you may need to manually edit/rebuild them. The following assumes that &amp;lt;code&amp;gt;$MNT&amp;lt;/code&amp;gt; holds the root directory you&#039;re installing into:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|1=echo &amp;quot;/sbin/mdadm&amp;quot; &amp;gt; $MNT/etc/mkinitfs/files.d/raid&lt;br /&gt;
echo &amp;quot;/etc/mdadm.conf&amp;quot; &amp;gt;&amp;gt; $MNT/etc/mkinitfs/files.d/raid&lt;br /&gt;
&amp;amp;#35; edit $MNT/etc/mkinitfs/mkinitfs.conf to make sure features=&amp;quot;...&amp;quot;&lt;br /&gt;
&amp;amp;#35; includes raid (this field is space-separated and quoted)&lt;br /&gt;
mkinitfs -c $MNT/etc/mkinitfs/mkinitfs.conf -b $MNT&lt;br /&gt;
&amp;amp;#35; edit $MNT/etc/update-extlinux.conf to make sure modules=... contains&lt;br /&gt;
&amp;amp;#35; raid1 or raid456 (whichever your / is on; this field is comma-separated)&lt;br /&gt;
&amp;amp;#35; also check the root= setting&lt;br /&gt;
extlinux --raid --install $MNT/boot --update&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Todo|Does adding the &amp;lt;code&amp;gt;--update&amp;lt;/code&amp;gt; option to &amp;lt;code&amp;gt;extlinux ...&amp;lt;/code&amp;gt; suffice to make {{Path|/boot/extlinux.conf}} be regenerated? Or do we need to manually tweak that file, or run &amp;lt;code&amp;gt;update-extlinux&amp;lt;/code&amp;gt;, as well?}}&lt;br /&gt;
&lt;br /&gt;
You might also need to manually tweak {{Path|$MNT/etc/fstab}}. And you might need to copy {{Path|/usr/share/syslinux/mbr.bin}} to your disk&#039;s MBR.&lt;br /&gt;
&lt;br /&gt;
=== Encryption ===&lt;br /&gt;
&lt;br /&gt;
See [[Setting up encrypted volumes with LUKS]]. Then you can add an additional layer of LVM, or just unlock the volume you&#039;ve created (using &amp;lt;code&amp;gt;cryptsetup luksOpen ...&amp;lt;/code&amp;gt;), and supply the {{Path|/dev/mapper/&amp;lt;i&amp;gt;something&amp;lt;/i&amp;gt;}} device directly to [[setup-disk]]. When you&#039;re finished, be sure to relock the volume (using &amp;lt;code&amp;gt;cryptsetup luksClose ...&amp;lt;/code&amp;gt;) before rebooting.&lt;br /&gt;
&lt;br /&gt;
If you install your {{Path|/}} (root) on an encrypted volume, you&#039;ll need to manually edit/rebuild your initram and your extlinux.conf file. The following assumes that &amp;lt;code&amp;gt;$MNT&amp;lt;/code&amp;gt; holds the root directory you&#039;re installing into, that you&#039;ve created the cryptvolume on the device {{Path|/dev/md2}}, and that you want to unlock the encrypted volume into a virtual volume named &amp;quot;crypt&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|1=&amp;amp;#35; edit $MNT/etc/mkinitfs/mkinitfs.conf to make sure features=&amp;quot;...&amp;quot;&lt;br /&gt;
&amp;amp;#35; includes cryptsetup (this field is space-separated and quoted)&lt;br /&gt;
mkinitfs -c $MNT/etc/mkinitfs/mkinitfs.conf -b $MNT&lt;br /&gt;
&amp;amp;#35; edit $MNT/etc/update-extlinux.conf to make sure default_kernel_opts=&amp;quot;...&amp;quot;&lt;br /&gt;
&amp;amp;#35; contains cryptroot=/dev/md1 and cryptdm=crypt (this field is also space-separated and quoted)&lt;br /&gt;
&amp;amp;#35; also check the root= setting&lt;br /&gt;
extlinux --install $MNT/boot --update&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Todo|Does adding the &amp;lt;code&amp;gt;--update&amp;lt;/code&amp;gt; option to &amp;lt;code&amp;gt;extlinux ...&amp;lt;/code&amp;gt; suffice to make {{Path|/boot/extlinux.conf}} be regenerated? Or do we need to manually tweak that file, or run &amp;lt;code&amp;gt;update-extlinux&amp;lt;/code&amp;gt;, as well?}}&lt;br /&gt;
&lt;br /&gt;
You might also need to manually tweak {{Path|$MNT/etc/fstab}}.&lt;br /&gt;
&lt;br /&gt;
=== LVM ===&lt;br /&gt;
&amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt; will automatically build and use volumes in a LVM group if you supply the &#039;&#039;&#039;-L&#039;&#039;&#039; switch.&lt;br /&gt;
&lt;br /&gt;
If you instead want to build your LVM system manually, see [[Setting up Logical Volumes with LVM]]. Then &amp;lt;code&amp;gt;vgchange -ay&amp;lt;/code&amp;gt;, format and mount your volumes, and supply the root mountpoint to [[setup-disk]]. When you&#039;re finished, be sure to&lt;br /&gt;
{{Cmd|umount ...&lt;br /&gt;
vgchange -an}}&lt;br /&gt;
before rebooting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt; sees that you&#039;re using LVM---perhaps because you gave it the &amp;lt;code&amp;gt;-L&amp;lt;/code&amp;gt; switch---then it will setup your initram and extlinux.conf file properly. However, in other cases, these might not be properly setup. In that case, you may need to manually edit/rebuild them. The following assumes that &amp;lt;code&amp;gt;$MNT&amp;lt;/code&amp;gt; holds the root directory you&#039;re installing into:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|1=&amp;amp;#35; edit $MNT/etc/mkinitfs/mkinitfs.conf to make sure features=&amp;quot;...&amp;quot;&lt;br /&gt;
&amp;amp;#35; includes lvm (this field is space-separated and quoted)&lt;br /&gt;
mkinitfs -c $MNT/etc/mkinitfs/mkinitfs.conf -b $MNT&lt;br /&gt;
&amp;amp;#35; edit $MNT/etc/update-extlinux.conf to make sure root= is set correctly&lt;br /&gt;
extlinux --install $MNT/boot --update&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Todo|Does adding the &amp;lt;code&amp;gt;--update&amp;lt;/code&amp;gt; option to &amp;lt;code&amp;gt;extlinux ...&amp;lt;/code&amp;gt; suffice to make {{Path|/boot/extlinux.conf}} be regenerated? Or do we need to manually tweak that file, or run &amp;lt;code&amp;gt;update-extlinux&amp;lt;/code&amp;gt;, as well?}}&lt;br /&gt;
&lt;br /&gt;
You might also need to manually tweak {{Path|$MNT/etc/fstab}}.&lt;br /&gt;
&lt;br /&gt;
=== Custom partitioning ===&lt;br /&gt;
&amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt; will by default set up a root parition, a separate /boot partition and a swap. If you want a different layout you can manually create the parititions, filesystems and mount them up on {{Path|/mnt}} (or any other mount point) and then run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|setup-disk /mnt}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt; will install your running system on the mounted root, detect your file system layout and generate a fstab. You are responsible for making the proper partition bootable and make sure the MBR is ok for extlinux.&lt;br /&gt;
&lt;br /&gt;
See also [https://github.com/itoffshore/alpine-linux-scripts setup-partitions]&lt;br /&gt;
&lt;br /&gt;
=== Dual-booting ===&lt;br /&gt;
See [[Installing Alpine on HDD dualbooting|Install to HDD with dual-boot]]&lt;br /&gt;
&lt;br /&gt;
=== Other needs ===&lt;br /&gt;
* [[Installing Alpine Linux in a chroot]]&lt;br /&gt;
* [[Replacing non-Alpine Linux with Alpine remotely]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 Create partition with with type &amp;quot;Linux&amp;quot; (83).&lt;br /&gt;
 apk_add e2fsprogs rsync&lt;br /&gt;
 mkfs.ext3 /dev/hda1&lt;br /&gt;
 mount -t ext3 /dev/hda1 /mnt&lt;br /&gt;
 ROOT=/mnt apk_add uclibc busybox apk-tools alpine-baselayout alpine-conf&lt;br /&gt;
 # Install busybox links&lt;br /&gt;
 mkdir /mnt/proc &amp;amp;&amp;amp; mount --bind /proc /mnt/proc &amp;amp;&amp;amp; chroot /mnt /bin/busybox --install -s &amp;amp;&amp;amp; umount /mnt/proc&lt;br /&gt;
 # Copy the apk repository&lt;br /&gt;
 rsync -ruav /media/cdrom/apks /mnt&lt;br /&gt;
 mkdir /mnt/etc/apk &amp;amp;&amp;amp; echo &amp;quot;APK_PATH=file://apks&amp;quot; &amp;gt; /mnt/etc/apk/apk.conf&lt;br /&gt;
 # Copy the hd/ext3 initramfs image, kernel and kernel modules&lt;br /&gt;
 rsync -ruav /media/cdrom/kernel/generic/hd-ext3.gz /media/cdrom/kernel/generic/bzImage /mnt&lt;br /&gt;
 rsync -ruav /lib/modules/* /mnt/lib/modules/&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Setting up the RAID ==&lt;br /&gt;
Set up a raid array as described [[Setting up a software RAID1 array|here]].&lt;br /&gt;
In this document two raid arrays are configured: md0 for swap (512MB) and md1 for /var. &lt;br /&gt;
&lt;br /&gt;
== Create filesystem ==&lt;br /&gt;
We need to install the software to create the filesystem (&amp;quot;format&amp;quot; the partition).&lt;br /&gt;
 apk_add e2fsprogs&lt;br /&gt;
&lt;br /&gt;
If you use an Alpine release older than 1.3.8 you will need to manually create a link to /etc/mtab.&lt;br /&gt;
 ln -fs /proc/mounts /etc/mtab&lt;br /&gt;
&lt;br /&gt;
Create the filesystem. The -j option makes it ext&#039;&#039;&#039;3&#039;&#039;&#039;. Without the -j option it will become non-journaling ext&#039;&#039;&#039;2&#039;&#039;&#039;. This step might take some time if your partition is big.&lt;br /&gt;
 mke2fs -j /dev/md1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now edit /etc/fstab and add your new partitions. Mine looks like this:&lt;br /&gt;
 none            /proc           proc    defaults 0 0&lt;br /&gt;
 none            /sys            sysfs   defaults 0 0&lt;br /&gt;
 udev            /dev            tmpfs   size=100k 0 0&lt;br /&gt;
 none            /dev/pts        devpts  defaults 0 0&lt;br /&gt;
 tmpfs           /dev/shm        tmpfs   defaults 0 0&lt;br /&gt;
 /dev/cdrom      /media/cdrom    iso9660 ro 0 0&lt;br /&gt;
 /dev/fd0        /media/floppy   vfat    noauto  0 0&lt;br /&gt;
 /dev/usba1      /media/usb      vfat    noauto  0 0&lt;br /&gt;
 none            /proc/bus/usb   usbfs noauto 0 0&lt;br /&gt;
  &lt;br /&gt;
 /dev/md0        swap            swap    defaults 0 0&lt;br /&gt;
 /dev/md1        /var            ext3    defaults 0 0&lt;br /&gt;
&lt;br /&gt;
== Move the data ==&lt;br /&gt;
Now you should stop all services running that put anything in /var (syslog for example). If you have booted on a clean installation and not run setup-alpine, then no services should be running. However, some packages might have created dirs in /var so we need to backup /var mount the new and move all backed up dirs back to the raided /var.&lt;br /&gt;
&lt;br /&gt;
 mv /var /var.tmp&lt;br /&gt;
 mkdir /var&lt;br /&gt;
 mount /var&lt;br /&gt;
 mv /var.tmp/* /var&lt;br /&gt;
 rmdir /var.tmp&lt;br /&gt;
&lt;br /&gt;
Verify that everyting looks ok with the &#039;&#039;df&#039;&#039; utility.&lt;br /&gt;
 ~ $ df&lt;br /&gt;
 Filesystem           1k-blocks      Used Available Use% Mounted on&lt;br /&gt;
 none                    255172     23544    231628   9% /&lt;br /&gt;
 udev                       100         0       100   0% /dev&lt;br /&gt;
 /dev/cdrom              142276    142276         0 100% /media/cdrom&lt;br /&gt;
 /dev/md1              37977060    181056  35866876   1% /var&lt;br /&gt;
&lt;br /&gt;
== Survive reboots ==&lt;br /&gt;
Now we have everything up and running. We need to make sure that everything will be restored during next reboot.&lt;br /&gt;
&lt;br /&gt;
Create an initscript that will mount /var for you during boot. I call it /etc/init.d/mountdisk and it looks like this:&lt;br /&gt;
 #!/sbin/runscript&lt;br /&gt;
 &lt;br /&gt;
 start() {&lt;br /&gt;
         ebegin &amp;quot;Mounting /var&amp;quot;&lt;br /&gt;
         mount /var&lt;br /&gt;
         eend $?&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 stop() {&lt;br /&gt;
         ebegin &amp;quot;Unmounting /var&amp;quot;&lt;br /&gt;
         umount /var&lt;br /&gt;
         eend $?&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Make it exectutable:&lt;br /&gt;
 chmod +x /etc/init.d/mountdisk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Since Alpine-1.7.3 there is a &#039;&#039;localmount&#039;&#039; script shipped so you will not need to create your own &#039;&#039;mountdisk&#039;&#039; script.&lt;br /&gt;
&lt;br /&gt;
And that /var is mounted *after* raid is created. The -k option will make alpine to unmount the /Var partition during boot. Also add start of swap too boot&lt;br /&gt;
 rc_add -k -s 06 mountdisk&lt;br /&gt;
 rc_add -k -s 06 swap&lt;br /&gt;
&lt;br /&gt;
The /dev/md* device nodes will not be created automatically so we need to put the on floppy too.&lt;br /&gt;
 lbu include /dev/md*&lt;br /&gt;
&lt;br /&gt;
If you have users on the server and want /home to be permanent, you can create a directory /var/home and create links to /var/home.&lt;br /&gt;
 mkdir /var/home&lt;br /&gt;
 mv /home/* /var/home/&lt;br /&gt;
 ln -s /var/home/* /home/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; You cannot just replace /home with a link that points to /var/home since the base has a /home directory. When the boot tries to copy the config from floppy it will fail because of the already existing /home directory.&lt;br /&gt;
&lt;br /&gt;
Make sure the links are stored to floppy:&lt;br /&gt;
 lbu include /home/*&lt;br /&gt;
&lt;br /&gt;
Also remember to move any newly created users to /var/home and create a link:&lt;br /&gt;
 adduser bob&lt;br /&gt;
 mv /home/bob /var/home/&lt;br /&gt;
 ln -s /var/home/bob /home/bob&lt;br /&gt;
 lbu include /home/bob&lt;br /&gt;
&lt;br /&gt;
Save to floppy:&lt;br /&gt;
 lbu commit floppy&lt;br /&gt;
&lt;br /&gt;
== Test it works ==&lt;br /&gt;
Reboot computer. Now should the raid start and /var should be mounted. Check with df:&lt;br /&gt;
 ~ $ df&lt;br /&gt;
 Filesystem           1k-blocks      Used Available Use% Mounted on&lt;br /&gt;
 none                    255172     23976    231196   9% /&lt;br /&gt;
 mdev                       100         0       100   0% /dev&lt;br /&gt;
 /dev/cdrom              140932    140932         0 100% /media/cdrom&lt;br /&gt;
 /dev/md1              37977060    180984  35866948   1% /var&lt;br /&gt;
&lt;br /&gt;
== Upgrades ==&lt;br /&gt;
Since the package database is placed on disk, you cannot update by simply replacing the CDROM. You will have to either run the upgrade on the new CDROM or run &#039;&#039;apk_add -u ... &amp;amp;&amp;amp; update-conf&#039;&#039; manually.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Setting up swap ==&lt;br /&gt;
&lt;br /&gt;
# create partition with type &amp;quot;linux swap&amp;quot; (82) (If you&#039;re going to use an LVM logical volume for swap, skip this step and &amp;lt;code&amp;gt;lvcreate&amp;lt;/code&amp;gt; that instead.)&lt;br /&gt;
# &amp;lt;code&amp;gt;mkswap /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;echo -e &amp;quot;/dev/sda2 none swap sw 0 0&amp;quot; &amp;gt;&amp;gt; /mnt/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;swapon /dev/sda2&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;rc-service swap start&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Then {{Cmd|free -m}} will show how much swap space is available (in MB).&lt;br /&gt;
&lt;br /&gt;
If you prefer maximum speed, you don&#039;t need configure any raid devices for swap. Just add 2 swap partitions on different disks and linux will stripe them automatically. The downside is that at the moment one disk fails, the system will go down. For better reliability, put swap on RAID1. &lt;br /&gt;
&lt;br /&gt;
{{Todo|Instructions for cryptswap?}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://beta.docs.alpinelinux.org/user-handbook/0.1a/Installing/manual.html#_finalizing beta.docs.alpinelinux.org] &#039;&#039;([http://archive.md/2KQPQ archive])&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Storage]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Package_Keeper&amp;diff=16621</id>
		<title>Alpine Package Keeper</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Package_Keeper&amp;diff=16621"/>
		<updated>2019-11-01T14:55:15Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link  Vivek Gite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--For searching: apk, APK--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
Because Alpine Linux is designed to run from RAM, package management involves two phases:&lt;br /&gt;
* Installing / Upgrading / Deleting packages on a running system.&lt;br /&gt;
* Restoring a system to a previously configured state (e.g. after reboot), including all previously installed packages and locally modified configuration files. &#039;&#039;&#039;(RAM-Based Installs Only)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;apk&#039;&#039;&#039; is the tool used to install, upgrade, or delete software on a running system.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;lbu&#039;&#039;&#039; is the tool used to capture the data necessary to restore a system to a previously configured state.&lt;br /&gt;
&lt;br /&gt;
This page documents the [https://git.alpinelinux.org/apk-tools/ apk tool] - See the [[Alpine_local_backup|Alpine Local Backup page]] for the lbu tool.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;apk&#039;&#039;&#039; tool has the following applets:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| [[#Add a Package|add]] &lt;br /&gt;
| Add new packages or upgrade packages to the running system&lt;br /&gt;
|-&lt;br /&gt;
| [[#Remove a Package|del]]&lt;br /&gt;
| Delete packages from the running system&lt;br /&gt;
|-&lt;br /&gt;
| fix &lt;br /&gt;
| Attempt to repair or upgrade an installed package &lt;br /&gt;
|-&lt;br /&gt;
| [[#Update the Package list|update]] &lt;br /&gt;
| Update the index of available packages&lt;br /&gt;
|-&lt;br /&gt;
| [[#Info on Packages|info]]&lt;br /&gt;
| Prints information about installed or available packages&lt;br /&gt;
|-&lt;br /&gt;
| [[#Search for Packages|search]] &lt;br /&gt;
| Search for packages or descriptions with wildcard patterns&lt;br /&gt;
|-&lt;br /&gt;
| [[#Upgrade a Running System|upgrade]]&lt;br /&gt;
| Upgrade the currently installed packages&lt;br /&gt;
|-&lt;br /&gt;
| [[#Cache Maintenance|cache]]&lt;br /&gt;
| Maintenance operations for locally cached package repository&lt;br /&gt;
|-&lt;br /&gt;
| version &lt;br /&gt;
| Compare version differences between installed and available packages&lt;br /&gt;
|-&lt;br /&gt;
| index &lt;br /&gt;
| create a repository index from a list of packages&lt;br /&gt;
|-&lt;br /&gt;
| fetch &lt;br /&gt;
| download (but not install) packages&lt;br /&gt;
|-&lt;br /&gt;
| audit &lt;br /&gt;
| List changes to the file system from pristine package install state&lt;br /&gt;
|-&lt;br /&gt;
| verify &lt;br /&gt;
| Verify a package signature&lt;br /&gt;
|- &lt;br /&gt;
| dot&lt;br /&gt;
| Create a [http://graphviz.org/ graphviz] graph description for a given package&lt;br /&gt;
|- &lt;br /&gt;
| [[#apk_policy|policy]]&lt;br /&gt;
| Display the repository that updates a given package, plus repositories that also offer the package&lt;br /&gt;
|- &lt;br /&gt;
| stats &lt;br /&gt;
| Display statistics, including number of packages installed and available, number of directories and files, etc.&lt;br /&gt;
|- &lt;br /&gt;
| manifest&lt;br /&gt;
| Display checksums for files contained in a given package&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Packages and Repositories =&lt;br /&gt;
&lt;br /&gt;
Software packages for Alpine Linux are digitally signed tar.gz archives containing programs, configuration files, and dependency metadata. They have the extension &amp;lt;code&amp;gt;.apk&amp;lt;/code&amp;gt;, and are often called &amp;quot;a-packs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The packages are stored in one or more &#039;&#039;repositories&#039;&#039;. A repository is simply a directory with a collection of *.apk files.  The directory must include a special index file, named {{Path|APKINDEX.tar.gz}} to be considered a repository.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;apk&#039;&#039;&#039; utility can install packages from multiple repositories.  The list of repositories to check is stored in {{Path|/etc/apk/repositories}}, one repository per line. If you booted from a USB stick ({{Path|/media/sda1}}) or CD-ROM ({{Path|/media/cdrom}}), your repository file probably looks something like this:&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/apk/repositories|/media/sda1/apks/}}&lt;br /&gt;
&lt;br /&gt;
In addition to local repositories, the &#039;&#039;&#039;apk&#039;&#039;&#039; utility uses &#039;&#039;&#039;busybox wget&#039;&#039;&#039; to fetch packages using &#039;&#039;http:&#039;&#039;, &#039;&#039;https:&#039;&#039; or &#039;&#039;ftp:&#039;&#039; protocols. The following is a valid repository file:&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/apk/repositories|&lt;br /&gt;
/media/sda1/apks&lt;br /&gt;
http://dl-3.alpinelinux.org/alpine/v2.6/main&lt;br /&gt;
https://dl-3.alpinelinux.org/alpine/v2.6/main&lt;br /&gt;
ftp://dl-3.alpinelinux.org/alpine/v2.6/main&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|  A list of public repositories is in [https://git.alpinelinux.org/cgit/aports/tree/main/alpine-mirrors/mirrors.yaml mirrors.yaml] in the alpine-mirrors git repository.  Accepted protocols vary.}}&lt;br /&gt;
&lt;br /&gt;
== Repository pinning ==&lt;br /&gt;
&lt;br /&gt;
You can specify additional &amp;quot;tagged&amp;quot; repositories in {{Path|/etc/apk/repositories}}:&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/apk/repositories|&lt;br /&gt;
http://nl.alpinelinux.org/alpine/v3.7/main&lt;br /&gt;
http://nl.alpinelinux.org/alpine/v3.7/community&lt;br /&gt;
@edge http://nl.alpinelinux.org/alpine/edge/main&lt;br /&gt;
@edgecommunity http://nl.alpinelinux.org/alpine/edge/community&lt;br /&gt;
@testing http://nl.alpinelinux.org/alpine/edge/testing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
After which you can &amp;quot;pin&amp;quot; dependencies to these tags using:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add stableapp newapp@edge bleedingapp@testing}}&lt;br /&gt;
&lt;br /&gt;
Apk will now by default only use the untagged repositories, but adding a tag to specific package:&lt;br /&gt;
&lt;br /&gt;
1. will prefer the repository with that tag for the named package, even if a later version of the package is available in another repository&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;allows&#039;&#039; pulling in dependencies for the tagged package from the tagged repository (though it &#039;&#039;prefers&#039;&#039; to use untagged repositories to satisfy dependencies if possible)&lt;br /&gt;
&lt;br /&gt;
== Commandline repository options ==&lt;br /&gt;
&lt;br /&gt;
By default, the &#039;&#039;&#039;apk&#039;&#039;&#039; utility will use the system repositories for all operations. This behavior can be overridden by the following options:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| --repositories-file REPOFILE&lt;br /&gt;
| Override the system repositories by specifying a repositories file.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;-X|--repository REPO&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Specify a supplemental repository that will be used in addition to the system repositories. This option can be provided multiple times.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Update the Package list =&lt;br /&gt;
&lt;br /&gt;
Remote repositories change as packages are added and upgraded.   To get the latest list of available packages, use the &#039;&#039;update&#039;&#039; command.  The command downloads the {{Path|APKINDEX.tar.gz}} from each repository and stores it in the local cache, typically {{Path|/var/cache/apk/}}, {{Path|/var/lib/apk/}} or {{Path|/etc/apk/cache/}}.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
fetch http://dl-3.alpinelinux.org/alpine/v2.1/main/APKINDEX.tar.gz&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|If using remote repositories, it is a good idea to do an &#039;&#039;&#039;update&#039;&#039;&#039; just before doing an &#039;&#039;&#039;add&#039;&#039;&#039; or &#039;&#039;&#039;upgrade&#039;&#039;&#039; command.  That way you know you are using the latest software available.}}&lt;br /&gt;
&lt;br /&gt;
= Add a Package =&lt;br /&gt;
&lt;br /&gt;
Use &#039;&#039;&#039;add&#039;&#039;&#039; to install packages from a repository. Any necessary dependencies are also installed. If you have multiple repositories, the &#039;&#039;&#039;add&#039;&#039;&#039; command installs the newest package.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add openssh&lt;br /&gt;
apk add openssh openntp vim}}&lt;br /&gt;
&lt;br /&gt;
If you only have the main repository enabled in your configuration, apk will not include packages from the other repositories. To install a package from the edge/testing repository without changing your repository configuration file, use the command below. This will tell apk to use that particular repository.&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add cherokee --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Be careful when using third-party or the testing repository. Your system can go down.}}&lt;br /&gt;
&lt;br /&gt;
= Add a local Package =&lt;br /&gt;
&lt;br /&gt;
To install a locally available apk package, for example if this device has no internet access but you can upload apk packages directly to it, use the &#039;&#039;&#039;--allow-untrusted&#039;&#039;&#039; flag:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add --allow-untrusted /path/to/file.apk}}&lt;br /&gt;
&lt;br /&gt;
Note that multiple packages can be given.  When installing a local package, all dependencies should also be specified.  For example:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add --allow-untrusted /var/tig-2.2-r0.apk /var/git-2.11.1-20.apk}}&lt;br /&gt;
&lt;br /&gt;
= Remove a Package  =&lt;br /&gt;
Use &#039;&#039;&#039;del&#039;&#039;&#039; to remove a package (and dependencies that are no longer needed.)  &lt;br /&gt;
&lt;br /&gt;
{{cmd|apk del openssh&lt;br /&gt;
apk del openssh openntp vim}}&lt;br /&gt;
&lt;br /&gt;
= Upgrade a Running System =&lt;br /&gt;
&lt;br /&gt;
To upgrade &#039;&#039;all&#039;&#039; the packages of a running system, use &#039;&#039;&#039;upgrade&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk update&lt;br /&gt;
apk upgrade&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
For example, the procedure on a system that has various [https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Repository_pinning repositories pinned] might display as follows:&lt;br /&gt;
&lt;br /&gt;
 # apk update&lt;br /&gt;
 fetch http://dl-3.alpinelinux.org/alpine/v3.6/main/x86_64/APKINDEX.tar.gz&lt;br /&gt;
 fetch http://dl-3.alpinelinux.org/alpine/v3.6/community/x86_64/APKINDEX.tar.gz&lt;br /&gt;
 fetch http://dl-3.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz&lt;br /&gt;
 fetch http://dl-3.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz&lt;br /&gt;
 fetch http://dl-3.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz&lt;br /&gt;
 v3.6.2-191-gf98d79930f [http://dl-3.alpinelinux.org/alpine/v3.6/main]&lt;br /&gt;
 v3.6.2-190-ga5d68c47df [http://dl-3.alpinelinux.org/alpine/v3.6/community]&lt;br /&gt;
 v3.6.0-4618-g0bf77c9821 [http://dl-3.alpinelinux.org/alpine/edge/main]&lt;br /&gt;
 v3.6.0-4605-g85ed51dd83 [http://dl-3.alpinelinux.org/alpine/edge/community]&lt;br /&gt;
 v3.6.0-4624-g11f1b9c8ab [http://dl-3.alpinelinux.org/alpine/edge/testing]&lt;br /&gt;
 OK: 20118 distinct packages available&lt;br /&gt;
 &lt;br /&gt;
 # apk upgrade&lt;br /&gt;
 (1/2) Upgrading extra-cmake-modules@testing (5.38.0-r0 -&amp;gt; 5.39.0-r0)&lt;br /&gt;
 (2/2) Upgrading extra-cmake-modules-doc@testing (5.38.0-r0 -&amp;gt; 5.39.0-r0)&lt;br /&gt;
 Executing mdocml-apropos-1.14.1-r0.trigger&lt;br /&gt;
 OK: 2635 MiB in 803 packages&lt;br /&gt;
&lt;br /&gt;
To upgrade &#039;&#039;only a few&#039;&#039; packages, use the &#039;&#039;&#039;add&#039;&#039;&#039; command with the &#039;&#039;-u&#039;&#039; or &#039;&#039;--upgrade&#039;&#039; option:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk update&lt;br /&gt;
apk add --upgrade busybox &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Remember that when you reboot your machine, the remote repository will not be available until after networking is started. This means packages newer than your local boot media will likely not be installed after a reboot. To make an &amp;quot;upgrade&amp;quot; persist over a reboot, use a [[#Local Cache|local cache]].}}&lt;br /&gt;
&lt;br /&gt;
= Search for Packages =&lt;br /&gt;
The &#039;&#039;&#039;search&#039;&#039;&#039; command searches the repository Index files for installable packages. &lt;br /&gt;
&lt;br /&gt;
The return format is &#039;&#039;&#039;Package&#039;&#039;&#039;-&#039;&#039;&#039;Version&#039;&#039;&#039;. Omit &#039;&#039;&#039;Version&#039;&#039;&#039; for &#039;&#039;apk add &#039;&#039;&#039;Package&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* To list all packages available, along with their descriptions: {{cmd|apk search -v}}&lt;br /&gt;
* To list all packages are part of the ACF system: {{cmd|apk search -v &#039;acf*&#039; }}&lt;br /&gt;
* To list all packages that list NTP as part of their description, use the &#039;&#039;-d&#039;&#039; or &#039;&#039;--description&#039;&#039; option: {{cmd|apk search -v --description &#039;NTP&#039; }}&lt;br /&gt;
&lt;br /&gt;
= Information on Packages =&lt;br /&gt;
&lt;br /&gt;
== apk info ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;info&#039;&#039;&#039; command provides information on the contents of packages, their dependencies, and which files belong to a package.&lt;br /&gt;
&lt;br /&gt;
For a given package, each element can be chosen (for example, &#039;&#039;-w&#039;&#039; to show just the webpage information), or all information displayed with the &#039;&#039;-a&#039;&#039; command.&lt;br /&gt;
&lt;br /&gt;
Example: {{cmd|apk info -a zlib}}&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;zlib-1.2.5-r1 description:&#039;&#039;&#039;&lt;br /&gt;
 A compression/decompression Library&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;zlib-1.2.5-r1 webpage:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://zlib.net&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;zlib-1.2.5-r1 installed size:&#039;&#039;&#039;&lt;br /&gt;
 94208&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;zlib-1.2.5-r1 depends on:&#039;&#039;&#039;&lt;br /&gt;
 libc0.9.32&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;zlib-1.2.5-r1 is required by:&#039;&#039;&#039;&lt;br /&gt;
 libcrypto1.0-1.0.0-r0&lt;br /&gt;
 apk-tools-2.0.2-r4&lt;br /&gt;
 openssh-client-5.4_p1-r2&lt;br /&gt;
 openssh-5.4_p1-r2&lt;br /&gt;
 libssl1.0-1.0.0-r0&lt;br /&gt;
 freeswitch-1.0.6-r6&lt;br /&gt;
 atop-1.25-r0 &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;zlib-1.2.5-r1 contains:&#039;&#039;&#039;&lt;br /&gt;
 lib/libz.so.1.2.5&lt;br /&gt;
 lib/libz.so.1&lt;br /&gt;
 lib/libz.so &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;zlib-1.2.5-r1 triggers:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
As shown in the example you can determine&lt;br /&gt;
* The &#039;&#039;&#039;description&#039;&#039;&#039; of the package (&#039;&#039;-d&#039;&#039; or &#039;&#039;--description&#039;&#039;)&lt;br /&gt;
* The &#039;&#039;&#039;webpage&#039;&#039;&#039; where the application is hosted (&#039;&#039;-w&#039;&#039; or &#039;&#039;--webpage&#039;&#039;)&lt;br /&gt;
* The &#039;&#039;&#039;size&#039;&#039;&#039; the package will require once installed (in bytes) (&#039;&#039;-s&#039;&#039; or &#039;&#039;--size&#039;&#039;)&lt;br /&gt;
* What packages are required to use this one  (&#039;&#039;&#039;depends&#039;&#039;&#039;) (&#039;&#039;-R&#039;&#039; or &#039;&#039;--depends&#039;&#039;)&lt;br /&gt;
* What packages require this one to be installed (&#039;&#039;&#039;required by&#039;&#039;&#039;) (&#039;&#039;-r&#039;&#039; or &#039;&#039;--rdepends&#039;&#039;)&lt;br /&gt;
* The &#039;&#039;&#039;contents&#039;&#039;&#039; of the package, that is, which files it installs (&#039;&#039;-L&#039;&#039; or &#039;&#039;--contents&#039;&#039;)&lt;br /&gt;
* Any &#039;&#039;&#039;triggers&#039;&#039;&#039; this package sets. (&#039;&#039;-t&#039;&#039; or &#039;&#039;--triggers&#039;&#039;) Listed here are directories that are watched; if a change happens to the directory, then the trigger script is run at the end of the apk add/delete. For example, doing a depmod once after installing all packages that add kernel modules.&lt;br /&gt;
&lt;br /&gt;
{{Tip|The &#039;&#039;&#039;info&#039;&#039;&#039; command is also useful to determine which package a file belongs to.  For example: {{cmd|apk info --who-owns /sbin/lbu}} will display&lt;br /&gt;
&lt;br /&gt;
 /sbin/lbu is owned by alpine-conf-x.x-rx&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Listing installed packages ===&lt;br /&gt;
&lt;br /&gt;
To list all installed packages, use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;apk info&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To list all installed packages in alphabetical order, with a description of each, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;apk -vv info|sort&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== apk policy ==&lt;br /&gt;
&lt;br /&gt;
To display the repository a package was installed from and will be updated from, plus any [https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Repository_pinning tagged] or enabled repositories where it is also offered, if any, for this architecture - its &#039;&#039;&#039;policy&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 apk policy &#039;&#039;package&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ apk policy vlc&lt;br /&gt;
 vlc policy:&lt;br /&gt;
  2.2.6-r1:&lt;br /&gt;
    lib/apk/db/installed&lt;br /&gt;
    http://dl-3.alpinelinux.org/alpine/v3.7/community&lt;br /&gt;
  3.0.0_rc2-r1:&lt;br /&gt;
    @edgecommunity http://dl-3.alpinelinux.org/alpine/edge/community&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Additional apk Commands =&lt;br /&gt;
In progress...&lt;br /&gt;
&lt;br /&gt;
= Local Cache =&lt;br /&gt;
&lt;br /&gt;
{{:Local_APK_cache}}&lt;br /&gt;
&lt;br /&gt;
= Advanced APK Usage =&lt;br /&gt;
&lt;br /&gt;
== Holding a specific package back ==&lt;br /&gt;
&lt;br /&gt;
In certain cases, you may want to upgrade a system, but keep a specific package at a back level. It is possible to add &amp;quot;sticky&amp;quot; or versioned dependencies. For instance, to hold the &#039;&#039;asterisk&#039;&#039; package to the 1.6.2 level or lower:&lt;br /&gt;
{{cmd|1=apk add asterisk=1.6.0.21-r0}}&lt;br /&gt;
or&lt;br /&gt;
{{cmd|apk add &#039;asterisk&amp;lt;1.6.1&#039;}}&lt;br /&gt;
&lt;br /&gt;
after which a {{cmd|apk upgrade}}&lt;br /&gt;
&lt;br /&gt;
will upgrade the entire system, keeping the asterisk package at the 1.6.0 or lower level&lt;br /&gt;
&lt;br /&gt;
To later upgrade to the current version,&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add &#039;asterisk&amp;gt;1.6.1&#039;}}&lt;br /&gt;
&lt;br /&gt;
will ensure that 1.6.1 is the minimum version used.&lt;br /&gt;
&lt;br /&gt;
You can also use &amp;quot;fuzzy&amp;quot; version matching to pin the version to a major/minor release.  For example:&lt;br /&gt;
&lt;br /&gt;
{{cmd|1=apk add &#039;asterisk=~1.6&#039;}}&lt;br /&gt;
&lt;br /&gt;
will match any version of asterisk that starts with 1.6 (such as 1.6.0.21-r0 or 1.6.9.31-r9)  &amp;lt;ref&amp;gt;[https://git.alpinelinux.org/apk-tools/commit/?id=693b4bcdb0f22904a521a7c8ac4f13e697dc4d71 Alpine source commit message]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;apk-tools is old&amp;quot; == &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apk update&#039;&#039;&#039;, &#039;&#039;&#039;apk upgrade&#039;&#039;&#039; or &#039;&#039;&#039;apk add&#039;&#039;&#039; may report the following: &lt;br /&gt;
 WARNING: This apk-tools is OLD! Some packages might not function properly&lt;br /&gt;
&lt;br /&gt;
This may happen if you are running Alpine Linux stable version with a certain edge/main, edge/community or testing package(s) also installed.  One resolution is to consider upgrading {{pkg|apk-tools}}.  If edge is already [https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Repository_pinning tagged] in your repositories, then try:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apk add --upgrade apk-tools@edge&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://www.cyberciti.biz/faq/10-alpine-linux-apk-command-examples/ 10 Alpine Linux apk Command Examples]  Vivek Gite 2019&lt;br /&gt;
&lt;br /&gt;
[[Category:Package Manager]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Firefox&amp;diff=16620</id>
		<title>Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Firefox&amp;diff=16620"/>
		<updated>2019-11-01T13:25:19Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox is a popular,open-source [https://en.wikipedia.org/wiki/Web_browser web browser].&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
To install Firefox, firstly enable the [[Enable_Community_Repository|Community repository]], then type in the terminal:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add firefox-esr}}&lt;br /&gt;
{{Tip|To play flash videos and games in Firefox, check [[Installing_Adobe_flash_player_for_Firefox|Installing Adobe flash player for Firefox]] page.}}&lt;br /&gt;
&lt;br /&gt;
== Stability ==&lt;br /&gt;
&lt;br /&gt;
If [https://support.mozilla.org/en-US/questions/1175046 tabs crash], then try disabling hardware acceleration, in the Preferences - Performance menu.&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://pkgs.alpinelinux.org/contents?file=firefox pkgs.alpinelinux.org]&lt;br /&gt;
* [https://git.alpinelinux.org/aports/log/?id=05e5fbf809000e016eee3fdfdaffb6e39a4956fd&amp;amp;qt=grep&amp;amp;q=firefox git.alpinelinux.org] - git repositories for alpine&lt;br /&gt;
* [https://stackoverflow.com/questions/51806403/installation-of-firefox-from-alpine-edge Installation of Firefox from Alpine Edge]&lt;br /&gt;
&lt;br /&gt;
[[category: Web Browser]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Enable_Community_Repository&amp;diff=16619</id>
		<title>Enable Community Repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Enable_Community_Repository&amp;diff=16619"/>
		<updated>2019-11-01T13:01:19Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Starting with Alpine Linux version 3.3, there is a new repository called &#039;&#039;&#039;community&#039;&#039;&#039;. Many packages have been moved from the main repository to community to indicate that they are not guaranteed to be supported beyond six months. If you are using any of these packages, be sure to add the community repository.&lt;br /&gt;
&lt;br /&gt;
Edit the {{Path|/etc/apk/repositories}} file using an editor ({{Pkg|nano}} for instance) and add (or uncomment) a line like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;http://dl-cdn.alpinelinux.org/alpine/edge/community&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After adding the community repository, obtain the latest index of available packages:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|Adding the &amp;lt;code&amp;gt;-U&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;--update-cache&amp;lt;/code&amp;gt; to another apk command, as in &amp;lt;code&amp;gt;apk add -U ...&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;apk upgrade -U&amp;lt;/code&amp;gt;, has the same effect as running &amp;lt;code&amp;gt;apk update&amp;lt;/code&amp;gt; before the other apk command.}}&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://superuser.com/questions/1055060/how-to-install-a-specific-package-version-in-alpine How to install a specific package version in Alpine?]&lt;br /&gt;
&lt;br /&gt;
[[Category:Package Manager]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_a_laptop&amp;diff=16618</id>
		<title>Setting up a laptop</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_a_laptop&amp;diff=16618"/>
		<updated>2019-11-01T07:53:37Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + category: desktop&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
This guide is about a project to create a &#039;&#039;&#039;secured laptop&#039;&#039;&#039;.  For this project we take in consideration ways to extend battery life.  It covers tools and daemons that are must haves for a laptop setup.&lt;br /&gt;
&lt;br /&gt;
== Guide features ==&lt;br /&gt;
&lt;br /&gt;
*Deniable full disk encryption&lt;br /&gt;
*Two factor authentication (physical object (USB key), mind) &lt;br /&gt;
*Encrypted swap and hibernation&lt;br /&gt;
*Encrypted home on top of encrypted drive&lt;br /&gt;
*Memory sanitation&lt;br /&gt;
*Dynamic power modes&lt;br /&gt;
*Feature keys support&lt;br /&gt;
&lt;br /&gt;
== Rubberhose Attack ==&lt;br /&gt;
&lt;br /&gt;
Just a reminder that all attacks are subjected to the Rubberhose Attack dilemma, you either give up your encryption keys or be tortured with a rubberhose with the possibly of death.  See [https://en.wikipedia.org/wiki/Rubber-hose_cryptanalysis Wikipedia article].  We try to present [https://en.wikipedia.org/wiki/Deniable_encryption  deniable encryption (Wikipedia)] to avoid a rubberhose attack scenario.  In this article we use the words plausible deniability interchangeably with deniable encryption.  To achieve this we use a facade and require no metadata fingerprints to expose or hint of encrypted or hidden containers or hint as in detect of existence of an encrypted disk.  The keys should be stored using steganography where we dilute the randomness into the facade.  It also requires you not to brag about encryption or mention it because that is an invitation for the attacker to torture the victim.  Deniable encryption requires you not put encrypted as an entry title to your bootloader.  There shouldn&#039;t be an entry for your facade bootloader to the encrypted drive.&lt;br /&gt;
&lt;br /&gt;
== Why full disk? ==&lt;br /&gt;
&lt;br /&gt;
The full disk encryption provides sort of some plausible deniability or a valid alibi that you didn&#039;t encrypt it.  Is the drive just random noise, broken, or is it really encrypted?  The other reason is that it implies that everything is protected.&lt;br /&gt;
&lt;br /&gt;
But there could be problems if not done right.  For example, cryptsetup does leave a plaintext marking or some hints by default that it has been encrypted when using luks/luks2 mode if a detached header with option &amp;lt;code&amp;gt;--header &amp;lt;path&amp;gt;&amp;lt;/code&amp;gt; is not presented.[https://www.lisenet.com/2013/luks-add-keys-backup-and-restore-volume-header/][http://man7.org/linux/man-pages/man8/cryptsetup.8.html]  To gain credibility that we didn&#039;t really do the encryption, you have to wipe the +3 MiB region based on the number of key slots used; or store the headers on an external device.&lt;br /&gt;
&lt;br /&gt;
If you did deniable encryption incorrectly, it is possible to erase and restore the header.  This presents an opportunity to improve obfuscation.  When you pull out the USB key, it should erase the header but store it on the USB key atomically as in completely.  If you plug in the USB key, it will restore back the header.  cryptsetup has luks actions luksHeaderBackup and luksHeaderRestore to do this.&lt;br /&gt;
&lt;br /&gt;
== Starting at the beginning ==&lt;br /&gt;
&lt;br /&gt;
Grab a USB thumb drive with Alpine.  Set it up as usual but don&#039;t let it touch your drive yet.  Then, install all the tools into memory ramdisk but not in the hard drive yet.  The hard drive will be obliterated.&lt;br /&gt;
&lt;br /&gt;
You will then install Alpine using the steps:&lt;br /&gt;
&lt;br /&gt;
First you need WiFi, to get it run do the command below but say no or skip  the hard drive setup stuff:&lt;br /&gt;
&lt;br /&gt;
  setup-alpine&lt;br /&gt;
&lt;br /&gt;
Then, you need to install some tools into RAM temporarly:&lt;br /&gt;
  apk add e2fsprogs grub grub-bios grub-efi mkinitfs nano&lt;br /&gt;
&lt;br /&gt;
== Randomizing the drive with pseudorandom urandom entropy ==&lt;br /&gt;
&lt;br /&gt;
The first part is to erase the drive with random noise but in practical time.  There are many techniques to do this but should be done in one day or two minimum.&lt;br /&gt;
&lt;br /&gt;
You can use shred or dd to accomplish this depending on your needs and the availability of entropy.  Some techniques take longer.  Cryptologist Bruce Schneier recommended 7 times with specified pattern.  See [https://en.wikipedia.org/wiki/Data_erasure Wikipedia Article].  For practical purposes, we just do it random in one pass.  It should be random so that the facade of random noise hides the encrypted data which resembles noise.&lt;br /&gt;
&lt;br /&gt;
To list the drives on the system do &amp;lt;code&amp;gt;fdisk -l&amp;lt;/code&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT: make sure you wipe the right specific drive.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To wipe the disk with random entropy do:&lt;br /&gt;
&lt;br /&gt;
  dd if=/dev/urandom of=/dev/sda&lt;br /&gt;
&lt;br /&gt;
== Creating GPG keys ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;As of this time, Alpine&#039;s mkinitfs does only one factor authentication with passphrase.&#039;&#039;&#039; You need to manually edit the initramfs-init.in in mkinitfs to support two factor authentication using cryptsetup.&lt;br /&gt;
&lt;br /&gt;
After you have scrambled the drive, you want to create your GPG keys.  You will use these keys to set the password(s) for your cryptsetup-luks partitions.  These keys should be stored on a USB thumb drive or other memory device but should not be on the USB boot thumb drive or on the encrypted drive.  The key should be a random 128 bit key wrapped in GPG and protected with a password.&lt;br /&gt;
&lt;br /&gt;
If you are using x, you need to do &amp;lt;code&amp;gt;sudo apk add pinentry-gtk&amp;lt;/code&amp;gt; to display password prompt properly for the next step.&lt;br /&gt;
&lt;br /&gt;
To install openssl and gpg do:&lt;br /&gt;
&lt;br /&gt;
  apk add openssl gnupg&lt;br /&gt;
&lt;br /&gt;
Then, to generate a key:&lt;br /&gt;
&lt;br /&gt;
  openssl rand -base64 128 | gpg --symmetric --cipher-algo aes --armor &amp;gt; /mnt/usb/2a667ec72774b0d5&lt;br /&gt;
&lt;br /&gt;
(Make sure your usb is mounted on /mnt/usb first.)&lt;br /&gt;
&lt;br /&gt;
The long file name comes from &amp;lt;code&amp;gt;openssl rand 8 -hex&amp;lt;/code&amp;gt; so that we enhance plausible deniability.  The attacker cannot determine the purpose of the key.  Is it used for GitHub? for Email?&lt;br /&gt;
&lt;br /&gt;
The first part will produce 128 random bytes in wrap it in base64.  The random data will be piped to gpg which will wrap it in AES as ciphertext which again gets wrapped in base64 ascii armor.  For every partition including swap in some cases, you should create more gpg keys and store them in your USB thumb drives.  After you have produced your gpg keys, you will then use them as a password for cryptsetup/luks.&lt;br /&gt;
&lt;br /&gt;
You can replace aes above with the ones listed in &amp;lt;code&amp;gt;gpg --version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There should be a password generated for the swap.  This is to resume for your hibernate.  If you don&#039;t want to hibernate, then password is not required and all you need to do is to create/format the partition each time you boot without a password or with a one time random password.&lt;br /&gt;
&lt;br /&gt;
== Hiding the keys using steganography ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;WARNING:&#039;&#039; This section is considered experimental.  It requires the tool and the dependencies to be placed on another USB separate from the key files, the bootloaders, and encrypted disks.  The tool and dependencies need to be packaged together.  We decentralize these components so that the attacker doesn&#039;t connect the dots easily or immediately jumps to the conclusion for the requirements to decrypt.  Steghide automatically uses 128-bit AES in CBC mode to encrypt data.  This can be change if you don&#039;t like or trust AES with the -e option.  Use &amp;lt;code&amp;gt;steghide encinfo&amp;lt;/code&amp;gt; for other ciphers and modes.&lt;br /&gt;
&lt;br /&gt;
Fortunately, Alpine has a package for steganography called steghide.  To install steghide do:&lt;br /&gt;
&lt;br /&gt;
  apk add steghide&lt;br /&gt;
&lt;br /&gt;
You will place the keyfile in an image file.  The facade image file should be large enough that there is no apparent discernible difference between the original and the modified.  Do not use a small image with a small filesize.&lt;br /&gt;
&lt;br /&gt;
As mentioned previously luks headers could be 3MB large or more and an jpeg image file is not suitable.  Use another format like .au/.wav or another steganography utility that handles mp3s.  The mp3/wav should be fairly large enough to dilute the header.  So, something with long content is suitable.&lt;br /&gt;
&lt;br /&gt;
There are two basic commands to use with steghide embed and extract,&lt;br /&gt;
&lt;br /&gt;
To embed do:&lt;br /&gt;
&lt;br /&gt;
  steghide embed -ef key.gpg -cf image.jpg&lt;br /&gt;
&lt;br /&gt;
To extract do:&lt;br /&gt;
&lt;br /&gt;
  steghide extract -xf key.gpg -sf image.jpg&lt;br /&gt;
&lt;br /&gt;
To get a file list of files to ship out, use:&lt;br /&gt;
&lt;br /&gt;
  apk info -L libgcc libmcrypt libmhash libstdc++ libjpeg-turbo steghide&lt;br /&gt;
&lt;br /&gt;
== Full disk encryption with with cryptsetup-luks volumes ==&lt;br /&gt;
&lt;br /&gt;
=== Partitioning scheme ===&lt;br /&gt;
&lt;br /&gt;
This section presents a conceptual layout.  It should not be a knee-jerk approval to automatically use the partition tool which would compromise your plausible deniability.&lt;br /&gt;
&lt;br /&gt;
For the facade, we use an Ubuntu Live CD (or less skilled distro) to present the impression that we are not sophisticated or tech savvy enough to implement encryption.  Windows is also acceptable even better.  The immutable Live CD and immutable partition ensures that you are not compromised by a third party attacker that implants evidence.&lt;br /&gt;
&lt;br /&gt;
There could be possibly two bootloaders, one for the facade and the other to the encrypted drive stored on an external device.&lt;br /&gt;
&lt;br /&gt;
==== Luks ====&lt;br /&gt;
&lt;br /&gt;
Plausible deniability only works if you can demonstrate no existence of partitions 2, 3, 4 and no fingerprints/plaintext introduced by cfdisk and cryptsetup-luks.  Use something like TestDisk, fdisk -l, or gparted and a disk editor (hex editor for disks).&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!#&lt;br /&gt;
!Name&lt;br /&gt;
!Mount point&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| facade&lt;br /&gt;
| /&lt;br /&gt;
| (optional) The facade partition contains a pristine normal operating system or Ubuntu Live CD image to lure the attacker in attempt to boost the confidence of the attacker convincing them that there is no encryption on the device.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| swap&lt;br /&gt;
| &lt;br /&gt;
| It should be the same size as your ram for x86_64.  Rationale: it should contain the whole ram image.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| root&lt;br /&gt;
| /&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| rescue&lt;br /&gt;
| /&lt;br /&gt;
| This should contain the Alpine image.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Plain dm-crypt ====&lt;br /&gt;
&lt;br /&gt;
Plausible deniability only works if you are able to present #2 as being unused space or untampered.  To check use something like TestDisk, gparted and a disk editor (hex editor for disks).&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!#&lt;br /&gt;
!Name&lt;br /&gt;
!Mount point&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| facade&lt;br /&gt;
| /&lt;br /&gt;
| (optional) The facade partition contains a pristine normal operating system or Ubuntu Live CD image to lure the attacker in attempt to boost the confidence of the attacker convincing them that there is no encryption on the device.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| vgroot&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2_1&lt;br /&gt;
| vgroot-root&lt;br /&gt;
| /&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2_2&lt;br /&gt;
| vgroot-swap&lt;br /&gt;
| &lt;br /&gt;
| It should be the same size as your ram for x86_64.  Rationale: it should contain the whole ram image.&lt;br /&gt;
|-&lt;br /&gt;
| 2_3&lt;br /&gt;
| vgroot-rescue&lt;br /&gt;
| /&lt;br /&gt;
| This should contain the Alpine image.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Installing cryptsetup ===&lt;br /&gt;
&lt;br /&gt;
To install cryptsetup you need the package below&lt;br /&gt;
&lt;br /&gt;
  apk add cryptsetup&lt;br /&gt;
&lt;br /&gt;
=== Choosing ciphers ===&lt;br /&gt;
&lt;br /&gt;
When you create your luks drives, you need to decide on the type of ciphers and hashing techniques to use.  The ciphers that you want to use are ones are up to you, but it should be one that is hasn&#039;t been cracked yet or has not suffered a lot of cryptanalysis attacks.  The ones that you might want to use is AES which is hardware accelerated in some Intel CPUs that have the AES-NI cpuflag which you can check by &amp;lt;code&amp;gt;cat /proc/cpuinfo&amp;lt;/code&amp;gt;.  Also consider the ciphers that are SIMD optimized such as serpent and twofish that are available in the Linux kernel.  Also consider ciphers that are unpopular but known to be secure such as Blowfish (which Wikipedia claims to be attacked and the author recommended Twofish).[https://en.wikipedia.org/wiki/Cipher_security_summary]  If it is hardware accelerated, it will save battery life and minimize CPU usage.&lt;br /&gt;
&lt;br /&gt;
For some ciphers weakness also see [https://en.wikipedia.org/wiki/Cipher_security_summary Cipher security summary (Wikipedia)].&lt;br /&gt;
&lt;br /&gt;
For some hash function weaknesses also see [https://en.wikipedia.org/wiki/Hash_function_security_summary Hash function security summary (Wikipedia)].&lt;br /&gt;
&lt;br /&gt;
Generally speaking, the swap partition should use a fast cipher.  You want to lower the latency or delay of the memory subsystem as a consequence of being encrypted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Please read the [[Setting_up_a_laptop#Important_notes | Important notes]] section for details about the problems with AES encryption.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t trust AES shills and endorsed by the NSA, you can try another different one.  Another advantage of using a public vetted cipher is that it provides confidence that it works.&lt;br /&gt;
&lt;br /&gt;
Something like KHAZAD wouldn&#039;t work on &amp;lt;code&amp;gt;cryptsetup benchmark&amp;lt;/code&amp;gt;.  KHAZAD itself is insecure.  Wikipedia reported 5 out of 8 rounds been cracked.[https://en.wikipedia.org/wiki/KHAZAD]&lt;br /&gt;
&lt;br /&gt;
For AES-128 7 out of 10, AES-192 8 out of 12, AES-256-bit 9 out 14 rounds have been cracked according to Wikipedia.[https://en.wikipedia.org/wiki/Advanced_Encryption_Standard]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT: Do not use sha1 as the hashing algorithm.&#039;&#039;&#039;  It already has already been compromised.&lt;br /&gt;
&lt;br /&gt;
=== Getting the available ciphers ===&lt;br /&gt;
&lt;br /&gt;
To check the availability of a cipher or hash function use:&lt;br /&gt;
  find $(find /lib/modules -name &amp;quot;crypto&amp;quot; -type d) -type f -name &amp;quot;*.ko&amp;quot; | sort&lt;br /&gt;
&lt;br /&gt;
To check if a cipher is loaded and passed its own tests use:&lt;br /&gt;
  cat /proc/crypto&lt;br /&gt;
&lt;br /&gt;
To test some popular ciphers and hashes do:&lt;br /&gt;
&lt;br /&gt;
  cryptsetup benchmark&lt;br /&gt;
&lt;br /&gt;
The top set is associated with the hashing algorithms.  The bottom set are the ciphers.  Use the commands below but replace the cipher and/or hash algorithm with your preferences.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cryptsetup benchmark&amp;lt;/code&amp;gt; actually doesn&#039;t show all the ciphers like Anubis.  The cipher should also have CBC and/or XTS block cipher mode of operation to encrypt larger block sizes.  AES for example has a block size of 128.  &lt;br /&gt;
&lt;br /&gt;
To test if the unpopular but uncracked cipher works use sometime like:&lt;br /&gt;
  cryptsetup benchmark --cipher anubis&lt;br /&gt;
&lt;br /&gt;
=== General steps for cryptsetup ===&lt;br /&gt;
&lt;br /&gt;
==== Original method with fdisk with no plausible deniability ====&lt;br /&gt;
&lt;br /&gt;
In this method &amp;lt;code&amp;gt;--type luks&amp;lt;/code&amp;gt; is implied which generates metadata.&lt;br /&gt;
&lt;br /&gt;
If you want plausible deniability for luks, you need to pass &amp;lt;code&amp;gt;--header &amp;lt;path&amp;gt;&amp;lt;/code&amp;gt; to all the luks commands, where &amp;lt;code&amp;gt;&amp;lt;path&amp;gt;&amp;lt;/code&amp;gt; is a unix path like /mnt/usb/d6ae10eda66704c8.  The random name comes from &amp;lt;code&amp;gt;openssl rand -hex 8&amp;lt;/code&amp;gt;.  The header is transferred to the external device (but no mention of the key slot area but ciphertext being transferred) in the man page.  The information in that file should be obfuscated with encryption if there is plaintext or fingerprint in it just in case. Then, it should be decrypted when reused.&lt;br /&gt;
&lt;br /&gt;
You need to install cfdisk if you prefer the interactive ncurses console method:&lt;br /&gt;
&lt;br /&gt;
  apk add cfdisk&lt;br /&gt;
&lt;br /&gt;
{|| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!#&lt;br /&gt;
!Step&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Use cfdisk to create partitions.  Make two partitions--a system partition and a swap partition&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;cfdisk&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Create and format the luks device&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;cryptsetup --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sda1 /mnt/usb/2a667ec72774b0d5&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Open the luks device&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;cryptsetup --key-file /mnt/usb/2a667ec72774b0d5 luksOpen /dev/sda1 root&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Format the decrypted drive with filesystem&lt;br /&gt;
| &amp;lt;code&amp;gt;mkfs.ext4 /dev/mapper/root&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Create the mount point&lt;br /&gt;
| &amp;lt;code&amp;gt;mkdir -p /mnt/root&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Mount the root partition&lt;br /&gt;
| &amp;lt;code&amp;gt;mount /dev/mapper/root /mnt/root&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Create swap&lt;br /&gt;
| cryptsetup -c blowfish -h sha256 -d /dev/urandom --key-file /mnt/usb/59022506d9f4a714 create swap /dev/sda2 &lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Use swap&lt;br /&gt;
| mkswap /dev/mapper/swap &amp;amp;&amp;amp; swapon /dev/mapper/swap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Improved method with plausible deniability ====&lt;br /&gt;
&lt;br /&gt;
This method requires lvm2.  To install:&lt;br /&gt;
&lt;br /&gt;
  apk add lvm2&lt;br /&gt;
&lt;br /&gt;
{|| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!#&lt;br /&gt;
!Step&lt;br /&gt;
!Command&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Open the &#039;&#039;plain dm-crypt&#039;&#039; device generating no metadata&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;cryptsetup open --type plain --cipher aes-cbc-essiv:sha256 --key-size 256 --key-file /mnt/usb/2a667ec72774b0d5 /dev/sda root&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Physical volume create with LVM&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;pvcreate /dev/mapper/pvroot&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Volume group create with LVM&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;vgcreate vgroot /dev/mapper/pvroot&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Logical volume create the swap volume with LVM&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lvcreate -L 4G vgroot -n swap&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Logical volume create the root volume with LVM&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lvcreate -L 2T vgroot -n root&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Logical volume create the rescue volume with LVM&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lvcreate -L 110M vgroot -n rescue&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Format the root volume with filesystem&lt;br /&gt;
| &amp;lt;code&amp;gt;mkfs.ext4 /dev/mapper/vgroot-root&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Format the swap volume and activate it&lt;br /&gt;
| &amp;lt;code&amp;gt;mkswap /dev/mapper/vgroot-swap &amp;amp;&amp;amp; swapon /dev/mapper/vgroot-swap&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Format the rescue volume with filesystem&lt;br /&gt;
| &amp;lt;code&amp;gt;mkfs.ext4 /dev/mapper/vgroot-rescue&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Create mount point for root volume&lt;br /&gt;
| &amp;lt;code&amp;gt;mkdir -p /mnt/root&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Mount the root volume&lt;br /&gt;
| &amp;lt;code&amp;gt;mount /dev/mapper/vgroot-root /mnt/root&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuring OpenRC dmcrypt and setting up fstab ===&lt;br /&gt;
&lt;br /&gt;
You need to tell OpenRC init scripts to decrypt the volumes.  See &amp;lt;code&amp;gt;/etc/conf.d/dmcrypt&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You need to add the service to boot well because it needs to decrypt the root volume before OpenRC starts running commands from it.  So you need to do:&lt;br /&gt;
&lt;br /&gt;
  rc-update add dmcrypt boot&lt;br /&gt;
&lt;br /&gt;
==== /etc/init.d/dmcrypt ====&lt;br /&gt;
The dmcrypt OpenRC service will attempt to decrypt the drive using information provided in &#039;&#039;/etc/conf.d/dmcrypt&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;luks&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/conf.d/dmcrypt|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
  # Mounting root may not be necessary since it is already mounted.&lt;br /&gt;
  target=root&lt;br /&gt;
  source=&#039;/dev/sda1&#039;&lt;br /&gt;
  key=&#039;/mnt/usb/2a667ec72774b0d5&#039;&lt;br /&gt;
&lt;br /&gt;
  swap=swap&lt;br /&gt;
  source=&#039;/dev/sda2&#039;&lt;br /&gt;
  key=&#039;/mnt/usb/59022506d9f4a714&#039;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;plain dm-crypt&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/conf.d/dmcrypt|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
  # Mounting root is likely not required since you already mounted it before OpenRC starts to do its thing.&lt;br /&gt;
  target=root&lt;br /&gt;
  source=&#039;/dev/sda&#039;&lt;br /&gt;
  key=&#039;/mnt/usb/2a667ec72774b0d5&#039;&lt;br /&gt;
  options=&#039;--type plain --cipher aes-cbc-essiv:sha256 --key-size 256&#039;&lt;br /&gt;
&lt;br /&gt;
  swap=swap&lt;br /&gt;
  source=&#039;/dev/sda2&#039;&lt;br /&gt;
  key=&#039;/mnt/usb/59022506d9f4a714&#039;&lt;br /&gt;
  pre_mount=&#039;vgchange -ay vgroot ; lvchange -ay vgroot/swap&#039;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
dm-crypt will just mount the encrypted &#039;&#039;plain dm-crypt&#039;&#039; drive or the &#039;&#039;luks&#039;&#039; partition.  What you need to do next is set up fstab located at /etc/fstab.  Examples are shown below.&lt;br /&gt;
&lt;br /&gt;
==== /etc/fstab ====&lt;br /&gt;
&lt;br /&gt;
To mount &#039;&#039;plain dm-crypt&#039;&#039; device with fstab:&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/fstab|&lt;br /&gt;
  /dev/sdb                  /boot	ext4	defaults  0 0&lt;br /&gt;
  /dev/mapper/root          /		ext4	defaults  0 1&lt;br /&gt;
  /dev/mapper/swap          none	swap	sw        0 0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
To mount &#039;&#039;lvm&#039;&#039; volumes with fstab:&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/fstab|&lt;br /&gt;
  /dev/sdb                  /boot	ext4	defaults  0 0&lt;br /&gt;
  /dev/mapper/vgroot-root   /		ext4	defaults  0 1&lt;br /&gt;
  /dev/mapper/vgroot-swap   none	swap	sw        0 0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== How to recover from a bad setup ===&lt;br /&gt;
&lt;br /&gt;
Many times you will not get it right perfectly the first try.  To recover from this situation, you need to reopen the &#039;&#039;plain dm-crypt&#039;&#039; drive or the &#039;&#039;luks&#039;&#039; drive and then remount everything back.&lt;br /&gt;
&lt;br /&gt;
To recover from &#039;&#039;luks&#039;&#039;:&lt;br /&gt;
  cryptsetup --key-file /mnt/usb/2a667ec72774b0d5 luksOpen /dev/sda1 root&lt;br /&gt;
  mkdir -p /mnt/root&lt;br /&gt;
  mount /dev/mapper/root /mnt/root&lt;br /&gt;
&lt;br /&gt;
To recover from the &#039;&#039;plain dm-crypt&#039;&#039;:&lt;br /&gt;
  cryptsetup open --type plain --cipher aes-cbc-essiv:sha256 --key-size 256 --key-file /mnt/usb/2a667ec72774b0d5 /dev/sda root&lt;br /&gt;
  vgchange -ay vgroot&lt;br /&gt;
  lvchange -ay vgroot/root&lt;br /&gt;
  mkdir -p /mnt/root&lt;br /&gt;
  mount /dev/mapper/vgroot-swap /mnt/root&lt;br /&gt;
&lt;br /&gt;
== Next step: Full blown Alpine installation ==&lt;br /&gt;
&lt;br /&gt;
We will setup the /mnt/root encrypted partition:&lt;br /&gt;
  apk add --root=/mnt/root --initdb $(cat /etc/apk/world)&lt;br /&gt;
&lt;br /&gt;
Then, enable edge repositories in both files including community and testing:&lt;br /&gt;
  nano /etc/apk/repositories /mnt/root/etc/apk/repositories&lt;br /&gt;
&lt;br /&gt;
Then, copy the necessary files:&lt;br /&gt;
  cp /etc/resolv.conf /mnt/root/etc&lt;br /&gt;
&lt;br /&gt;
Then, install the basic utils:&lt;br /&gt;
  apk add --root=/mnt/root dhcpcd chrony networkmanager wireless-tools wpa_supplicant&lt;br /&gt;
  apk add --root=/mnt/root grub mkinitfs e2fsprogs grub-bios grub-efi&lt;br /&gt;
  apk add --root=/mnt/root sudo nano&lt;br /&gt;
  apk add --root=/mnt/root linux-hardened&lt;br /&gt;
&lt;br /&gt;
Then, you need to mount your usb on to /boot:&lt;br /&gt;
  mount /dev/sdb /boot&lt;br /&gt;
&lt;br /&gt;
Edit grub:&lt;br /&gt;
  nano /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Then, install grub on the usb:&lt;br /&gt;
  grub-install --force /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Then, prepare chroot:&lt;br /&gt;
  mount --bind /dev /mnt/root/dev&lt;br /&gt;
  mount --bind /sys /mnt/root/sys&lt;br /&gt;
  cp /etc/reslov.conf /mnt/root/etc&lt;br /&gt;
&lt;br /&gt;
Then, chroot:&lt;br /&gt;
  chroot /mnt/root /bin/sh&lt;br /&gt;
&lt;br /&gt;
Set the root administrator password:&lt;br /&gt;
  passwd&lt;br /&gt;
&lt;br /&gt;
The root password should be very difficult to deter you from using it and force you to use sudo&lt;br /&gt;
&lt;br /&gt;
Edit sudo so that wheel group has administrative :&lt;br /&gt;
  EDITOR=nano visudo&lt;br /&gt;
&lt;br /&gt;
Set:&lt;br /&gt;
  ## Uncomment to allow members of group wheel to execute any command       &lt;br /&gt;
  %wheel ALL=(ALL) ALL                                                 &lt;br /&gt;
&lt;br /&gt;
Then, add wheel (administrator) user:&lt;br /&gt;
  useradd -m myname&lt;br /&gt;
  usermod -a -G video,audio,wheel myname&lt;br /&gt;
&lt;br /&gt;
log in that user:&lt;br /&gt;
  su myname&lt;br /&gt;
&lt;br /&gt;
Then, update and upgrade it&lt;br /&gt;
  sudo apk update&lt;br /&gt;
  sudo apk upgrade&lt;br /&gt;
&lt;br /&gt;
Then, setup xorg:&lt;br /&gt;
  sudo setup-xorg-base&lt;br /&gt;
  sudo apk search xf86-video | sort&lt;br /&gt;
  # pick your video driver&lt;br /&gt;
  sudo apk add xf86-video-adi&lt;br /&gt;
  # pick your opengl driver&lt;br /&gt;
  sudo apk search mesa-dri* | sort&lt;br /&gt;
  sudo apk add mesa-dri-ati  &lt;br /&gt;
&lt;br /&gt;
Then, keep piling on:&lt;br /&gt;
  sudo apk add firefox dwm xfce4-terminal alsa-utils keepassx xfce4 xchat&lt;br /&gt;
  sudo apk add font-noto-emoji terminus-font leafpad xsetroot # See [[Emojis]] to complete installation&lt;br /&gt;
  sudo apk add xf86-input-mouse xf86-input-keyboard&lt;br /&gt;
&lt;br /&gt;
Then, set the desktop:&lt;br /&gt;
  nano .xinitrc&lt;br /&gt;
&lt;br /&gt;
Put both but comment with a # one of them if you don&#039;t want it,&lt;br /&gt;
  #while true; do xsetroot -name &amp;quot;$( date +&amp;quot;%a %b %d %I:%M:%S %Y&amp;quot; )&amp;quot; ; sleep 1; done &amp;amp;&lt;br /&gt;
  #exec dwm&lt;br /&gt;
  exec xfce4-session&lt;br /&gt;
&lt;br /&gt;
For the above xsetroot statement used to provide information in the statusbar for dwm, consider adding information about the battery level.  This information can be found in sysfs at /sys/class/power_supply/BAT0/.&lt;br /&gt;
&lt;br /&gt;
  sync&lt;br /&gt;
  sudo reboot&lt;br /&gt;
&lt;br /&gt;
== Hacking mkinitfs to support cryptsetup with GPG keys ==&lt;br /&gt;
&lt;br /&gt;
This section describes how to assemble a custom initscript chain in multiple parts.  It could be extended with three-factor authentication which adds biometrics along side with mind and physical object.&lt;br /&gt;
&lt;br /&gt;
Most entry to secure systems are not fully automated or do not allow things to quickly pass through freely and often guarded.  This process may seem like a hassle, but it should dissuade the rubberhosers from jumping to the conclusion of the possibility of the existence of a encrypted drive.&lt;br /&gt;
&lt;br /&gt;
Here is the steps required so that the facade initscripts and dependencies are free from encryption.&lt;br /&gt;
* You will separate and archive cryptsetup, ciphers kernel modules, hash function kernel modules, and any additional obfuscation dependencies, and another continuation initscript discussed below.  You need to make sure that you copy /etc/mkinitfs/mkinitfs.conf to your home directory and strip out those features without those modules.&lt;br /&gt;
* You will hide this archive in a mp3 file with another tool you will package or you can use steghide&#039;s .au/.wav support, but .au seems too conspicuous or strange by current trends.&lt;br /&gt;
&lt;br /&gt;
Here we try to clean up the facade so that it presents itself as free without cryptography.  You need the following changes to your initramfs to avoid a sensitive rubberhoser:&lt;br /&gt;
* You will delete everything in the custom initramfs-init referring to encryption.  This includes cryptroot, cryptdm, crypt-anything, etc init options.&lt;br /&gt;
* You need to delete references in nlplug-findfs to cryptsetup and recompile the mkinitfs package.&lt;br /&gt;
* You could program the init script to boot into a facade partition but drop into sh if a hidden special keypress sequence is met.&lt;br /&gt;
&lt;br /&gt;
You need to create a custom init continuation script:&lt;br /&gt;
* Your initscript should drop into single mode which you will mount the encrypted path manually. &lt;br /&gt;
* You will manually steg-unhide the encrypted archive hidden in the mp3 file and extract it to the ramdisk.&lt;br /&gt;
* You will run the custom init continuation script manually.&lt;br /&gt;
* This custom init continuation will automate the process of extracting the gpg keys from another device and image files into the ramdisk.  This will then automate the mounting of the encrypted drive.  This resume continuation script should handle both cold boot and hibernate.&lt;br /&gt;
* You will finish resuming running the other half of mkinitfs-init or specifically where the points after where it typically will mount cryptsetup and hibernate devices.&lt;br /&gt;
&lt;br /&gt;
If you use a USB keyboard, you will unlock the encrypted devices in early userspace. You will need to either compile the USB keyboard drivers in the kernel or you need to add additional modules when generating the mkinitfs.  You will need the hid, hid-generic, ehci-hcd, uhci-hcd, usbcore driver and add those paths in a customized &amp;lt;code&amp;gt;/etc/mkinitfs/features.d/usb-keyboard.modules&amp;lt;/code&amp;gt;.  It should be separate from usb.modules because apk updates may overwrite it.  Use the &amp;lt;code&amp;gt;lsmod&amp;lt;/code&amp;gt; utility from the kmod package to find what drivers your USB keyboard uses.&lt;br /&gt;
&lt;br /&gt;
You need to generate the final mkinitfs.&lt;br /&gt;
First you need the kernelversion to pass into mkinitfs.  To obtain that information do &amp;lt;code&amp;gt;ls /lib/modules&amp;lt;/code&amp;gt; which will show some folders.  Once you found it pass it to mkinitrafs by doing and replacing kernelversion below:&lt;br /&gt;
&lt;br /&gt;
  sudo mkinitramfs -i $HOMEDIR/initramfs-init -c &amp;quot;$HOMEDIR&amp;quot;/mkinitfs.conf kernelversion&lt;br /&gt;
&lt;br /&gt;
The $HOMEDIR should be replaced with the full path if you are not root.&lt;br /&gt;
&lt;br /&gt;
==  Install the bootloader in the USB thumb drive ==&lt;br /&gt;
&lt;br /&gt;
To install grub, you need to install grub on the ramdisk first on the host.  &lt;br /&gt;
&lt;br /&gt;
  apk add grub&lt;br /&gt;
&lt;br /&gt;
To get a list of partitions&lt;br /&gt;
&lt;br /&gt;
  fdisk -l&lt;br /&gt;
&lt;br /&gt;
Mount the boot partition in /boot&lt;br /&gt;
&lt;br /&gt;
  mount /dev/sdb /boot&lt;br /&gt;
&lt;br /&gt;
Make changes to grub&#039;s configuration &lt;br /&gt;
&lt;br /&gt;
  nano /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You need to customize the initramfs in order to use GPG keys since there is no support from it.&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
The steps here below assumes that these custom initramfs features have been implemented.  &lt;br /&gt;
&lt;br /&gt;
The following boot loader settings is &#039;&#039;&#039;not sufficient&#039;&#039;&#039; for deniable encryption because it exposes the fact that an encrypted drive exists because an attacker can discover that encryption was used through the edit option of the grub menu.  To protect yourself from a rubberhose attack, you really need to customize the initramfs so that references to anything mentioning encryption, ciphers, hashing are not explicitly mentioned.  These configurations should be considered an intermediate form for used in debugging purposes.  In addition, the attacker just can inspect grub.cfg files directly.&lt;br /&gt;
&lt;br /&gt;
The following are just examples to just get it working but should be modified so that it doesn&#039;t hint to the rubberhoser of a hidden partition or encrypted partitions.&lt;br /&gt;
&lt;br /&gt;
The entry should look like:&lt;br /&gt;
&lt;br /&gt;
For &#039;luks&#039;&lt;br /&gt;
&lt;br /&gt;
{{cat|/boot/grub/grub.cfg|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
default=0&lt;br /&gt;
timeout=0&lt;br /&gt;
&lt;br /&gt;
menuentry &#039;Windows 10&#039; {&lt;br /&gt;
	set root=(hd0,2)&lt;br /&gt;
        chainloader +1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &#039;Alpine Linux&#039; {&lt;br /&gt;
	set root=(hd1,1)&lt;br /&gt;
	linux /vmlinuz-hardened root=/dev/mapper/root rw modules=sd-mod,usb-storage,ext4,dm-crypt,aes-x86_64,sha256-mb cryptroot=/dev/sda1 cryptdm=root&lt;br /&gt;
	initrd /initramfs-hardened&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &#039;Alpine Linux (Rescue)&#039; {&lt;br /&gt;
	set root=(hd1,1)&lt;br /&gt;
	linux /vmlinuz-hardened root=/dev/mapper/root rw modules=sd-mod,usb-storage,ext4,dm-crypt,aes-x86_64,sha256-mb cryptroot=/dev/sda4 cryptdm=root&lt;br /&gt;
	initrd /initramfs-hardened&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if keystatus; then&lt;br /&gt;
  if keystatus --ctrl; then&lt;br /&gt;
    set timeout=-1&lt;br /&gt;
  else&lt;br /&gt;
    set timeout=0&lt;br /&gt;
  fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
For &#039;plain dm-crypt&#039;:&lt;br /&gt;
&lt;br /&gt;
The stock mkinitfs may not support plain dm-crypt.  It looks like it only supports luks.  Customization of the initramfs is required.&lt;br /&gt;
&lt;br /&gt;
{{cat|/boot/grub/grub.cfg|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
default=0&lt;br /&gt;
timeout=0&lt;br /&gt;
&lt;br /&gt;
menuentry &#039;Windows 10&#039; {&lt;br /&gt;
	set root=(hd0,2)&lt;br /&gt;
        chainloader +1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &#039;Alpine Linux&#039; {&lt;br /&gt;
	set root=(hd1,1)&lt;br /&gt;
	linux /vmlinuz-hardened root=/dev/mapper/vgroot-root rw modules=sd-mod,usb-storage,ext4,dm-crypt,dm-mod,dm-snapshot,aes-x86_64,sha256-mb cryptroot=/dev/sda cryptdm=root&lt;br /&gt;
	initrd /initramfs-hardened&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &#039;Alpine Linux (Rescue)&#039; {&lt;br /&gt;
	set root=(hd1,1)&lt;br /&gt;
	linux /vmlinuz-hardened root=/dev/mapper/vgroot-rescue rw modules=sd-mod,usb-storage,ext4,dm-crypt,dm-mod,dm-snapshot,aes-x86_64,sha256-mb cryptroot=/dev/sda cryptdm=rescue&lt;br /&gt;
	initrd /initramfs-hardened&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if keystatus; then&lt;br /&gt;
  if keystatus --ctrl; then&lt;br /&gt;
    set timeout=-1&lt;br /&gt;
  else&lt;br /&gt;
    set timeout=0&lt;br /&gt;
  fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
The source code of grub could possibly be modified and recompiled to use other non-standard keys.  See [https://github.com/lemenkov/grub2/blob/master/grub-core/commands/keystatus.c].  Ideally, it should be not so obvious or accessible for the attacker.&lt;br /&gt;
&lt;br /&gt;
The above grub.cfg is applied to the USB bootloader.  For the facade bootloader, you just want the Windows 10 or Ubuntu entry, nothing more.&lt;br /&gt;
&lt;br /&gt;
For the modules parameter, you need to add your crypto modules.&lt;br /&gt;
Use &amp;lt;code&amp;gt;find /lib/modules/ -name &amp;quot;*aes*&amp;quot;&amp;lt;/code&amp;gt; where aes is the basename for your cipher or hash algorithm&lt;br /&gt;
Use &amp;lt;code&amp;gt;blkid&amp;lt;/code&amp;gt; to obtain the UUID of your device&lt;br /&gt;
&lt;br /&gt;
Install it to your USB thumb drive&lt;br /&gt;
&lt;br /&gt;
  grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
== Home mounting with eCryptfs ==&lt;br /&gt;
&lt;br /&gt;
We use eCryptfs to encrypt home.  The rationale for having another encrypted file system is that if you leave your laptop unattended on break or accidentally leave your USB key in, your data will not be accessible.  The other rationale is that if another person wants to use your computer, you can just log off and the data will be kept hidden and encrypted.  When you log off due to inactivity, your home directory will be unmounted and encrypted.  eCryptfs will encrypt/decrypt the filename and the contents and will sit on top of ext4 which sits on top of luks.&lt;br /&gt;
&lt;br /&gt;
To install ecryptfs-utils:&lt;br /&gt;
&lt;br /&gt;
  sudo apk add ecryptfs-utils&lt;br /&gt;
&lt;br /&gt;
This does one factor authentication mostly with just the password, but it should be modified to use the USB key too.  You need to reconfigure pam with the pam_usb.so which is not in Alpine aports.&lt;br /&gt;
&lt;br /&gt;
You need to use the pam_ecryptfs PAM module.&lt;br /&gt;
&lt;br /&gt;
== Locking it down ==&lt;br /&gt;
&lt;br /&gt;
Many times you will leave your laptop behind with people you trust.  The following tools will help lock down the system.&lt;br /&gt;
&lt;br /&gt;
=== physlock ===&lt;br /&gt;
&lt;br /&gt;
This will auto lock the tty and when you return will prompt for password.&lt;br /&gt;
&lt;br /&gt;
To install physlock:&lt;br /&gt;
&lt;br /&gt;
  sudo apk add physlock&lt;br /&gt;
&lt;br /&gt;
It is currently bugged.  See [https://bugs.alpinelinux.org/issues/3282].  physlock likely doesn&#039;t do two-factor authentication but it should.&lt;br /&gt;
&lt;br /&gt;
You need to create custom script that will monitor idle time in TTY then call physlock.  You load this script when you log on.&lt;br /&gt;
&lt;br /&gt;
=== xscreensaver ===&lt;br /&gt;
&lt;br /&gt;
This will lock you out of xserver&lt;br /&gt;
&lt;br /&gt;
To install xscreensaver:&lt;br /&gt;
&lt;br /&gt;
  sudo apk add xscreensaver&lt;br /&gt;
&lt;br /&gt;
=== USB key udev rule ===&lt;br /&gt;
&lt;br /&gt;
You need to add a new udev rule that will suspend-to-ram or hibernate and log off once you pull the USB key.  When you come back on, you should do 2 factor authentication to restore back everything.  Hibernation and suspend-to-ram might mitigate cold-boot attack (but unlikely see notes at the bottom of the page) to extract plaintext private data and encryption keys in memory.&lt;br /&gt;
&lt;br /&gt;
To find out the details of your USB do:&lt;br /&gt;
&lt;br /&gt;
  udevadm monitor --udev -p&lt;br /&gt;
&lt;br /&gt;
The output should look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UDEV  [181762.722853] add      /devices/pci0000:00/0000:00:13.2/usb2/2-5/2-5:1.0/host6/target6:0:0/6:0:0:0/block/sdc (block)&lt;br /&gt;
ACTION=add&lt;br /&gt;
DEVLINKS=/dev/disk/by-id/usb-Kingston_MSFT_NORB_MSFTLAKDA300EB3021790009-0:0 /dev/disk/by-path/pci-0000:00:13.2-usb-0:5:1.0-scsi-0:0:0:0 /dev/disk/by-uuid/5A96-03E4&lt;br /&gt;
DEVNAME=/dev/sdc&lt;br /&gt;
DEVPATH=/devices/pci0000:00/0000:00:13.2/usb2/2-5/2-5:1.0/host6/target6:0:0/6:0:0:0/block/sdc&lt;br /&gt;
DEVTYPE=disk&lt;br /&gt;
ID_BUS=usb&lt;br /&gt;
ID_FS_TYPE=vfat&lt;br /&gt;
ID_FS_USAGE=filesystem&lt;br /&gt;
ID_FS_UUID=5A96-03E4&lt;br /&gt;
ID_FS_UUID_ENC=5A96-03E4&lt;br /&gt;
ID_FS_VERSION=FAT32&lt;br /&gt;
ID_INSTANCE=0:0&lt;br /&gt;
ID_MODEL=MSFT_NORB&lt;br /&gt;
ID_MODEL_ENC=MSFT\x20NORB\x20\x20\x20\x20\x20\x20\x20&lt;br /&gt;
ID_MODEL_ID=1645&lt;br /&gt;
ID_PATH=pci-0000:00:13.2-usb-0:5:1.0-scsi-0:0:0:0&lt;br /&gt;
ID_PATH_TAG=pci-0000_00_13_2-usb-0_5_1_0-scsi-0_0_0_0&lt;br /&gt;
ID_REVISION=PMAP&lt;br /&gt;
ID_SERIAL=Kingston_MSFT_NORB_MSFTLAKDA300EB3021790009-0:0&lt;br /&gt;
ID_SERIAL_SHORT=MSFTLAKDA300EB3021790009&lt;br /&gt;
ID_TYPE=disk&lt;br /&gt;
ID_USB_DRIVER=usb-storage&lt;br /&gt;
ID_USB_INTERFACES=:080650:&lt;br /&gt;
ID_USB_INTERFACE_NUM=00&lt;br /&gt;
ID_VENDOR=Kingston&lt;br /&gt;
ID_VENDOR_ENC=Kingston&lt;br /&gt;
ID_VENDOR_ID=0951&lt;br /&gt;
MAJOR=8&lt;br /&gt;
MINOR=32&lt;br /&gt;
SEQNUM=2027&lt;br /&gt;
SUBSYSTEM=block&lt;br /&gt;
USEC_INITIALIZED=1762722168&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You want to extract the &amp;lt;code&amp;gt;ID_SERIAL_SHORT=MSFTLAKDA300EB3021790009&amp;lt;/code&amp;gt; or whatever is associated with your USB thumb drive.&lt;br /&gt;
&lt;br /&gt;
You need pm-utils for ps-suspend.  So to install it do:&lt;br /&gt;
&lt;br /&gt;
  sudo apk add pm-utils&lt;br /&gt;
&lt;br /&gt;
You will create a udev rules so that when you pull out the USB, it will suspend-to-ram or you can use your own script.  To do that create a file with the following contents:&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/udev/rules.d/50-usb-thumb-drive.rules|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, SUBSYSTEM==&amp;quot;usb&amp;quot;, ENV{ID_SERIAL_SHORT}==&amp;quot;MSFTLAKDA300EB3021790009&amp;quot;, RUN+=&amp;quot;/usr/sbin/pm-suspend&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Extending battery life ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WARNING: If you do not use the proper mitigation for cold boot attack, you are better off auto-shutdowning the laptop instead of using suspend or hibernate.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ACPI ===&lt;br /&gt;
&lt;br /&gt;
ACPI is a good daemon to use to execute certain scripts when laptop events are triggered.&lt;br /&gt;
&lt;br /&gt;
To install ACPI do:&lt;br /&gt;
&lt;br /&gt;
  apk add acpi&lt;br /&gt;
&lt;br /&gt;
The events to pay attention to are:&lt;br /&gt;
&lt;br /&gt;
{|  cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! ACPI Event&lt;br /&gt;
! What your script should do&lt;br /&gt;
|-&lt;br /&gt;
| lid close&lt;br /&gt;
|&lt;br /&gt;
| log off ttys and suspend-to-ram.  ALSA should either set the volume to 0 for the sound card or the sound driver be unloaded.  It might be a good idea to kill or mute any music or movie players if the sound loops loudly after lid open.&lt;br /&gt;
|-&lt;br /&gt;
| lid open&lt;br /&gt;
|&lt;br /&gt;
| lock all ttys and all xservers should be locked, possibly reinitialize ALSA and the sound system.&lt;br /&gt;
|-&lt;br /&gt;
| tapped power button&lt;br /&gt;
|&lt;br /&gt;
| lock all ttys and suspend-to-ram&lt;br /&gt;
|-&lt;br /&gt;
| held power button&lt;br /&gt;
|&lt;br /&gt;
| hibernate&lt;br /&gt;
|-&lt;br /&gt;
| unplugged power&lt;br /&gt;
|&lt;br /&gt;
| should switch to &#039;conservative&#039; cpufreq governor at above 25% power ; &#039;powersave&#039; governor at 25%.  set hdparam spindown rate lower.&lt;br /&gt;
|-&lt;br /&gt;
| plugged power&lt;br /&gt;
|&lt;br /&gt;
| should switch to &#039;performance&#039; governor.  disable hdparam spindown.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The purpose of the power governor is to regulate the running frequency (GHz) of the processor.&lt;br /&gt;
&lt;br /&gt;
Certain event handlers are are managed through laptop-mode-tools.  If you don&#039;t want the dependency, then you could write ACPI handler scripts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;acpi_listen&amp;lt;/code&amp;gt; can be used to retrieve the event name.&lt;br /&gt;
&lt;br /&gt;
TODO: put scripts below&lt;br /&gt;
&lt;br /&gt;
=== Adjusting the backlight dynamically ===&lt;br /&gt;
&lt;br /&gt;
The backlight may be controlled using sysfs.  The setting is a descendant of &amp;lt;code&amp;gt;/sys/class/backlight/&amp;lt;/code&amp;gt;.  The feature may allow you to echo a value to it.  Use trial and error to discover the values.&lt;br /&gt;
&lt;br /&gt;
The adjustment of the backlight should be function of battery life.  So if it is like 33% battery life, you want to run it near lowest settings but readable.  For 50 percent battery energy maybe 40% light.  For 90% battery maybe 75% light.&lt;br /&gt;
&lt;br /&gt;
=== hdparm ===&lt;br /&gt;
&lt;br /&gt;
To install hdparam do:&lt;br /&gt;
&lt;br /&gt;
  sudo apk add hdparm&lt;br /&gt;
&lt;br /&gt;
The settings that laptop-mode-tools messes with is the &amp;lt;code&amp;gt;-S&amp;lt;/code&amp;gt; or the spindown timeout.  It was also hinted that acoustic setting &amp;lt;code&amp;gt;-M&amp;lt;/code&amp;gt; is associated with the speed meaning that louder is faster and quieter is slower which could contribute to the amount of energy used or reduced.&lt;br /&gt;
&lt;br /&gt;
Again you want something like laptop-mode-tools or ACPI to dynamically adjust the settings based on ACPI events.&lt;br /&gt;
&lt;br /&gt;
=== laptop-mode-tools ===&lt;br /&gt;
&lt;br /&gt;
This is currently not in aports but worthy mentioning.  It should really be packaged.  This is a set of scripts to define a power policies.  You can manage all the settings in one place here like the hard drive idle spindown time, CPU governor control, dynamic LCD backlight behavior based on running on battery or AC power supply.&lt;br /&gt;
&lt;br /&gt;
=== cpufreqd ===&lt;br /&gt;
&lt;br /&gt;
This is a useful daemon for regulating power.&lt;br /&gt;
&lt;br /&gt;
To install cpufreqd do:&lt;br /&gt;
&lt;br /&gt;
  sudo apk add cpufreqd&lt;br /&gt;
&lt;br /&gt;
Make sure you add the service:&lt;br /&gt;
&lt;br /&gt;
  sudo rc-update add cpufreqd&lt;br /&gt;
&lt;br /&gt;
=== LCD screen refresh rate ===&lt;br /&gt;
&lt;br /&gt;
The refresh rate sets the maximum framerate.  The more frames pushed the more energy consumed on the battery.  You want this adjusted dynamically per certain events.  For gaming, you want it to be the highest as possible for the laptop and vsync off.  For battery use and traveling, you want it capped at 60 FPS/60 Hz or lower but dynamically adjust when you plug in the AC power supply.  You can adjust the framerate with xrandr.  For movies and YouTube, you want 60FPS and vsync on.&lt;br /&gt;
&lt;br /&gt;
== Hacking the kernel ==&lt;br /&gt;
&lt;br /&gt;
You should refer to the [[Custom Kernel]] page for details.&lt;br /&gt;
&lt;br /&gt;
== Hibernation ==&lt;br /&gt;
&lt;br /&gt;
See [[Custom_Kernel#Hibernation_to_prevent_data_loss|Hibernation to prevent data loss]].&lt;br /&gt;
&lt;br /&gt;
== WiFi management ==&lt;br /&gt;
&lt;br /&gt;
Since you are using WiFi, you need a better WiFi management to quickly find open access WiFi access points.  We don&#039;t have all day to debug complexities of WiFi settings while away from home.&lt;br /&gt;
&lt;br /&gt;
To install NetworkManager do:&lt;br /&gt;
&lt;br /&gt;
  sudo apk add networkmanager&lt;br /&gt;
&lt;br /&gt;
To find WiFi access points use the &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt; ncurses interface.&lt;br /&gt;
&lt;br /&gt;
You also need other programs so install them as well:&lt;br /&gt;
&lt;br /&gt;
  apk add wpa-supplicant dhcpcd chrony macchanger wireless-tools iputils&lt;br /&gt;
&lt;br /&gt;
What these programs do:&lt;br /&gt;
&lt;br /&gt;
* wpa-supplicant -- for WPA encryption&lt;br /&gt;
* dhcpcd -- for getting a dynamic IP address&lt;br /&gt;
* chrony -- for fixing the time with the atomic clock&lt;br /&gt;
* wireless-tools -- for additional information&lt;br /&gt;
* macchanger -- for protecting against WiFi access discrimination or increased anonymity.  (optional)&lt;br /&gt;
* iputils -- for the ping command (optional)&lt;br /&gt;
&lt;br /&gt;
You also need to add those services:&lt;br /&gt;
&lt;br /&gt;
  rc-update add chrony&lt;br /&gt;
  rc-update add wpa-supplicant&lt;br /&gt;
  rc-update add dhcpcd&lt;br /&gt;
  rc-update add networkmanager&lt;br /&gt;
&lt;br /&gt;
To start the services manually (or just reboot):&lt;br /&gt;
&lt;br /&gt;
  /etc/init.d/chrony start&lt;br /&gt;
  /etc/init.d/wpa-supplicant start&lt;br /&gt;
  /etc/init.d/dhcpcd start&lt;br /&gt;
  /etc/init.d networkmanager start&lt;br /&gt;
&lt;br /&gt;
== Additional tools ==&lt;br /&gt;
&lt;br /&gt;
=== actkbd ===&lt;br /&gt;
&lt;br /&gt;
To control the sound with fn function keys, you need this daemon.  It is currently not in aports.  You could override the design and meaning of those keys with your own scripts and utilities.  This daemon gives you that freedom.&lt;br /&gt;
&lt;br /&gt;
If your laptop contains a brightness key, you want to set that up with this program.  See also [[Setting_up_a_laptop#Adjusting_the_backlight_dynamically | Adjusting the backlight dynamically]].&lt;br /&gt;
&lt;br /&gt;
=== secure-delete ===&lt;br /&gt;
&lt;br /&gt;
Want to prevent cold-boot attack or decrypted keys in memory falling in the wrong hands?  This maybe could work who knows?  From research from cold boot attack, the data can actually stay in memory in minutes, just enough time for a hacker to copy the contents of the memory to a USB thumb drive.&lt;br /&gt;
&lt;br /&gt;
To install secure-delete do:&lt;br /&gt;
&lt;br /&gt;
  sudo apk add secure-delete&lt;br /&gt;
&lt;br /&gt;
smem only works for unused ram.[https://github.com/gordonrs/thc-secure-delete]  If you use the vanilla kernel, this may work.  If you use grsecurity, it will automatically sanitize memory if you enable it (but not enabled by default in the Alpine hardened kernel) when the memory page is freed.[https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Sanitize_all_freed_memory]&lt;br /&gt;
&lt;br /&gt;
Close all important programs then call smem.&lt;br /&gt;
&lt;br /&gt;
You call smem in your shutdown script or auto-logoff script.&lt;br /&gt;
&lt;br /&gt;
You can call create a OpenRC shutdown script to run smem when most programs and services are closed.  This will erase all your sensitive plaintext private data just in case.&lt;br /&gt;
&lt;br /&gt;
You may want to create a wrapper script to call smem after your program closes.&lt;br /&gt;
&lt;br /&gt;
You need to write a custom script that does the following:&lt;br /&gt;
  * kill all running processes associated with your user account&lt;br /&gt;
  * auto logoff terminals&lt;br /&gt;
  * for the last terminal closed including all idle xservers, unmount your user home&lt;br /&gt;
  * (optional) use smem to wipe all your plaintext private data in memory after all closed programs in case of cold boot attack&lt;br /&gt;
&lt;br /&gt;
=== Sharing presentations over HDMI ===&lt;br /&gt;
&lt;br /&gt;
If you want to use your laptop to share presentation over HDMI connection, you need libxinerama and xrandr.&lt;br /&gt;
&lt;br /&gt;
To install libxinerama and xrandr do:&lt;br /&gt;
&lt;br /&gt;
  sudo apk add libxinerama xrandr&lt;br /&gt;
&lt;br /&gt;
== Important notes ==&lt;br /&gt;
&lt;br /&gt;
If you lose or break your USB key, that is it and you cannot decrypt your drive.  It would be wise to make a backup of it.&lt;br /&gt;
&lt;br /&gt;
By default, suspend-to-ram or hibernate will not sufficiently clear the AES encryption keys off ram in those phases which would invite a cold boot attack.  This has been covered by the TRESOR kernel patch.[https://en.wikipedia.org/wiki/TRESOR][https://www1.cs.fau.de/tresor]  This patch hasn&#039;t been updated since the 4.x kernel series.[https://www1.cs.fau.de/tresor].  This patch currently only works on 32-bit x86 Linux with SSE and MMX, and on processors with the AES-NI instruction set for x86_64 Linux.  TRESOR doesn&#039;t work with DMA attack, but it can be mitigated by disabling DMA.[https://old.iseclab.org/papers/acsac2012dma.pdf]  The 32-bit version of TRESOR has only a key size of 128.  The AES-NI version of TRESOR has a largest key size of 256 bit.  See [[Setting_up_a_laptop#Choosing_ciphers | Choosing ciphers]] for the number of rounds cracked.&lt;br /&gt;
&lt;br /&gt;
Loop-Amnesia works with LoopAES and is only for 64 bit Linux and only supports 128 bit keys but can result in data loss if their recommendations are not followed. [http://moongate.ydns.eu/amnesia.html]&lt;br /&gt;
&lt;br /&gt;
Please read the Wikipedia article on Cold Boot Attack especially the mitigation section.[https://en.wikipedia.org/wiki/Cold_boot_attack] Full disk encryption will not protect your data especially for older hardware if you do not have the proper mitigation (implying not full proof) prerequisites such as a patched kernel, memory scrambling, permanent memory module mounting for example.&lt;br /&gt;
&lt;br /&gt;
If you have a different but fully encrypted device like iPad, you still can be rubberhosed or interrogated with a perfect deniable encrypted laptop.  This guide doesn&#039;t protect you from that possibility.  If you do not want to be rubberhosed, don&#039;t possess those devices.&lt;br /&gt;
&lt;br /&gt;
Additional tips to mitigate against a DMA Attack to exfiltrate encryption keys:&lt;br /&gt;
&lt;br /&gt;
Disable DMA in the BIOS and set the password for the BIOS according to Wikipedia.[https://en.wikipedia.org/wiki/DMA_attack]&lt;br /&gt;
&lt;br /&gt;
Blacklist kernel modules that use DMA and any unused expansion modules (FireWire, CardBus, ExpressCard, Thunderbolt, USB 3.0, PCI Express and hotplug modules) that use DMA.&lt;br /&gt;
&lt;br /&gt;
You may need a custom (or customize a) BIOS or use Intel TXT or TPM which will authenticate the boot devices or boot from specific serial numbers not just any.  For cold boot attack, it is not required to remove the RAM but to to slow down the rate of decay of the RAM module with liquid air in addition an USB thumb drive containing an encryption key retriever bypassing the operating system.[https://youtu.be/XfUlRsE3ymQ]&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[category: desktop]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Firefox&amp;diff=16617</id>
		<title>Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Firefox&amp;diff=16617"/>
		<updated>2019-11-01T07:40:46Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &amp;gt; category: Web Browser&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox is a popular,open-source [https://en.wikipedia.org/wiki/Web_browser web browser].&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
To install Firefox, firstly enable the [[Enable_Community_Repository|Community repository]], then type in the terminal:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add firefox-esr}}&lt;br /&gt;
{{Tip|To play flash videos and games in Firefox, check [[Installing_Adobe_flash_player_for_Firefox|Installing Adobe flash player for Firefox]] page.}}&lt;br /&gt;
&lt;br /&gt;
== Stability ==&lt;br /&gt;
&lt;br /&gt;
If [https://support.mozilla.org/en-US/questions/1175046 tabs crash], then try disabling hardware acceleration, in the Preferences - Performance menu.&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://pkgs.alpinelinux.org/contents?file=firefox pkgs.alpinelinux.org]&lt;br /&gt;
* [https://git.alpinelinux.org/aports/log/?id=05e5fbf809000e016eee3fdfdaffb6e39a4956fd&amp;amp;qt=grep&amp;amp;q=firefox git.alpinelinux.org] - git repositories for alpine&lt;br /&gt;
&lt;br /&gt;
[[category: Web Browser]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Category:Web_Browser&amp;diff=16616</id>
		<title>Category:Web Browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Category:Web_Browser&amp;diff=16616"/>
		<updated>2019-11-01T07:40:05Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + category:Desktop&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category: Desktop]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/firefox-starter_(x86-64_)&amp;diff=16615</id>
		<title>User:Innsill/firefox-starter (x86-64 )</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/firefox-starter_(x86-64_)&amp;diff=16615"/>
		<updated>2019-10-31T19:19:02Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# &#039;&#039;&#039;[[Create a Bootable USB]]&#039;&#039;&#039; &amp;lt;br/&amp;gt;https://alpinelinux.org/downloads/&lt;br /&gt;
#* alpine-standard-3.10.3-x86_64.iso&lt;br /&gt;
#* alpine-standard-3.10.3-x86_64.iso.sha256&lt;br /&gt;
#** sha256sum --check alpine-standard-3.10.3-x86_64.iso.sha256&lt;br /&gt;
#* lsblk&lt;br /&gt;
#* sudo dd if=alpine-standard-3.10.3-x86_64.iso of=/dev/sdX&lt;br /&gt;
#&lt;br /&gt;
# &#039;&#039;&#039;[[Alpine setup scripts]]&#039;&#039;&#039; &amp;lt;/br&amp;gt; find / -name setup* -print | sort&lt;br /&gt;
#* setup-alpine&lt;br /&gt;
#* setup-xorg-base&lt;br /&gt;
#&lt;br /&gt;
# &#039;&#039;&#039;[https://pkgs.alpinelinux.org/packages?name=firefox-esr&amp;amp;branch=v3.10&amp;amp;repo=community&amp;amp;arch=x86_64 Firefox]&#039;&#039;&#039;  &lt;br /&gt;
#* vi /etc/apk/repositories&lt;br /&gt;
#* apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
#* apk add firefox-esr&lt;br /&gt;
#** apk list ttf-* | sort&lt;br /&gt;
#** TTFS=$(apk search -q ttf- | grep -v &#039;\-doc&#039;)&lt;br /&gt;
#** apk add $TTFS&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt;&lt;br /&gt;
#* adduser ff&lt;br /&gt;
#* su ff -&lt;br /&gt;
#** $vi .profile {{cat |/home/ff/.profile |&amp;lt;nowiki&amp;gt;startx&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
#** $vi .xinitrc {{cat |/home/ff/.xinitrc |&amp;lt;nowiki&amp;gt;exec firefox&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
#** $exit&lt;br /&gt;
#* vi /etc/inittab {{cat |/etc/inittab |&amp;lt;nowiki&amp;gt;tty1::respawn:/bin/login -f ff&lt;br /&gt;
tty2::respawn:/sbin/getty 38400 tty2&lt;br /&gt;
#tty3::respawn:/sbin/getty 38400 tty3 &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
#* Ctrl+Alt-F2 (login ff)&lt;br /&gt;
#* Ctrl+Alt-F1 (root, [[Sound Setup]])&lt;br /&gt;
#&lt;br /&gt;
# &#039;&#039;&#039;[[Connecting to a wireless access point]]&#039;&#039;&#039; &amp;lt;/br&amp;gt; ip link set eth0 down&lt;br /&gt;
#* apk add wireless-tools wpa_supplicant &lt;br /&gt;
#* ip link set wlan0 up&lt;br /&gt;
#* iwconfig wlan0 essid ...id&lt;br /&gt;
#* wpa_passphrase ...id ...phrase &amp;gt; /etc/wpa_supplicant/wpa_supplicant.conf {{cat |/etc/wpa_supplicant/wpa_supplicant.conf |&amp;lt;nowiki&amp;gt;network={&lt;br /&gt;
ssid=&amp;quot;...id&amp;quot;&lt;br /&gt;
scan_ssid=1&lt;br /&gt;
psk=...}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
#* wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf&lt;br /&gt;
#* udhcp -i wlan0 &lt;br /&gt;
#** vi /etc/network/interfaces {{cat |/etc/network/interfaces |&amp;lt;nowiki&amp;gt;auto wlan0&lt;br /&gt;
iface wlan0 inet dhcp&amp;lt;/nowiki&amp;gt;}} &lt;br /&gt;
#** rc-update add wpa_supplicant boot&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://dev.to/nesterow/setup-minimal-kiosk-environment-with-alpine-linux-27b Raspberry Pi. Setup minimal kiosk environment with Alpine Linux] Anton Nesterov 2019&lt;br /&gt;
* [[MATE]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/firefox-starter_(x86-64_)&amp;diff=16614</id>
		<title>User:Innsill/firefox-starter (x86-64 )</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Innsill/firefox-starter_(x86-64_)&amp;diff=16614"/>
		<updated>2019-10-31T12:26:37Z</updated>

		<summary type="html">&lt;p&gt;Innsill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# &#039;&#039;&#039;[[Create a Bootable USB]]&#039;&#039;&#039; &amp;lt;br/&amp;gt;https://alpinelinux.org/downloads/&lt;br /&gt;
#* alpine-standard-3.10.3-x86_64.iso&lt;br /&gt;
#* alpine-standard-3.10.3-x86_64.iso.sha256&lt;br /&gt;
#** sha256sum --check alpine-standard-3.10.3-x86_64.iso.sha256&lt;br /&gt;
#* lsblk&lt;br /&gt;
#* sudo dd if=alpine-standard-3.10.3-x86_64.iso of=/dev/sdX&lt;br /&gt;
#&lt;br /&gt;
# &#039;&#039;&#039;[[Alpine setup scripts]]&#039;&#039;&#039; &amp;lt;/br&amp;gt; find / -name setup* -print | sort&lt;br /&gt;
#* setup-alpine&lt;br /&gt;
#* setup-xorg-base&lt;br /&gt;
#&lt;br /&gt;
# &#039;&#039;&#039;[https://pkgs.alpinelinux.org/contents?file=firefox Firefox ?]&#039;&#039;&#039;  &#039;&#039;&#039;&amp;lt;font color=darkred&amp;gt;________________Version 68.2.0-r0 broken: error relocating /usr/lib/firefox&amp;lt;/font&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
#* vi /etc/apk/repositories&lt;br /&gt;
#* apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
#* apk add firefox-esr&lt;br /&gt;
#** apk list ttf-* | sort&lt;br /&gt;
#** TTFS=$(apk search -q ttf- | grep -v &#039;\-doc&#039;)&lt;br /&gt;
#** apk add $TTFS&lt;br /&gt;
#&lt;br /&gt;
# &amp;lt;/br&amp;gt;&lt;br /&gt;
#* adduser ff&lt;br /&gt;
#* su ff -&lt;br /&gt;
#** $vi .profile {{cat |/home/ff/.profile |&amp;lt;nowiki&amp;gt;startx&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
#** $vi .xinitrc {{cat |/home/ff/.xinitrc |&amp;lt;nowiki&amp;gt;exec firefox&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
#** $exit&lt;br /&gt;
#* vi /etc/inittab {{cat |/etc/inittab |&amp;lt;nowiki&amp;gt;tty1::respawn:/bin/login -f ff&lt;br /&gt;
tty2::respawn:/sbin/getty 38400 tty2&lt;br /&gt;
#tty3::respawn:/sbin/getty 38400 tty3 &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
#* Ctrl+Alt-F2 (login ff)&lt;br /&gt;
#* Ctrl+Alt-F1 (root, [[Sound Setup]])&lt;br /&gt;
#&lt;br /&gt;
# &#039;&#039;&#039;[[Connecting to a wireless access point]]&#039;&#039;&#039; &amp;lt;/br&amp;gt; ip link set eth0 down&lt;br /&gt;
#* apk add wireless-tools wpa_supplicant &lt;br /&gt;
#* ip link set wlan0 up&lt;br /&gt;
#* iwconfig wlan0 essid ...id&lt;br /&gt;
#* wpa_passphrase ...id ...phrase &amp;gt; /etc/wpa_supplicant/wpa_supplicant.conf {{cat |/etc/wpa_supplicant/wpa_supplicant.conf |&amp;lt;nowiki&amp;gt;network={&lt;br /&gt;
ssid=&amp;quot;...id&amp;quot;&lt;br /&gt;
scan_ssid=1&lt;br /&gt;
psk=...}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
#* wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf&lt;br /&gt;
#* udhcp -i wlan0 &lt;br /&gt;
#** vi /etc/network/interfaces {{cat |/etc/network/interfaces |&amp;lt;nowiki&amp;gt;auto wlan0&lt;br /&gt;
iface wlan0 inet dhcp&amp;lt;/nowiki&amp;gt;}} &lt;br /&gt;
#** rc-update add wpa_supplicant boot&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://dev.to/nesterow/setup-minimal-kiosk-environment-with-alpine-linux-27b Raspberry Pi. Setup minimal kiosk environment with Alpine Linux] Anton Nesterov 2019&lt;br /&gt;
* [[MATE]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Firefox&amp;diff=16613</id>
		<title>Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Firefox&amp;diff=16613"/>
		<updated>2019-10-31T11:42:36Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox is a popular,open-source [https://en.wikipedia.org/wiki/Web_browser web browser].&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
To install Firefox, firstly enable the [[Enable_Community_Repository|Community repository]], then type in the terminal:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add firefox-esr}}&lt;br /&gt;
{{Tip|To play flash videos and games in Firefox, check [[Installing_Adobe_flash_player_for_Firefox|Installing Adobe flash player for Firefox]] page.}}&lt;br /&gt;
&lt;br /&gt;
== Stability ==&lt;br /&gt;
&lt;br /&gt;
If [https://support.mozilla.org/en-US/questions/1175046 tabs crash], then try disabling hardware acceleration, in the Preferences - Performance menu.&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://pkgs.alpinelinux.org/contents?file=firefox pkgs.alpinelinux.org]&lt;br /&gt;
* [https://git.alpinelinux.org/aports/log/?id=05e5fbf809000e016eee3fdfdaffb6e39a4956fd&amp;amp;qt=grep&amp;amp;q=firefox git.alpinelinux.org] - git repositories for alpine&lt;br /&gt;
&lt;br /&gt;
[[category:Desktop]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_on_ARM&amp;diff=16612</id>
		<title>Alpine on ARM</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_on_ARM&amp;diff=16612"/>
		<updated>2019-10-31T09:29:49Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
{{Draft}}&lt;br /&gt;
{{Style}}&lt;br /&gt;
{{Move|ARM SOCs}}&lt;br /&gt;
&lt;br /&gt;
(this page is WIP, most info are incomplete and some might be incorrect)&lt;br /&gt;
==Supported SoCs==&lt;br /&gt;
Currently Alpine supports armv6/armhf arch on the following SoCs&lt;br /&gt;
(This is taken from the DTBs which Alpine includes)&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible&amp;quot;&lt;br /&gt;
| am335x-base0033&lt;br /&gt;
| am335x-bone&lt;br /&gt;
| am335x-boneblack&lt;br /&gt;
| am335x-evm&lt;br /&gt;
| am335x-evmsk&lt;br /&gt;
| am335x-nano&lt;br /&gt;
| am335x-pepper&lt;br /&gt;
| am3517-craneboard&lt;br /&gt;
| am3517-evm&lt;br /&gt;
| am3517_mt_ventoux&lt;br /&gt;
| am437x-gp-evm&lt;br /&gt;
|-&lt;br /&gt;
| am437x-sk-evm&lt;br /&gt;
| am43x-epos-evm&lt;br /&gt;
| exynos4210-origen&lt;br /&gt;
| exynos4210-smdkv310&lt;br /&gt;
| exynos4210-trats&lt;br /&gt;
| exynos4210-universal_c210&lt;br /&gt;
| exynos4412-odroidu3&lt;br /&gt;
| exynos4412-odroidx&lt;br /&gt;
| exynos4412-odroidx2&lt;br /&gt;
| exynos4412-origen&lt;br /&gt;
| exynos4412-smdk4412&lt;br /&gt;
| exynos4412-tiny4412&lt;br /&gt;
|-&lt;br /&gt;
| exynos4412-trats2&lt;br /&gt;
| exynos5250-arndale&lt;br /&gt;
| exynos5250-smdk5250&lt;br /&gt;
| exynos5250-snow&lt;br /&gt;
| exynos5260-xyref5260&lt;br /&gt;
| exynos5410-smdk5410&lt;br /&gt;
| exynos5420-arndale-octa&lt;br /&gt;
| exynos5420-peach-pit&lt;br /&gt;
| exynos5420-smdk5420&lt;br /&gt;
| exynos5440-sd5v1&lt;br /&gt;
| exynos5440-ssdk5440&lt;br /&gt;
| exynos5800-peach-pi&lt;br /&gt;
|-&lt;br /&gt;
| imx1-ads&lt;br /&gt;
| imx1-apf9328&lt;br /&gt;
| imx25-eukrea-mbimxsd25-baseboard-cmo-qvga&lt;br /&gt;
| imx25-eukrea-mbimxsd25-baseboard-dvi-svga&lt;br /&gt;
| imx25-eukrea-mbimxsd25-baseboard-dvi-vga&lt;br /&gt;
| imx25-eukrea-mbimxsd25-baseboard&lt;br /&gt;
| imx25-karo-tx25&lt;br /&gt;
| imx25-pdk&lt;br /&gt;
| imx27-apf27&lt;br /&gt;
| imx27-apf27dev&lt;br /&gt;
| imx27-eukrea-mbimxsd27-baseboard&lt;br /&gt;
| imx27-pdk&lt;br /&gt;
|-&lt;br /&gt;
| imx27-phytec-phycard-s-rdk&lt;br /&gt;
| imx27-phytec-phycore-rdk&lt;br /&gt;
| imx31-bug&lt;br /&gt;
| imx35-eukrea-mbimxsd35-baseboard&lt;br /&gt;
| imx35-pdk&lt;br /&gt;
| imx50-evk&lt;br /&gt;
| imx51-apf51&lt;br /&gt;
| imx51-apf51dev&lt;br /&gt;
| imx51-babbage&lt;br /&gt;
| imx51-digi-connectcore-jsk&lt;br /&gt;
| imx51-eukrea-mbimxsd51-baseboard&lt;br /&gt;
| imx53-ard&lt;br /&gt;
|-&lt;br /&gt;
| imx53-m53evk&lt;br /&gt;
| imx53-mba53&lt;br /&gt;
| imx53-qsb&lt;br /&gt;
| imx53-qsrb&lt;br /&gt;
| imx53-smd&lt;br /&gt;
| imx53-tx53-x03x&lt;br /&gt;
| imx53-tx53-x13x&lt;br /&gt;
| imx53-voipac-bsb&lt;br /&gt;
| imx6dl-aristainetos_4&lt;br /&gt;
| imx6dl-aristainetos_7&lt;br /&gt;
| imx6dl-cubox-i&lt;br /&gt;
| imx6dl-dfi-fs700-m60&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-gw51xx&lt;br /&gt;
| imx6dl-gw52xx&lt;br /&gt;
| imx6dl-gw53xx&lt;br /&gt;
| imx6dl-gw54xx&lt;br /&gt;
| imx6dl-gw552x&lt;br /&gt;
| imx6dl-hummingboard&lt;br /&gt;
| imx6dl-nitrogen6x&lt;br /&gt;
| imx6dl-phytec-pbab01&lt;br /&gt;
| imx6dl-rex-basic&lt;br /&gt;
| imx6dl-riotboard&lt;br /&gt;
| imx6dl-sabreauto&lt;br /&gt;
| imx6dl-sabrelite&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-sabresd&lt;br /&gt;
| imx6dl-tx6dl-comtft&lt;br /&gt;
| imx6dl-tx6u-801x&lt;br /&gt;
| imx6dl-tx6u-811x&lt;br /&gt;
| imx6dl-wandboard-revb1&lt;br /&gt;
| imx6dl-wandboard&lt;br /&gt;
| imx6q-arm2&lt;br /&gt;
| imx6q-cm-fx6&lt;br /&gt;
| imx6q-cubox-i&lt;br /&gt;
| imx6q-dfi-fs700-m60&lt;br /&gt;
| imx6q-dmo-edmqmx6&lt;br /&gt;
| imx6q-gk802&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-gw51xx&lt;br /&gt;
| imx6q-gw52xx&lt;br /&gt;
| imx6q-gw53xx&lt;br /&gt;
| imx6q-gw5400-a&lt;br /&gt;
| imx6q-gw54xx&lt;br /&gt;
| imx6q-gw552x&lt;br /&gt;
| imx6q-hummingboard&lt;br /&gt;
| imx6q-nitrogen6x&lt;br /&gt;
| imx6q-phytec-pbab01&lt;br /&gt;
| imx6q-rex-pro&lt;br /&gt;
| imx6q-sabreauto&lt;br /&gt;
| imx6q-sabrelite&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-sabresd&lt;br /&gt;
| imx6q-sbc6x&lt;br /&gt;
| imx6q-tx6q-1010-comtft&lt;br /&gt;
| imx6q-tx6q-1010&lt;br /&gt;
| imx6q-tx6q-1020-comtft&lt;br /&gt;
| imx6q-tx6q-1020&lt;br /&gt;
| imx6q-tx6q-1110&lt;br /&gt;
| imx6q-udoo&lt;br /&gt;
| imx6q-wandboard-revb1&lt;br /&gt;
| imx6q-wandboard&lt;br /&gt;
| imx6sl-evk&lt;br /&gt;
| imx6sx-sdb&lt;br /&gt;
|-&lt;br /&gt;
| omap3-beagle-xm-ab&lt;br /&gt;
| omap3-beagle-xm&lt;br /&gt;
| omap3-beagle&lt;br /&gt;
| omap3-cm-t3517&lt;br /&gt;
| omap3-cm-t3530&lt;br /&gt;
| omap3-cm-t3730&lt;br /&gt;
| omap3-devkit8000&lt;br /&gt;
| omap3-evm-37xx&lt;br /&gt;
| omap3-evm&lt;br /&gt;
| omap3-gta04a3&lt;br /&gt;
| omap3-gta04a4&lt;br /&gt;
| omap3-gta04a5&lt;br /&gt;
|-&lt;br /&gt;
| omap3-ha-lcd&lt;br /&gt;
| omap3-ha&lt;br /&gt;
| omap3-igep0020&lt;br /&gt;
| omap3-igep0030&lt;br /&gt;
| omap3-ldp&lt;br /&gt;
| omap3-lilly-dbb056&lt;br /&gt;
| omap3-n9&lt;br /&gt;
| omap3-n900&lt;br /&gt;
| omap3-n950&lt;br /&gt;
| omap3-overo-alto35&lt;br /&gt;
| omap3-overo-chestnut43&lt;br /&gt;
| omap3-overo-gallop43&lt;br /&gt;
|-&lt;br /&gt;
| omap3-overo-palo43&lt;br /&gt;
| omap3-overo-storm-alto35&lt;br /&gt;
| omap3-overo-storm-chestnut43&lt;br /&gt;
| omap3-overo-storm-gallop43&lt;br /&gt;
| omap3-overo-storm-palo43&lt;br /&gt;
| omap3-overo-storm-summit&lt;br /&gt;
| omap3-overo-storm-tobi&lt;br /&gt;
| omap3-overo-summit&lt;br /&gt;
| omap3-overo-tobi&lt;br /&gt;
| omap3-sbc-t3517&lt;br /&gt;
| omap3-sbc-t3530&lt;br /&gt;
| omap3-sbc-t3730&lt;br /&gt;
|-&lt;br /&gt;
| omap3-thunder&lt;br /&gt;
| omap3-zoom3&lt;br /&gt;
| omap3430-sdp&lt;br /&gt;
| omap4-duovero-parlor&lt;br /&gt;
| omap4-panda-a4&lt;br /&gt;
| omap4-panda-es&lt;br /&gt;
| omap4-panda&lt;br /&gt;
| omap4-sdp-es23plus&lt;br /&gt;
| omap4-sdp&lt;br /&gt;
| omap4-var-dvk-om44&lt;br /&gt;
| omap4-var-stk-om44&lt;br /&gt;
| omap5-cm-t54&lt;br /&gt;
|-&lt;br /&gt;
| omap5-sbc-t54&lt;br /&gt;
| omap5-uevm&lt;br /&gt;
| qcom-apq8064-cm-qs600&lt;br /&gt;
| qcom-apq8064-ifc6410&lt;br /&gt;
| qcom-apq8074-dragonboard&lt;br /&gt;
| qcom-apq8084-ifc6540&lt;br /&gt;
| qcom-apq8084-mtp&lt;br /&gt;
| qcom-ipq8064-ap148&lt;br /&gt;
| qcom-msm8660-surf&lt;br /&gt;
| qcom-msm8960-cdp&lt;br /&gt;
| qcom-msm8974-sony-xperia-honami&lt;br /&gt;
| sun4i-a10-a1000&lt;br /&gt;
|-&lt;br /&gt;
| sun4i-a10-ba10-tvbox&lt;br /&gt;
| sun4i-a10-cubieboard&lt;br /&gt;
| sun4i-a10-hackberry&lt;br /&gt;
| sun4i-a10-inet97fv2&lt;br /&gt;
| sun4i-a10-mini-xplus&lt;br /&gt;
| sun4i-a10-olinuxino-lime&lt;br /&gt;
| sun4i-a10-pcduino&lt;br /&gt;
| sun5i-a10s-olinuxino-micro&lt;br /&gt;
| sun5i-a10s-r7-tv-dongle&lt;br /&gt;
| sun5i-a13-hsg-h702&lt;br /&gt;
| sun5i-a13-olinuxino-micro&lt;br /&gt;
| sun5i-a13-olinuxino&lt;br /&gt;
|-&lt;br /&gt;
| sun6i-a31-app4-evb1&lt;br /&gt;
| sun6i-a31-colombus&lt;br /&gt;
| sun6i-a31-hummingbird&lt;br /&gt;
| sun6i-a31-m9&lt;br /&gt;
| sun7i-a20-cubieboard2&lt;br /&gt;
| sun7i-a20-cubietruck&lt;br /&gt;
| sun7i-a20-hummingbird&lt;br /&gt;
| sun7i-a20-i12-tvbox&lt;br /&gt;
| sun7i-a20-olinuxino-lime&lt;br /&gt;
| sun7i-a20-olinuxino-micro&lt;br /&gt;
| sun7i-a20-pcduino3&lt;br /&gt;
| sun8i-a23-ippo-q8h-v5&lt;br /&gt;
|-&lt;br /&gt;
| vexpress-v2p-ca15-tc1&lt;br /&gt;
| vexpress-v2p-ca15_a7&lt;br /&gt;
| vexpress-v2p-ca5s&lt;br /&gt;
| vexpress-v2p-ca9&lt;br /&gt;
| vf610-colibri-eval-v3&lt;br /&gt;
| vf610-cosmic&lt;br /&gt;
| vf610-twr&lt;br /&gt;
|}&lt;br /&gt;
===Install Alpine on supported SoCs===&lt;br /&gt;
(If anyone has any of the above device and has successfully install Alpine on it, please consider to add the missing info)&lt;br /&gt;
&lt;br /&gt;
==Unupported SoCs==&lt;br /&gt;
If you have an armv6/armv7 SoC which is not listed above but is supported by mainline uboot/kernel then it&#039;s still possible to install Alpine&lt;br /&gt;
===Requiremnets===&lt;br /&gt;
* Alpine&#039;s forked uboot to support tarballs (fabled?)&lt;br /&gt;
* serial console&lt;br /&gt;
* crosscompiler/toolchain if you can not compile natively&lt;br /&gt;
===The embedded world===&lt;br /&gt;
A lot of the SoCs have their own way of doing things, although they use uboot and Linux kernel but often they are heavily modified to suit easy flashing of &amp;quot;ROMs&amp;quot; or other unknown reasons, e.g. Rockchip&#039;s notion &amp;quot;partition&amp;quot; are neither DOS nor GPT partitions.&lt;br /&gt;
We are to discuss to install Alpine in a more standard way like x86 with either DOS or GPT partitions. You will most likely have to install/flash the mainline uboot, which can be non-destructive if you use external storage.&lt;br /&gt;
&lt;br /&gt;
====Storage====&lt;br /&gt;
One can load uboot from the following block devices if it&#039;s supported.&lt;br /&gt;
* NAND&lt;br /&gt;
* eMMC&lt;br /&gt;
* SD card&lt;br /&gt;
* USB&lt;br /&gt;
&lt;br /&gt;
====Power on====&lt;br /&gt;
Some SoCs need both SPL and uboot, you need to check uboot for your board. Most (if not all) boards boots from the internal storage first (either NAND or eMMC) you will have to check documentation of your board if you wish to boot the SPL/uboot from SD/USB.&lt;br /&gt;
&lt;br /&gt;
One can view SPL+uboot as BIOS and boot-loader on PC. Think that you could put the BIOS on an external storage :D&lt;br /&gt;
&lt;br /&gt;
Once you have loaded the &amp;quot;standard&amp;quot; uboot, things are more or less like on x86.&lt;br /&gt;
&lt;br /&gt;
====Partitioning====&lt;br /&gt;
Either DOS or GPT patitions should work, start of the first partition should be on block 2048 so there are space for SPL/uboot and marked bootable (with&lt;br /&gt;
the MBR bootable flag, or GPT legacy_bios_bootable attribute).&lt;br /&gt;
* SPL starts at block 64 (please consult the docs for your board)&lt;br /&gt;
* uboot starts at block 256 (please consult the docs for your board)&lt;br /&gt;
Just dd SPL and boot with the correct offset to the media you wish to boot&lt;br /&gt;
&lt;br /&gt;
====Booting Linux kernel====&lt;br /&gt;
* uboot uses extlinux.conf file to locate the kernel/initramfs/... just like syslinx, you need to put that file on the partitions which is marked bootable in the /boot directory&lt;br /&gt;
* there should be an extra line &amp;quot;FDTDIR&amp;quot; which points to the DTBs&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
label Fedora (3.17.0-0.rc4.git2.1.fc22.armv7hl) 22 (Rawhide)&lt;br /&gt;
	kernel /boot/vmlinuz-3.17.0-0.rc4.git2.1.fc22.armv7hl&lt;br /&gt;
	append ro root=UUID=8eac677f-8ea8-4270-8479-d5ddbb797450 console=ttyS0,115200n8 LANG=en_US.UTF-8 drm.debug=0xf&lt;br /&gt;
	fdtdir /boot/dtb-3.17.0-0.rc4.git2.1.fc22.armv7hl&lt;br /&gt;
	initrd /boot/initramfs-3.17.0-0.rc4.git2.1.fc22.armv7hl.img&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using QEMU==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qemu-system-arm -M vexpress-a9 -kernel zImage -initrd initramfs-grsec -dtb vexpress-v2p-ca9.dtb -hda hda.img -serial stdio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[DIY Fully working Alpine Linux for Allwinner and Other ARM SOCs]]&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
* [http://www.armadeus.org/wiki/index.php?title=Kernel-with-device-tree dtb (Device Tree Binary)]&lt;br /&gt;
* [https://forum.odroid.com/viewtopic.php?t=30459 Odroid-C2] 2018 &#039;&#039;([https://archlinuxarm.org/platforms/armv8/amlogic/odroid-c2 ARMv8, AArch64];  [https://forum.odroid.com/viewtopic.php?f=138&amp;amp;t=32608 Alpine Linux custom build])&#039;&#039;&lt;br /&gt;
* [https://cusdeb.com/ CusDeb.com] - bootstrap SD-card images for single-board computers online; &#039;&#039;([https://github.com/tolstoyevsky/pieman Pieman])&#039;&#039;&lt;br /&gt;
* [https://kernelci.org/soc/ &amp;lt;s&amp;gt;Available&amp;lt;/s&amp;gt; SoCs]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[category:ARM]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Bootloaders&amp;diff=16611</id>
		<title>Bootloaders</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Bootloaders&amp;diff=16611"/>
		<updated>2019-10-31T08:46:04Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By default Alpine uses Syslinux as bootloader.&lt;br /&gt;
This page shows the basic steps you need to perform, if you for any reason want to switch bootloaders or apply some manual configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Installing Syslinux =&lt;br /&gt;
&lt;br /&gt;
If you want to switch from another bootloader back to Syslinux, or if you for some reason want to install Syslinux manually, the following steps are required.&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;code&amp;gt;syslinux&amp;lt;/code&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;apk add syslinux&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using GPT partitions, install the GPT MBR onto the drive you want to install the bootloader on (in this case &amp;lt;code&amp;gt;/dev/sda&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;dd bs=440 count=1 conv=notrunc if=/usr/share/syslinux/gptmbr.bin of=/dev/sda&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or if you&#039;re using DOS partitions, install the DOS MBR instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;dd bs=440 count=1 conv=notrunc if=/usr/share/syslinux/mbr.bin of=/dev/sda&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- See also: http://www.syslinux.org/wiki/index.php?title=Mbr --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next install the required Syslinux binaries. Despite being called &amp;lt;code&amp;gt;extlinux&amp;lt;/code&amp;gt;, Syslinux supports booting from FAT12/16/32, NTFS, ext2/3/4, Btrfs, XFS, and UFS/FFS filesystems.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;extlinux --install /boot&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The configuration file is located in &amp;lt;code&amp;gt;/boot/extlinux.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
Alpine ships with a script called &amp;lt;code&amp;gt;update-extlinux&amp;lt;/code&amp;gt; which automatically (re)generates this file, for example on updates to Syslinux.&lt;br /&gt;
The settings for this script can be found in &amp;lt;code&amp;gt;/etc/update-extlinux.conf&amp;lt;/code&amp;gt;, including the option to disable automatic overwriting of &amp;lt;code&amp;gt;/boot/extlinux.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
You can also place additional menu entries in the &amp;lt;code&amp;gt;/etc/update-extlinux.d/&amp;lt;/code&amp;gt; directory, e.g. for dual booting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EFI ==&lt;br /&gt;
&lt;br /&gt;
{{Todo|Work in progress. This should at least get you started.}}&lt;br /&gt;
&lt;br /&gt;
Assuming &amp;lt;code&amp;gt;/mnt&amp;lt;/code&amp;gt; is a FAT32 partition of type EF00 and &amp;lt;code&amp;gt;/boot&amp;lt;/code&amp;gt; belongs to the rootfs created after running &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /mnt/EFI/syslinux&lt;br /&gt;
cp /usr/share/syslinux/efi64/* /mnt/EFI/syslinux/&lt;br /&gt;
cp /boot/extlinux.conf /mnt/EFI/syslinux/syslinux.cfg&lt;br /&gt;
cp /boot/vmlinuz* /mnt/&lt;br /&gt;
cp /boot/initramfs* /mnt/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may need to modify &amp;lt;code&amp;gt;/mnt/EFI/syslinux/syslinux.cfg&amp;lt;/code&amp;gt; to change the paths to absolute paths (just add a / in front of the vmlinuz/initramfs entries),&lt;br /&gt;
or copy the files to &amp;lt;code&amp;gt;/mnt/EFI/syslinux&amp;lt;/code&amp;gt; instead (XXX: untested).&lt;br /&gt;
&lt;br /&gt;
= GRUB =&lt;br /&gt;
&lt;br /&gt;
To install GRUB in BIOS mode, (optionally) remove the Syslinux package and install the required GRUB packages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;apk del syslinux&lt;br /&gt;
apk add grub grub-bios&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For EFI, install Grub&#039;s EFI package instead. Note that &amp;lt;code&amp;gt;/boot&amp;lt;/code&amp;gt; has to be an EFI compatible filesystem like FAT32.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;apk add grub-efi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next install the MBR and GRUB binaries to disk for BIOS mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;grub-install /dev/vda&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For EFI mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;grub-install --target=x86_64-efi --efi-directory=/boot&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GRUB ships with an automatic config generator, including some automatic detection of other operating systems installed on the device:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;grub-mkconfig -o /boot/grub/grub.cfg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script can be configured via the &amp;lt;code&amp;gt;/etc/default/grub&amp;lt;/code&amp;gt; file.&lt;br /&gt;
See [https://www.gnu.org/software/grub/manual/html_node/Simple-configuration.html] for a list of available options.&lt;br /&gt;
&lt;br /&gt;
= =&lt;br /&gt;
* [https://www.denx.de/wiki/U-Boot/ReleaseCycle U-Boot Release Cycle]&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Booting]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Manually_editing_a_existing_apkovl&amp;diff=16610</id>
		<title>Manually editing a existing apkovl</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Manually_editing_a_existing_apkovl&amp;diff=16610"/>
		<updated>2019-10-31T08:12:54Z</updated>

		<summary type="html">&lt;p&gt;Innsill: Category:Storage &amp;gt; category: LBU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
You might end up in a situation when you find it necessary to edit a apkovl (without having to boot a box using the apkovl itself).&lt;br /&gt;
&lt;br /&gt;
== Unpack the apkovl ==&lt;br /&gt;
Unpack the apkovl into a temp dir.&lt;br /&gt;
{{Cmd|mkdir /tmp/testbox&lt;br /&gt;
 tar -xvzf testbox.apkovl.tar.gz -C /tmp/testbox/}}&lt;br /&gt;
&lt;br /&gt;
== Make your modifications ==&lt;br /&gt;
Now do your modifications in &#039;/tmp/testbox/&#039;&amp;lt;BR&amp;gt;&lt;br /&gt;
* Edit files/folders&lt;br /&gt;
* Add files/folders&lt;br /&gt;
* Remove files/folders&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
== Pack the apkovl ==&lt;br /&gt;
When your modifications are done you should pack your apkovl&lt;br /&gt;
{{Cmd|cd /tmp/testbox&lt;br /&gt;
 tar -czf /tmp/testbox.apkovl.tar.gz *}}&lt;br /&gt;
&lt;br /&gt;
== Replace the original apkovl ==&lt;br /&gt;
Now you have a new/modified apkovl.&amp;lt;BR&amp;gt;&lt;br /&gt;
Replace your original apkovl (on your media) with &#039;/tmp/testbox.apkovl.tar.gz&#039; and boot your Alpine.&lt;br /&gt;
&lt;br /&gt;
[[Category:LBU]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Include:Upgrading_Alpine_environmentvars&amp;diff=16609</id>
		<title>Include:Upgrading Alpine environmentvars</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Include:Upgrading_Alpine_environmentvars&amp;diff=16609"/>
		<updated>2019-10-31T08:10:02Z</updated>

		<summary type="html">&lt;p&gt;Innsill: Category:Storage &amp;gt; category: LBU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Setup environment variables ===&lt;br /&gt;
To make the documentation a bit more &amp;quot;generic&amp;quot; we start by setting some environment variables.&lt;br /&gt;
{{Cmd|vi /etc/lbu/lbu.conf}}&lt;br /&gt;
Make sure that the variable &amp;lt;code&amp;gt;LBU_MEDIA&amp;lt;/code&amp;gt; is not commented (by removing the leading &#039;#&#039;).&lt;br /&gt;
&lt;br /&gt;
You also need to set a appropriate value for your &amp;lt;code&amp;gt;LBU_MEDIA&amp;lt;/code&amp;gt;. The media you choose will be the media where you store your settings/configuration.&lt;br /&gt;
&lt;br /&gt;
{{Note|Even if you have you alpine installed on CF, HD or USB you can still choose to save your config on some other media that suits your needs. But remember that both the media where you have your Alpine system AND the media where you have your config need to be in your box when booting it.}}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
 LBU_MEDIA=usb&lt;br /&gt;
or:&lt;br /&gt;
 LBU_MEDIA=sda1&lt;br /&gt;
&lt;br /&gt;
Now that you have your {{Path|/etc/lbu/lbu.conf}} configured for your needs, we will set the environment variables (note the leading &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;).&lt;br /&gt;
{{Cmd|. /etc/lbu/lbu.conf}}&lt;br /&gt;
&lt;br /&gt;
You can test if your environment variable was set:&lt;br /&gt;
{{Cmd|echo $LBU_MEDIA}}&lt;br /&gt;
It should output something like &amp;lt;code&amp;gt;usb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sda1&amp;lt;/code&amp;gt;, or whatever you just configured.&lt;br /&gt;
&lt;br /&gt;
=== Back up your config ===&lt;br /&gt;
Before starting to upgrade, it&#039;s wise to save your configuration.&lt;br /&gt;
{{Cmd|lbu ci}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:LBU]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Back_Up_a_Flash_Memory_Installation&amp;diff=16608</id>
		<title>Back Up a Flash Memory Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Back_Up_a_Flash_Memory_Installation&amp;diff=16608"/>
		<updated>2019-10-31T08:07:34Z</updated>

		<summary type="html">&lt;p&gt;Innsill: Category:Storage &amp;gt; category: LBU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you have installed Alpine Linux on flash memory, such as a CF card or USB stick, you may wish to create a backup. &lt;br /&gt;
&lt;br /&gt;
This procedure may also be used to migrate an Alpine Linux installation from one form of flash media to another.&lt;br /&gt;
&lt;br /&gt;
== Install Alpine Linux on the backup medium ==&lt;br /&gt;
&lt;br /&gt;
Follow the instructions at [[Create a Bootable USB]] to install Alpine Linux on the backup medium (CF/USB). Install the same version of Alpine Linux as you have on the running system (you can determine this using the command &amp;quot;cat /etc/alpine-release&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Copy over the cache directory ==&lt;br /&gt;
&lt;br /&gt;
If you have [[Alpine Linux package management#Local_Cache |enabled APK caching]] for packages that are downloaded over the Internet, then you should copy over the &amp;quot;cache&amp;quot; directory from the running system to your backup medium.&lt;br /&gt;
&lt;br /&gt;
For example, if the backup medium is labeled &amp;quot;sdb&amp;quot; (use the command &amp;quot;dmesg&amp;quot; to see what name your recently inserted device has recieved), and the system is booted from USB, you would run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mount -t vfat /dev/sdb1 /mnt&lt;br /&gt;
cp -a /media/usbdisk/cache /mnt/&lt;br /&gt;
umount /mnt}}&lt;br /&gt;
&lt;br /&gt;
== Copy over the configuration overlay file (apkovl) ==&lt;br /&gt;
&lt;br /&gt;
All the custom configuration of your system is stored in a file named HOSTNAME.apkovl.tar.gz, where HOSTNAME is the locally configured hostname of the system (see the file /etc/hostname).&lt;br /&gt;
&lt;br /&gt;
Simply copy this file to the root of your backup medium.&lt;br /&gt;
&lt;br /&gt;
For example, if the backup medium is labeled &amp;quot;sdb&amp;quot; (use the command &amp;quot;dmesg&amp;quot; to see what name your recently inserted device has recieved), and the system is booted from USB, you would run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mount -t vfat /dev/sdb1 /mnt&lt;br /&gt;
cp -a /media/usbdisk/*.apkovl.tar.gz /mnt/&lt;br /&gt;
umount /mnt}}&lt;br /&gt;
&lt;br /&gt;
[[Category:LBU]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_local_backup&amp;diff=16607</id>
		<title>Alpine local backup</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_local_backup&amp;diff=16607"/>
		<updated>2019-10-31T08:00:54Z</updated>

		<summary type="html">&lt;p&gt;Innsill: Category:Storage &amp;gt; category: LBU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When you boot Alpine Linux in a run-from-RAM configuration, Alpine itself only loads a few required packages. But you probably want to do some personal adjustments (e.g., [[Alpine_package_management|installing a package]] or doing some configuration). Since everything in RAM will get lost next time the box is rebooted or shut down, you will need to permanently save those modifications and adjustments. This is where &amp;lt;code&amp;gt;lbu&amp;lt;/code&amp;gt; comes in handy!&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you installed Alpine on HDD you don&#039;t need to use &amp;lt;code&amp;gt;lbu&amp;lt;/code&amp;gt;. All your modifications have already been directly written to your HDD. However, &amp;lt;code&amp;gt;lbu&amp;lt;/code&amp;gt; can still be useful for some maintenance tasks.}}&lt;br /&gt;
&lt;br /&gt;
The first thing you need to know is this: &#039;&#039;&#039;By default &amp;lt;code&amp;gt;lbu&amp;lt;/code&amp;gt; only cares about modifications in {{Path|/etc}} and its subfolders, with the exception of {{Path|/etc/init.d}}!&#039;&#039;&#039; &amp;lt;BR&amp;gt;&lt;br /&gt;
Please have a look at [[#Include_special_files.2Ffolders_to_the_apkovl|lbu include]] to save files/folders located elsewhere than in {{Path|/etc}}.&lt;br /&gt;
&lt;br /&gt;
Alpine has the following tools for permanently storing your modifications:&lt;br /&gt;
* lbu&lt;br /&gt;
* lbu commit &#039;&#039;(Same as &#039;lbu ci&#039;)&#039;&#039;&lt;br /&gt;
* lbu package &#039;&#039;(Same as &#039;lbu pkg&#039;)&#039;&#039;&lt;br /&gt;
* lbu status &#039;&#039;(Same as &#039;lbu st&#039;)&#039;&#039;&lt;br /&gt;
* lbu list &#039;&#039;(Same as &#039;lbu ls&#039;)&#039;&#039;&lt;br /&gt;
* lbu diff&lt;br /&gt;
* lbu include &#039;&#039;(Same as &#039;lbu inc&#039; or &#039;lbu add&#039;)&#039;&#039;&lt;br /&gt;
* lbu exclude &#039;&#039;(Same as &#039;lbu ex&#039; or &#039;lbu delete&#039;)&#039;&#039;&lt;br /&gt;
* lbu list-backup &#039;&#039;(Same as &#039;lbu lb&#039;)&#039;&#039;&lt;br /&gt;
* lbu revert&lt;br /&gt;
&lt;br /&gt;
In the below examples you will find some characters with special meaning:&lt;br /&gt;
* &#039;&#039;&#039;|&#039;&#039;&#039; = &#039;&#039;&#039;or&#039;&#039;&#039; &#039;&#039;(&#039;lbu commit|ci&#039; means that you can type ether &#039;lbu commit&#039; or &#039;lbu ci&#039;)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[ ]&#039;&#039;&#039; = &#039;&#039;&#039;optional&#039;&#039;&#039; &#039;&#039;(In &#039;lbu commit|ci [-nv]&#039; you can just skip the &#039;-n&#039;, &#039;-v&#039; or &#039;-nv&#039; part if you don&#039;t want it)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Committing your changes ==&lt;br /&gt;
When you &amp;quot;commit&amp;quot; or save changes you&#039;ve made to your system, &amp;lt;code&amp;gt;lbu&amp;lt;/code&amp;gt; will generate a file named something like {{Path|&amp;lt;var&amp;gt;myboxname&amp;lt;/var&amp;gt;.apkovl.tar.gz}} &#039;&#039;(&#039;myboxname&#039; will be the same as the hostname)&#039;&#039;.&lt;br /&gt;
This file (that contains your modifications) is called your &amp;quot;apkovl&amp;quot;.&lt;br /&gt;
You will need to save your apkovl on some suitable media (floppy, usb, cf, other).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usage: lbu commit|ci [-nv] [&amp;lt;media&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -d	Remove old apk overlay files.&lt;br /&gt;
  -e	Protect configuration with a password.&lt;br /&gt;
  -n	Don&#039;t commit, just show what would have been committed.&lt;br /&gt;
  -p &amp;lt;password&amp;gt;	Give encryption password on the command-line&lt;br /&gt;
  -v	Verbose mode.&lt;br /&gt;
&lt;br /&gt;
The following values for &amp;lt;media&amp;gt; is supported: floppy usb&lt;br /&gt;
If &amp;lt;media&amp;gt; is not specified, the environment variable LBU_MEDIA will be used.&lt;br /&gt;
&lt;br /&gt;
Password protection will use aes-256-cbc encryption. Other ciphers can be&lt;br /&gt;
used by setting the DEFAULT_CIPHER or ENCRYPTION environment variables.&lt;br /&gt;
For possible ciphers, try: openssl -v&lt;br /&gt;
&lt;br /&gt;
The password used to encrypt the file, can either be specified with the -p&lt;br /&gt;
option or using the PASSWORD environment variable.&lt;br /&gt;
&lt;br /&gt;
The environment variables can also be set in /etc/lbu/lbu.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a apkovl elsewhere than on your configured media ===&lt;br /&gt;
&lt;br /&gt;
To &amp;quot;commit&amp;quot; changes, but overriding the destination of the generated apkovl file, use &amp;lt;code&amp;gt;lbu package&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;lbu commit&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usage: lbu package|pkg -v [&amp;lt;dirname&amp;gt;|&amp;lt;filename&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -v   Verbose mode.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;dirname&amp;gt; is a directory, a package named &amp;lt;hostname&amp;gt;.apkovl.tar.gz will&lt;br /&gt;
be created in the specified directory.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;filename&amp;gt; is specified, and is not a directory, a package with the&lt;br /&gt;
specified name will be created.&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;dirname&amp;gt; nor &amp;lt;filename&amp;gt; is specified, a package named&lt;br /&gt;
&amp;lt;hostname&amp;gt;.apkovl.tar.gz will be created in current work directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Use SSH to create an apkovl on a different host ===&lt;br /&gt;
&lt;br /&gt;
To create an apkovl of client on a centralized server, use &amp;lt;code&amp;gt;lbu package&amp;lt;/code&amp;gt; with {{Path|-}} as the apkovl name:&lt;br /&gt;
&lt;br /&gt;
On the server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@client &amp;quot;lbu package -&amp;quot; &amp;gt;client.apkovl.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Check what will be added to your apkovl ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lbu status&amp;lt;/code&amp;gt; lists what will be saved the next time you run &amp;lt;code&amp;gt;lbu commit&amp;lt;/code&amp;gt;. Its default output is incremental, that is, to only show what files have changed since the last commit; but this can be overridden with the &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; flag:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usage: lbu status|st [-av]&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -a    Compare all files, not just since last commit.&lt;br /&gt;
  -v    Also show include and exclude lists.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option is &amp;lt;code&amp;gt;lbu list&amp;lt;/code&amp;gt;. This works like &amp;lt;code&amp;gt;lbu status -a&amp;lt;/code&amp;gt; but the format of the output is a bit different. (It&#039;s strictly equivalent to &amp;lt;code&amp;gt;lbu package -v /dev/null&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 usage: lbu list|ls&lt;br /&gt;
&lt;br /&gt;
A third option is &amp;lt;code&amp;gt;lbu diff&amp;lt;/code&amp;gt;. This shows the same incremental changes that &amp;lt;code&amp;gt;lbu status&amp;lt;/code&amp;gt; (without &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;) does, but in a different format.&lt;br /&gt;
&lt;br /&gt;
  usage: lbu diff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Include special files/folders to the apkovl ==&lt;br /&gt;
Assume that you have some files that you want to permanently save, but they are located somewhere else than in {{Path|/etc}}.&amp;lt;BR&amp;gt;&lt;br /&gt;
It could be {{Path|/root/.ssh/authorized_keys}} (used by &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; to authenticate ssh-users). Such files/folders can be added to lbu&#039;s &#039;&#039;include&#039;&#039; list with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usage: lbu include|inc|add [-rv] &amp;lt;file&amp;gt; ...&lt;br /&gt;
       lbu include|inc|add [-v] -l&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -l	List contents of include list.&lt;br /&gt;
  -r	Remove specified file(s) from include list instead of adding.&lt;br /&gt;
  -v	Verbose mode.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|This information used to be maintained in {{Path|/etc/lbu/include}}; now it&#039;s instead maintained together with the &#039;&#039;exclude&#039;&#039; list in {{Path|/etc/apk/protected_paths.d/lbu.list}}. Either way, the command &amp;lt;code&amp;gt;lbu include&amp;lt;/code&amp;gt; only modifies lbu&#039;s configuration; you will need to run &amp;lt;code&amp;gt;lbu commit&amp;lt;/code&amp;gt; to actually create/modify your apkovl.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exclude specific files/folders from the apkovl ==&lt;br /&gt;
Assume that you have some files located in {{Path|/etc}} or one of its subfolders that you &#039;&#039;do not&#039;&#039; want to permanently save.&lt;br /&gt;
It could be some log file or status file that for some reason isn&#039;t in {{Path|/var/log/}} but in some location that would otherwise be tracked by &amp;lt;code&amp;gt;lbu&amp;lt;/code&amp;gt;.&lt;br /&gt;
Such files/folders can be added to lbu&#039;s &#039;&#039;exclude&#039;&#039; list by manually editing that file or using the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usage: lbu exclude|ex|delete [-rv] &amp;lt;file&amp;gt; ...&lt;br /&gt;
       lbu exclude|ex|delete [-v] -l&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -l	List contents of exclude list.&lt;br /&gt;
  -r	Remove specified file(s) from exclude list instead of adding.&lt;br /&gt;
  -v	Verbose mode.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note|As stated above, this information is now maintained in {{Path|/etc/apk/protected_paths.d/lbu.list}}. The command &amp;lt;code&amp;gt;lbu exclude&amp;lt;/code&amp;gt; also only modifies lbu&#039;s configuration; you will need to run &amp;lt;code&amp;gt;lbu commit&amp;lt;/code&amp;gt; to actually create/modify your apkovl.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Execute a script as part of a backup ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it is necessary to run a script before or after a backup.  Scripts in two optional directories allow for this:&lt;br /&gt;
&lt;br /&gt;
 /etc/lbu/pre-package.d&lt;br /&gt;
 /etc/lbu/post-package.d&lt;br /&gt;
&lt;br /&gt;
Files in those directories are run using run-script rules (meaning they must have the executable bit set, they are run in alphabetical order, and cannot contain an extension: {{Path|runme}} works, but {{Path|runme.sh}} does not.)&lt;br /&gt;
&lt;br /&gt;
The scripts in {{Path|pre-package.d}} are run before the apkovl is created; scripts in {{Path|post-package.d}} are run after the apkovl is created.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
Rather than adding the raw database directories to {{Path|/etc/lbu/include}}, you can do a &amp;quot;database dump&amp;quot;.    For purposes of example, we use {{Pkg|postgresql}}:&lt;br /&gt;
&lt;br /&gt;
* Create {{Path|/etc/lbu/pre-package.d/sqldump}} with the following contents: &amp;lt;pre&amp;gt;pg_dumpall -U postgres | gzip -c &amp;gt;/root/pgdatabases.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Mark the file executable: &amp;lt;code&amp;gt;chmod +x /etc/lbu/pre-package.d/sqldump&amp;lt;/code&amp;gt;&lt;br /&gt;
* Create {{Path|/etc/lbu/post-package.d/sqldumpdelete}} with the following contents: &amp;lt;pre&amp;gt;rm -f /root/pgdatabases.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Mark the file executable: &amp;lt;code&amp;gt;chmod +x /etc/lbu/post-package.d/sqldumpdelete&amp;lt;/code&amp;gt;&lt;br /&gt;
* Finally, add the database dump file to the list of files to back up: &amp;lt;code&amp;gt;lbu include root/pgdatabases.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now whenever you do a &amp;lt;code&amp;gt;lbu commit&amp;lt;/code&amp;gt;, the sql databases are dumped and gzipped to {{Path|/root/pgdatabases.gz}}, and then the temporary file is deleted at the end of the lbu commit.&lt;br /&gt;
&lt;br /&gt;
On a catastrophic restore, the databases are not automatically restored (that&#039;s not lbu&#039;s responsibility), but you will find a complete database dump in the {{Path|/root}} directory, where it can be restored manually.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Multiple Backups ==&lt;br /&gt;
Lbu can now keep backups so you can revert to older, good known config.&lt;br /&gt;
Set BACKUP_LIMIT in {{Path|/etc/lbu/lbu.conf}} to the number of backups you want&lt;br /&gt;
to keep.&lt;br /&gt;
&lt;br /&gt;
You can list the current backups with:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|lbu list-backup [&amp;lt;media&amp;gt;]}}&lt;br /&gt;
&lt;br /&gt;
and you can revert to an older with:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|lbu revert &amp;lt;filename&amp;gt; [&amp;lt;media&amp;gt;]}}&lt;br /&gt;
&lt;br /&gt;
Nothing is written to your main system when &amp;quot;reverting&amp;quot;; this only affects which apkovl is considered active. If you&#039;ve set BACKUP_LIMIT, then the previously active apkovl will be backed up before being overwritten.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Back Up a Flash Memory Installation]]&lt;br /&gt;
* [[Manually editing a existing apkovl]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Booting]]&lt;br /&gt;
[[Category:Package Manager]]&lt;br /&gt;
[[category: LBU]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Category:Diskless&amp;diff=16606</id>
		<title>Category:Diskless</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Category:Diskless&amp;diff=16606"/>
		<updated>2019-10-31T08:00:39Z</updated>

		<summary type="html">&lt;p&gt;Innsill: Created page with &amp;quot;category: Storage&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category: Storage]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_on_ARM&amp;diff=16605</id>
		<title>Alpine on ARM</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_on_ARM&amp;diff=16605"/>
		<updated>2019-10-30T21:34:02Z</updated>

		<summary type="html">&lt;p&gt;Innsill: + link dtb&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
{{Draft}}&lt;br /&gt;
{{Style}}&lt;br /&gt;
{{Move|ARM SOCs}}&lt;br /&gt;
&lt;br /&gt;
(this page is WIP, most info are incomplete and some might be incorrect)&lt;br /&gt;
==Supported SoCs==&lt;br /&gt;
Currently Alpine supports armv6/armhf arch on the following SoCs&lt;br /&gt;
(This is taken from the DTBs which Alpine includes)&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible&amp;quot;&lt;br /&gt;
| am335x-base0033&lt;br /&gt;
| am335x-bone&lt;br /&gt;
| am335x-boneblack&lt;br /&gt;
| am335x-evm&lt;br /&gt;
| am335x-evmsk&lt;br /&gt;
| am335x-nano&lt;br /&gt;
| am335x-pepper&lt;br /&gt;
| am3517-craneboard&lt;br /&gt;
| am3517-evm&lt;br /&gt;
| am3517_mt_ventoux&lt;br /&gt;
| am437x-gp-evm&lt;br /&gt;
|-&lt;br /&gt;
| am437x-sk-evm&lt;br /&gt;
| am43x-epos-evm&lt;br /&gt;
| exynos4210-origen&lt;br /&gt;
| exynos4210-smdkv310&lt;br /&gt;
| exynos4210-trats&lt;br /&gt;
| exynos4210-universal_c210&lt;br /&gt;
| exynos4412-odroidu3&lt;br /&gt;
| exynos4412-odroidx&lt;br /&gt;
| exynos4412-odroidx2&lt;br /&gt;
| exynos4412-origen&lt;br /&gt;
| exynos4412-smdk4412&lt;br /&gt;
| exynos4412-tiny4412&lt;br /&gt;
|-&lt;br /&gt;
| exynos4412-trats2&lt;br /&gt;
| exynos5250-arndale&lt;br /&gt;
| exynos5250-smdk5250&lt;br /&gt;
| exynos5250-snow&lt;br /&gt;
| exynos5260-xyref5260&lt;br /&gt;
| exynos5410-smdk5410&lt;br /&gt;
| exynos5420-arndale-octa&lt;br /&gt;
| exynos5420-peach-pit&lt;br /&gt;
| exynos5420-smdk5420&lt;br /&gt;
| exynos5440-sd5v1&lt;br /&gt;
| exynos5440-ssdk5440&lt;br /&gt;
| exynos5800-peach-pi&lt;br /&gt;
|-&lt;br /&gt;
| imx1-ads&lt;br /&gt;
| imx1-apf9328&lt;br /&gt;
| imx25-eukrea-mbimxsd25-baseboard-cmo-qvga&lt;br /&gt;
| imx25-eukrea-mbimxsd25-baseboard-dvi-svga&lt;br /&gt;
| imx25-eukrea-mbimxsd25-baseboard-dvi-vga&lt;br /&gt;
| imx25-eukrea-mbimxsd25-baseboard&lt;br /&gt;
| imx25-karo-tx25&lt;br /&gt;
| imx25-pdk&lt;br /&gt;
| imx27-apf27&lt;br /&gt;
| imx27-apf27dev&lt;br /&gt;
| imx27-eukrea-mbimxsd27-baseboard&lt;br /&gt;
| imx27-pdk&lt;br /&gt;
|-&lt;br /&gt;
| imx27-phytec-phycard-s-rdk&lt;br /&gt;
| imx27-phytec-phycore-rdk&lt;br /&gt;
| imx31-bug&lt;br /&gt;
| imx35-eukrea-mbimxsd35-baseboard&lt;br /&gt;
| imx35-pdk&lt;br /&gt;
| imx50-evk&lt;br /&gt;
| imx51-apf51&lt;br /&gt;
| imx51-apf51dev&lt;br /&gt;
| imx51-babbage&lt;br /&gt;
| imx51-digi-connectcore-jsk&lt;br /&gt;
| imx51-eukrea-mbimxsd51-baseboard&lt;br /&gt;
| imx53-ard&lt;br /&gt;
|-&lt;br /&gt;
| imx53-m53evk&lt;br /&gt;
| imx53-mba53&lt;br /&gt;
| imx53-qsb&lt;br /&gt;
| imx53-qsrb&lt;br /&gt;
| imx53-smd&lt;br /&gt;
| imx53-tx53-x03x&lt;br /&gt;
| imx53-tx53-x13x&lt;br /&gt;
| imx53-voipac-bsb&lt;br /&gt;
| imx6dl-aristainetos_4&lt;br /&gt;
| imx6dl-aristainetos_7&lt;br /&gt;
| imx6dl-cubox-i&lt;br /&gt;
| imx6dl-dfi-fs700-m60&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-gw51xx&lt;br /&gt;
| imx6dl-gw52xx&lt;br /&gt;
| imx6dl-gw53xx&lt;br /&gt;
| imx6dl-gw54xx&lt;br /&gt;
| imx6dl-gw552x&lt;br /&gt;
| imx6dl-hummingboard&lt;br /&gt;
| imx6dl-nitrogen6x&lt;br /&gt;
| imx6dl-phytec-pbab01&lt;br /&gt;
| imx6dl-rex-basic&lt;br /&gt;
| imx6dl-riotboard&lt;br /&gt;
| imx6dl-sabreauto&lt;br /&gt;
| imx6dl-sabrelite&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-sabresd&lt;br /&gt;
| imx6dl-tx6dl-comtft&lt;br /&gt;
| imx6dl-tx6u-801x&lt;br /&gt;
| imx6dl-tx6u-811x&lt;br /&gt;
| imx6dl-wandboard-revb1&lt;br /&gt;
| imx6dl-wandboard&lt;br /&gt;
| imx6q-arm2&lt;br /&gt;
| imx6q-cm-fx6&lt;br /&gt;
| imx6q-cubox-i&lt;br /&gt;
| imx6q-dfi-fs700-m60&lt;br /&gt;
| imx6q-dmo-edmqmx6&lt;br /&gt;
| imx6q-gk802&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-gw51xx&lt;br /&gt;
| imx6q-gw52xx&lt;br /&gt;
| imx6q-gw53xx&lt;br /&gt;
| imx6q-gw5400-a&lt;br /&gt;
| imx6q-gw54xx&lt;br /&gt;
| imx6q-gw552x&lt;br /&gt;
| imx6q-hummingboard&lt;br /&gt;
| imx6q-nitrogen6x&lt;br /&gt;
| imx6q-phytec-pbab01&lt;br /&gt;
| imx6q-rex-pro&lt;br /&gt;
| imx6q-sabreauto&lt;br /&gt;
| imx6q-sabrelite&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-sabresd&lt;br /&gt;
| imx6q-sbc6x&lt;br /&gt;
| imx6q-tx6q-1010-comtft&lt;br /&gt;
| imx6q-tx6q-1010&lt;br /&gt;
| imx6q-tx6q-1020-comtft&lt;br /&gt;
| imx6q-tx6q-1020&lt;br /&gt;
| imx6q-tx6q-1110&lt;br /&gt;
| imx6q-udoo&lt;br /&gt;
| imx6q-wandboard-revb1&lt;br /&gt;
| imx6q-wandboard&lt;br /&gt;
| imx6sl-evk&lt;br /&gt;
| imx6sx-sdb&lt;br /&gt;
|-&lt;br /&gt;
| omap3-beagle-xm-ab&lt;br /&gt;
| omap3-beagle-xm&lt;br /&gt;
| omap3-beagle&lt;br /&gt;
| omap3-cm-t3517&lt;br /&gt;
| omap3-cm-t3530&lt;br /&gt;
| omap3-cm-t3730&lt;br /&gt;
| omap3-devkit8000&lt;br /&gt;
| omap3-evm-37xx&lt;br /&gt;
| omap3-evm&lt;br /&gt;
| omap3-gta04a3&lt;br /&gt;
| omap3-gta04a4&lt;br /&gt;
| omap3-gta04a5&lt;br /&gt;
|-&lt;br /&gt;
| omap3-ha-lcd&lt;br /&gt;
| omap3-ha&lt;br /&gt;
| omap3-igep0020&lt;br /&gt;
| omap3-igep0030&lt;br /&gt;
| omap3-ldp&lt;br /&gt;
| omap3-lilly-dbb056&lt;br /&gt;
| omap3-n9&lt;br /&gt;
| omap3-n900&lt;br /&gt;
| omap3-n950&lt;br /&gt;
| omap3-overo-alto35&lt;br /&gt;
| omap3-overo-chestnut43&lt;br /&gt;
| omap3-overo-gallop43&lt;br /&gt;
|-&lt;br /&gt;
| omap3-overo-palo43&lt;br /&gt;
| omap3-overo-storm-alto35&lt;br /&gt;
| omap3-overo-storm-chestnut43&lt;br /&gt;
| omap3-overo-storm-gallop43&lt;br /&gt;
| omap3-overo-storm-palo43&lt;br /&gt;
| omap3-overo-storm-summit&lt;br /&gt;
| omap3-overo-storm-tobi&lt;br /&gt;
| omap3-overo-summit&lt;br /&gt;
| omap3-overo-tobi&lt;br /&gt;
| omap3-sbc-t3517&lt;br /&gt;
| omap3-sbc-t3530&lt;br /&gt;
| omap3-sbc-t3730&lt;br /&gt;
|-&lt;br /&gt;
| omap3-thunder&lt;br /&gt;
| omap3-zoom3&lt;br /&gt;
| omap3430-sdp&lt;br /&gt;
| omap4-duovero-parlor&lt;br /&gt;
| omap4-panda-a4&lt;br /&gt;
| omap4-panda-es&lt;br /&gt;
| omap4-panda&lt;br /&gt;
| omap4-sdp-es23plus&lt;br /&gt;
| omap4-sdp&lt;br /&gt;
| omap4-var-dvk-om44&lt;br /&gt;
| omap4-var-stk-om44&lt;br /&gt;
| omap5-cm-t54&lt;br /&gt;
|-&lt;br /&gt;
| omap5-sbc-t54&lt;br /&gt;
| omap5-uevm&lt;br /&gt;
| qcom-apq8064-cm-qs600&lt;br /&gt;
| qcom-apq8064-ifc6410&lt;br /&gt;
| qcom-apq8074-dragonboard&lt;br /&gt;
| qcom-apq8084-ifc6540&lt;br /&gt;
| qcom-apq8084-mtp&lt;br /&gt;
| qcom-ipq8064-ap148&lt;br /&gt;
| qcom-msm8660-surf&lt;br /&gt;
| qcom-msm8960-cdp&lt;br /&gt;
| qcom-msm8974-sony-xperia-honami&lt;br /&gt;
| sun4i-a10-a1000&lt;br /&gt;
|-&lt;br /&gt;
| sun4i-a10-ba10-tvbox&lt;br /&gt;
| sun4i-a10-cubieboard&lt;br /&gt;
| sun4i-a10-hackberry&lt;br /&gt;
| sun4i-a10-inet97fv2&lt;br /&gt;
| sun4i-a10-mini-xplus&lt;br /&gt;
| sun4i-a10-olinuxino-lime&lt;br /&gt;
| sun4i-a10-pcduino&lt;br /&gt;
| sun5i-a10s-olinuxino-micro&lt;br /&gt;
| sun5i-a10s-r7-tv-dongle&lt;br /&gt;
| sun5i-a13-hsg-h702&lt;br /&gt;
| sun5i-a13-olinuxino-micro&lt;br /&gt;
| sun5i-a13-olinuxino&lt;br /&gt;
|-&lt;br /&gt;
| sun6i-a31-app4-evb1&lt;br /&gt;
| sun6i-a31-colombus&lt;br /&gt;
| sun6i-a31-hummingbird&lt;br /&gt;
| sun6i-a31-m9&lt;br /&gt;
| sun7i-a20-cubieboard2&lt;br /&gt;
| sun7i-a20-cubietruck&lt;br /&gt;
| sun7i-a20-hummingbird&lt;br /&gt;
| sun7i-a20-i12-tvbox&lt;br /&gt;
| sun7i-a20-olinuxino-lime&lt;br /&gt;
| sun7i-a20-olinuxino-micro&lt;br /&gt;
| sun7i-a20-pcduino3&lt;br /&gt;
| sun8i-a23-ippo-q8h-v5&lt;br /&gt;
|-&lt;br /&gt;
| vexpress-v2p-ca15-tc1&lt;br /&gt;
| vexpress-v2p-ca15_a7&lt;br /&gt;
| vexpress-v2p-ca5s&lt;br /&gt;
| vexpress-v2p-ca9&lt;br /&gt;
| vf610-colibri-eval-v3&lt;br /&gt;
| vf610-cosmic&lt;br /&gt;
| vf610-twr&lt;br /&gt;
|}&lt;br /&gt;
===Install Alpine on supported SoCs===&lt;br /&gt;
(If anyone has any of the above device and has successfully install Alpine on it, please consider to add the missing info)&lt;br /&gt;
&lt;br /&gt;
==Unupported SoCs==&lt;br /&gt;
If you have an armv6/armv7 SoC which is not listed above but is supported by mainline uboot/kernel then it&#039;s still possible to install Alpine&lt;br /&gt;
===Requiremnets===&lt;br /&gt;
* Alpine&#039;s forked uboot to support tarballs (fabled?)&lt;br /&gt;
* serial console&lt;br /&gt;
* crosscompiler/toolchain if you can not compile natively&lt;br /&gt;
===The embedded world===&lt;br /&gt;
A lot of the SoCs have their own way of doing things, although they use uboot and Linux kernel but often they are heavily modified to suit easy flashing of &amp;quot;ROMs&amp;quot; or other unknown reasons, e.g. Rockchip&#039;s notion &amp;quot;partition&amp;quot; are neither DOS nor GPT partitions.&lt;br /&gt;
We are to discuss to install Alpine in a more standard way like x86 with either DOS or GPT partitions. You will most likely have to install/flash the mainline uboot, which can be non-destructive if you use external storage.&lt;br /&gt;
&lt;br /&gt;
====Storage====&lt;br /&gt;
One can load uboot from the following block devices if it&#039;s supported.&lt;br /&gt;
* NAND&lt;br /&gt;
* eMMC&lt;br /&gt;
* SD card&lt;br /&gt;
* USB&lt;br /&gt;
&lt;br /&gt;
====Power on====&lt;br /&gt;
Some SoCs need both SPL and uboot, you need to check uboot for your board. Most (if not all) boards boots from the internal storage first (either NAND or eMMC) you will have to check documentation of your board if you wish to boot the SPL/uboot from SD/USB.&lt;br /&gt;
&lt;br /&gt;
One can view SPL+uboot as BIOS and boot-loader on PC. Think that you could put the BIOS on an external storage :D&lt;br /&gt;
&lt;br /&gt;
Once you have loaded the &amp;quot;standard&amp;quot; uboot, things are more or less like on x86.&lt;br /&gt;
&lt;br /&gt;
====Partitioning====&lt;br /&gt;
Either DOS or GPT patitions should work, start of the first partition should be on block 2048 so there are space for SPL/uboot and marked bootable (with&lt;br /&gt;
the MBR bootable flag, or GPT legacy_bios_bootable attribute).&lt;br /&gt;
* SPL starts at block 64 (please consult the docs for your board)&lt;br /&gt;
* uboot starts at block 256 (please consult the docs for your board)&lt;br /&gt;
Just dd SPL and boot with the correct offset to the media you wish to boot&lt;br /&gt;
&lt;br /&gt;
====Booting Linux kernel====&lt;br /&gt;
* uboot uses extlinux.conf file to locate the kernel/initramfs/... just like syslinx, you need to put that file on the partitions which is marked bootable in the /boot directory&lt;br /&gt;
* there should be an extra line &amp;quot;FDTDIR&amp;quot; which points to the DTBs&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
label Fedora (3.17.0-0.rc4.git2.1.fc22.armv7hl) 22 (Rawhide)&lt;br /&gt;
	kernel /boot/vmlinuz-3.17.0-0.rc4.git2.1.fc22.armv7hl&lt;br /&gt;
	append ro root=UUID=8eac677f-8ea8-4270-8479-d5ddbb797450 console=ttyS0,115200n8 LANG=en_US.UTF-8 drm.debug=0xf&lt;br /&gt;
	fdtdir /boot/dtb-3.17.0-0.rc4.git2.1.fc22.armv7hl&lt;br /&gt;
	initrd /boot/initramfs-3.17.0-0.rc4.git2.1.fc22.armv7hl.img&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using QEMU==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qemu-system-arm -M vexpress-a9 -kernel zImage -initrd initramfs-grsec -dtb vexpress-v2p-ca9.dtb -hda hda.img -serial stdio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[DIY Fully working Alpine Linux for Allwinner and Other ARM SOCs]]&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
* [http://www.armadeus.org/wiki/index.php?title=Kernel-with-device-tree dtb (Device Tree Binary)]&lt;br /&gt;
* [https://forum.odroid.com/viewtopic.php?t=30459 Odroid-C2] 2018 &#039;&#039;([https://archlinuxarm.org/platforms/armv8/amlogic/odroid-c2 ARMv8, AArch64])&#039;&#039;&lt;br /&gt;
* [https://forum.odroid.com/viewtopic.php?f=138&amp;amp;t=32608 Alpine Linux custom build] 2018&lt;br /&gt;
* [https://cusdeb.com/ CusDeb.com] - Bootstrap SD-card images for single-board computers online; [https://github.com/tolstoyevsky/pieman Pieman]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[category:ARM]]&lt;/div&gt;</summary>
		<author><name>Innsill</name></author>
	</entry>
</feed>