<?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=Nrenniewaldock</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=Nrenniewaldock"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Nrenniewaldock"/>
	<updated>2026-04-25T18:36:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_to_setup_a_Alpine_Linux_mirror&amp;diff=28630</id>
		<title>How to setup a Alpine Linux mirror</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_to_setup_a_Alpine_Linux_mirror&amp;diff=28630"/>
		<updated>2024-12-31T17:53:16Z</updated>

		<summary type="html">&lt;p&gt;Nrenniewaldock: /* Introduction */ Update and add v3.21&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
This document describes how to set up an Alpine Linux mirror and make it available via http and rsync.&lt;br /&gt;
&lt;br /&gt;
We will:&lt;br /&gt;
* create the dir where we have the mirror&lt;br /&gt;
* set up a cron job to sync with master mirror every hour&lt;br /&gt;
* set up lighttpd for http access&lt;br /&gt;
* set up rsync so other mirrors can rsync from you&lt;br /&gt;
&lt;br /&gt;
Make sure that you have enough disk space.&lt;br /&gt;
&lt;br /&gt;
Current (2024-12-31) disk usage in GB:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!edge&lt;br /&gt;
!v3.0&lt;br /&gt;
!v3.1&lt;br /&gt;
!v3.2&lt;br /&gt;
!v3.3&lt;br /&gt;
!v3.4&lt;br /&gt;
!v3.5&lt;br /&gt;
!v3.6&lt;br /&gt;
!v3.7&lt;br /&gt;
!v3.8&lt;br /&gt;
!v3.9&lt;br /&gt;
!v3.10&lt;br /&gt;
!v3.11&lt;br /&gt;
!v3.12&lt;br /&gt;
!v3.13&lt;br /&gt;
!v3.14&lt;br /&gt;
!v3.15&lt;br /&gt;
!v3.16&lt;br /&gt;
!v3.17&lt;br /&gt;
!v3.18&lt;br /&gt;
!v3.19&lt;br /&gt;
!v3.20&lt;br /&gt;
!v3.21&lt;br /&gt;
&lt;br /&gt;
!total&lt;br /&gt;
|-&lt;br /&gt;
|499&lt;br /&gt;
|17&lt;br /&gt;
|18&lt;br /&gt;
|15&lt;br /&gt;
|21&lt;br /&gt;
|25&lt;br /&gt;
|27&lt;br /&gt;
|45&lt;br /&gt;
|43&lt;br /&gt;
|59&lt;br /&gt;
|73&lt;br /&gt;
|92&lt;br /&gt;
|126&lt;br /&gt;
|148&lt;br /&gt;
|156&lt;br /&gt;
|181&lt;br /&gt;
|194&lt;br /&gt;
|209&lt;br /&gt;
|244&lt;br /&gt;
|298&lt;br /&gt;
|288&lt;br /&gt;
|361&lt;br /&gt;
|400&lt;br /&gt;
&lt;br /&gt;
|&#039;&#039;&#039;3538&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Script used to calculate the size:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
total=0&lt;br /&gt;
dest=&amp;quot;$(mktemp -d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for dir in edge v3.0 v3.1 v3.2 v3.3 v3.4 v3.5 v3.6 v3.7 v3.8 v3.9 v3.10 v3.11 v3.12 v3.13 v3.14 v3.15 v3.16 v3.17 v3.18 v3.19 v3.20 v3.21; do&lt;br /&gt;
    old_total=&amp;quot;$total&amp;quot;&lt;br /&gt;
    src=&amp;quot;rsync://rsync.alpinelinux.org/alpine/$dir/&amp;quot;&lt;br /&gt;
    size=$(rsync -a -n --stats &amp;quot;$src&amp;quot; &amp;quot;$dest&amp;quot; | grep &#039;^Total file size&#039; | tr -d &#039;,&#039; | awk &#039;{ print $4 }&#039;)&lt;br /&gt;
    total=$(( old_total + size ))&lt;br /&gt;
    echo &amp;quot;$dir: $size&amp;quot; | awk &#039;{ print $1 sprintf(&amp;quot;%.1f&amp;quot;, $2/1073741824) }&#039;&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;total: $total&amp;quot; | awk &#039;{ print $1 sprintf(&amp;quot;%.1f&amp;quot;, $2/1073741824) }&#039;&lt;br /&gt;
rm -r &amp;quot;$dest&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Setting up the cron job ==&lt;br /&gt;
Install rsync which will be used to sync from the master mirror.&lt;br /&gt;
{{Cmd|apk add rsync}}&lt;br /&gt;
&lt;br /&gt;
Save the following file as &#039;&#039;/etc/periodic/hourly/alpine-mirror&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# make sure we never run 2 rsync at the same time&lt;br /&gt;
lockfile=&amp;quot;/tmp/alpine-mirror.lock&amp;quot;&lt;br /&gt;
if [ -z &amp;quot;$flock&amp;quot; ] ; then&lt;br /&gt;
  exec env flock=1 flock -n $lockfile &amp;quot;$0&amp;quot; &amp;quot;$@&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
src=rsync://rsync.alpinelinux.org/alpine/ &lt;br /&gt;
dest=/var/www/localhost/htdocs/alpine/&lt;br /&gt;
&lt;br /&gt;
# uncomment this to exclude old v2.x branches&lt;br /&gt;
#exclude=&amp;quot;--exclude v2.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
mkdir -p &amp;quot;$dest&amp;quot;&lt;br /&gt;
/usr/bin/rsync \&lt;br /&gt;
        --archive \&lt;br /&gt;
        --update \&lt;br /&gt;
        --hard-links \&lt;br /&gt;
        --delete \&lt;br /&gt;
        --delete-after \&lt;br /&gt;
        --delay-updates \&lt;br /&gt;
        --timeout=600 \&lt;br /&gt;
        $exclude \&lt;br /&gt;
        &amp;quot;$src&amp;quot; &amp;quot;$dest&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(or use [https://gist.github.com/jirutka/288c6fff7c0b8a835d143686207316be this script])&lt;br /&gt;
&lt;br /&gt;
Make it executable:&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;chmod +x /etc/periodic/hourly/alpine-mirror&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Now it will sync every hour. (given cron runs)&lt;br /&gt;
&lt;br /&gt;
== Setting up HTTP access via lighttpd ==&lt;br /&gt;
&lt;br /&gt;
Install the lighttpd server&lt;br /&gt;
{{Cmd|apk add lighttpd}}&lt;br /&gt;
&lt;br /&gt;
Enable dir listings by uncommenting the following line in &#039;&#039;/etc/lighttpd/lighttpd.conf&#039;&#039;:&lt;br /&gt;
 dir-listing.activate      = &amp;quot;enable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also set cache-control to force cache revalidate every 30 mins. Uncomment mod_setenv in &#039;&#039;/etc/lighttpd/lighttpd.conf&#039;&#039;:&lt;br /&gt;
 &amp;quot;mod_setenv&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
Add also the following lines to &#039;&#039;/etc/lighttpd/lighttpd.conf&#039;&#039;:&lt;br /&gt;
 setenv.add-response-header += (           &lt;br /&gt;
         &amp;quot;Cache-Control&amp;quot; =&amp;gt; &amp;quot;must-revalidate&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Start lighttpd and make it start at boot:&lt;br /&gt;
{{Cmd|rc-service lighttpd start&lt;br /&gt;
rc-update add lighttpd}}&lt;br /&gt;
&lt;br /&gt;
{{Note|You may wish to consider [[Darkhttpd]] as an alternative to [[Lighttpd]]&lt;br /&gt;
&lt;br /&gt;
If so, simply install, start and auto-start the webserver:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add darkhttpd &amp;amp;&amp;amp; rc-service darkhttpd start &amp;amp;&amp;amp; rc-update add darkhttpd}}&lt;br /&gt;
&lt;br /&gt;
Darkhttpd will, by default, offer directory listings and serve data from /var/www/localhost/htdocs/ &lt;br /&gt;
&lt;br /&gt;
See the main article on [[Darkhttpd]] for more configuration options}}&lt;br /&gt;
&lt;br /&gt;
== Setting up rsyncd ==&lt;br /&gt;
Add the following lines to &#039;&#039;/etc/rsyncd.conf&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[alpine]&lt;br /&gt;
        path = /var/www/localhost/htdocs/alpine&lt;br /&gt;
        comment = My Alpine Linux Mirror&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionally set a bandwidth limit in &#039;&#039;/etc/conf.d/rsyncd&#039;&#039;. In this example we limit to 500Kbytes/s (approx 5Mbit/s)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RSYNC_OPTS=&amp;quot;--bwlimit=500&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mirror statistics ==&lt;br /&gt;
&lt;br /&gt;
Simple bandwidth statistics can be generated with vnstat.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add vnstat}}&lt;br /&gt;
&lt;br /&gt;
edit /etc/vnstat.conf and replace the interface name with the appropriate one.&lt;br /&gt;
&lt;br /&gt;
Start vnstatd&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service vnstatd start }}&lt;br /&gt;
&lt;br /&gt;
copy the following script to /etc/periodic/15min/stats and make sure your crond is running.&lt;br /&gt;
please not that heredoc should be tab indented or the script will fail. A working copy can be found here: https://tpaste.us/RrMv&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
output=&amp;quot;/var/www/localhost/htdocs/.stats&amp;quot;&lt;br /&gt;
nic=&amp;quot;eth0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
generate_index() {&lt;br /&gt;
    cat &amp;lt;&amp;lt;-EOF&lt;br /&gt;
    &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
    &amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;cache-control&amp;quot; content=no-cache&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;refresh&amp;quot; content=&amp;quot;3000&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Alpine Linux mirror statistics&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;summary.png&amp;quot; alt=&amp;quot;summary&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;hours.png&amp;quot; alt=&amp;quot;hours&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td rowspan=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;days.png&amp;quot; alt=&amp;quot;days&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;top10.png&amp;quot; alt=&amp;quot;top10&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;months.png&amp;quot; alt=&amp;quot;months&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
    EOF&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if  [ ! -f &amp;quot;$output&amp;quot;/index.html ]; then&lt;br /&gt;
    mkdir -p $output&lt;br /&gt;
    generate_index &amp;gt; &amp;quot;$output&amp;quot;/index.html&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
for type in hours days months top10 summary hsummary vsummary; do&lt;br /&gt;
    vnstati --${type} -i $nic -o $output/${type}.png&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update mirror from mqtt ==&lt;br /&gt;
&lt;br /&gt;
If you want your mirror to be really uptodate compared to our master mirror you can subscribe to Alpine Linux message server &amp;quot;msg.alpinelinux.org&amp;quot; and check for upload messages.&lt;br /&gt;
Add mqtt-exec to be able to execute processes when specific topics are being send.&lt;br /&gt;
&lt;br /&gt;
{{Cmd| apk add mqtt-exec}}&lt;br /&gt;
&lt;br /&gt;
mqtt-exec supports running multiple time so we need to setup a specific config.&lt;br /&gt;
&lt;br /&gt;
{{Cmd| ln -s mqtt-exec /etc/init.d/mqtt-exec.sync-mirror}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd| ln -s mqtt-exec /etc/conf.d/mqtt-exec.sync-mirror}}&lt;br /&gt;
&lt;br /&gt;
edit /etc/conf.d/mqtt-exec.sync-mirror&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt_topics=&amp;quot;rsync/rsync.alpinelinux.org/#&amp;quot;&lt;br /&gt;
exec_user=&amp;quot;buildozer&amp;quot;&lt;br /&gt;
exec_command=&amp;quot;/usr/local/bin/sync-mirror&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the following file to /usr/local/bin/sync-mirror and make it executable (dont forget to update the variables).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
src=&amp;quot;rsync://rsync.alpinelinux.org/alpine/&amp;quot;&lt;br /&gt;
dest=&amp;quot;/var/www/localhost/htdocs/alpine/&amp;quot;&lt;br /&gt;
lock=&amp;quot;/tmp/sync-mirror.lock&amp;quot;&lt;br /&gt;
topic=&amp;quot;$1&amp;quot;&lt;br /&gt;
dir=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[ -z &amp;quot;$flock&amp;quot; ] &amp;amp;&amp;amp; exec env flock=1 flock $lock $0 &amp;quot;$@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -n &amp;quot;$dir&amp;quot; ] &amp;amp;&amp;amp; [ -d &amp;quot;$dest/${dir%/*}&amp;quot; ]; then&lt;br /&gt;
    logger &amp;quot;Syncing directory: $dir&amp;quot;&lt;br /&gt;
    src=&amp;quot;${src}${dir%/}/&amp;quot;&lt;br /&gt;
    dest=&amp;quot;${dest}${dir%/}/&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    logger &amp;quot;Syncing all directories&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
/usr/bin/rsync \&lt;br /&gt;
    --archive \&lt;br /&gt;
    --update \&lt;br /&gt;
    --verbose \&lt;br /&gt;
    --progress \&lt;br /&gt;
    --timeout=600 \&lt;br /&gt;
    --delay-updates \&lt;br /&gt;
    --delete-after \&lt;br /&gt;
    &amp;quot;$src&amp;quot; \&lt;br /&gt;
    &amp;quot;$dest&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally start mqtt-exec and let it listen on msg.alpinelinux.org&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service mqtt-exec.sync-mirror start}}&lt;br /&gt;
&lt;br /&gt;
To make sure you are not missing any packages (in case something goes wrong with MQTT subscription) you can periodically sync all directories by adding the script to cron.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ln -s /usr/local/bin/sync-mirror /etc/periodic/hourly/sync-mirror}}&lt;br /&gt;
&lt;br /&gt;
Now watch your syslog as it should tell you when it will update directories in your local mirror.&lt;br /&gt;
&lt;br /&gt;
== Partial mirror using nginx ==&lt;br /&gt;
&lt;br /&gt;
For a private mirror it might make sense to sync only the newest versions or some architectures of Alpine to save space, but if you &#039;&#039;do&#039;&#039; point an old Alpine version to your mirror they should still be able to install packages. We can achieve this by using nginx to serve the mirrored content and redirect all requests with 404 errors to a public mirror.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s assume you chose to only mirror Alpine versions up from v3.13. If a client asks your mirror for v.3.10 it should redirect to another mirror.&lt;br /&gt;
&lt;br /&gt;
Your nginx config server block should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name alpine.mydomain.local;&lt;br /&gt;
        root /data/alpine;          # point to where your alpine mirror is located. make sure nginx is allowed to read it&lt;br /&gt;
        autoindex on;               # Enable indexing&lt;br /&gt;
&lt;br /&gt;
        error_page 404 = @alpinemirror;&lt;br /&gt;
&lt;br /&gt;
        location @alpinemirror&lt;br /&gt;
        {&lt;br /&gt;
          return 302 http://dl-cdn.alpinelinux.org/alpine$request_uri;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The corresponding sync script could look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# make sure we never run 2 rsync at the same time&lt;br /&gt;
lockfile=&amp;quot;/tmp/alpine-mirror.lock&amp;quot;&lt;br /&gt;
if [ -z &amp;quot;$flock&amp;quot; ] ; then&lt;br /&gt;
  exec env flock=1 flock -n $lockfile &amp;quot;$0&amp;quot; &amp;quot;$@&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  src=rsync://rsync.alpinelinux.org/alpine/&lt;br /&gt;
  dest=/data/alpine/&lt;br /&gt;
&lt;br /&gt;
  exclude=&amp;quot;--exclude v2.* --exclude v3.0 --exclude v3.1 --exclude v3.2 --exclude v3.3 --exclude v3.4 --exclude v3.5 --exclude v3.6 --exclude v3.7 --exclude v3.8 --exclude v3.9 --exclude v3.10 --exclude v3.11 --exclude v3.12&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  mkdir -p &amp;quot;$dest&amp;quot;&lt;br /&gt;
  /usr/bin/rsync -vvv \&lt;br /&gt;
  --archive \&lt;br /&gt;
  --update \&lt;br /&gt;
  --hard-links \&lt;br /&gt;
  --delete \&lt;br /&gt;
  --delete-after \&lt;br /&gt;
  --delete-excluded \&lt;br /&gt;
  --delay-updates \&lt;br /&gt;
  --timeout=600 \&lt;br /&gt;
  $exclude \&lt;br /&gt;
  &amp;quot;$src&amp;quot; &amp;quot;$dest&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Package Manager]]&lt;/div&gt;</summary>
		<author><name>Nrenniewaldock</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_on_ARM&amp;diff=22923</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=22923"/>
		<updated>2023-01-20T09:38:12Z</updated>

		<summary type="html">&lt;p&gt;Nrenniewaldock: /* Supported SoCs */ Update list from 3.17.1, fix collapsing table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
{{Style}}&lt;br /&gt;
{{Move|ARM SOCs}}&lt;br /&gt;
&lt;br /&gt;
(Parts of this page are WIP, still incomplete and some might be incorrect.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Supported SoCs==&lt;br /&gt;
&lt;br /&gt;
Currently Alpine supports the following SoCs&lt;br /&gt;
&lt;br /&gt;
(This is taken from the DTBs which Alpine includes)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;text-align: left;&amp;quot;|armv7&lt;br /&gt;
|-&lt;br /&gt;
| am335x-baltos-ir2110&lt;br /&gt;
| am335x-baltos-ir3220&lt;br /&gt;
| am335x-baltos-ir5221&lt;br /&gt;
| am335x-base0033&lt;br /&gt;
| am335x-bone&lt;br /&gt;
| am335x-boneblack-wireless&lt;br /&gt;
| am335x-boneblack&lt;br /&gt;
| am335x-boneblue&lt;br /&gt;
| am335x-bonegreen-wireless&lt;br /&gt;
| am335x-bonegreen&lt;br /&gt;
| am335x-chiliboard&lt;br /&gt;
|-&lt;br /&gt;
| am335x-cm-t335&lt;br /&gt;
| am335x-evm&lt;br /&gt;
| am335x-evmsk&lt;br /&gt;
| am335x-guardian&lt;br /&gt;
| am335x-icev2&lt;br /&gt;
| am335x-lxm&lt;br /&gt;
| am335x-moxa-uc-2101&lt;br /&gt;
| am335x-moxa-uc-8100-me-t&lt;br /&gt;
| am335x-myirtech-myd&lt;br /&gt;
| am335x-nano&lt;br /&gt;
| am335x-netcan-plus-1xx&lt;br /&gt;
|-&lt;br /&gt;
| am335x-netcom-plus-2xx&lt;br /&gt;
| am335x-netcom-plus-8xx&lt;br /&gt;
| am335x-osd3358-sm-red&lt;br /&gt;
| am335x-pdu001&lt;br /&gt;
| am335x-pepper&lt;br /&gt;
| am335x-phycore-rdk&lt;br /&gt;
| am335x-pocketbeagle&lt;br /&gt;
| am335x-regor-rdk&lt;br /&gt;
| am335x-sancloud-bbe-lite&lt;br /&gt;
| am335x-sancloud-bbe&lt;br /&gt;
| am335x-sbc-t335&lt;br /&gt;
|-&lt;br /&gt;
| am335x-shc&lt;br /&gt;
| am335x-sl50&lt;br /&gt;
| am335x-wega-rdk&lt;br /&gt;
| bcm2711-rpi-4-b&lt;br /&gt;
| bcm2711-rpi-400&lt;br /&gt;
| bcm2835-rpi-a-plus&lt;br /&gt;
| bcm2835-rpi-a&lt;br /&gt;
| bcm2835-rpi-b-plus&lt;br /&gt;
| bcm2835-rpi-b-rev2&lt;br /&gt;
| bcm2835-rpi-b&lt;br /&gt;
| bcm2835-rpi-cm1-io1&lt;br /&gt;
|-&lt;br /&gt;
| bcm2835-rpi-zero-w&lt;br /&gt;
| bcm2835-rpi-zero&lt;br /&gt;
| bcm2836-rpi-2-b&lt;br /&gt;
| bcm2837-rpi-3-a-plus&lt;br /&gt;
| bcm2837-rpi-3-b-plus&lt;br /&gt;
| bcm2837-rpi-3-b&lt;br /&gt;
| bcm2837-rpi-cm3-io3&lt;br /&gt;
| exynos4210-i9100&lt;br /&gt;
| exynos4210-origen&lt;br /&gt;
| exynos4210-smdkv310&lt;br /&gt;
| exynos4210-trats&lt;br /&gt;
|-&lt;br /&gt;
| exynos4210-universal_c210&lt;br /&gt;
| exynos4412-i9300&lt;br /&gt;
| exynos4412-i9305&lt;br /&gt;
| exynos4412-itop-elite&lt;br /&gt;
| exynos4412-n710x&lt;br /&gt;
| exynos4412-odroidu3&lt;br /&gt;
| exynos4412-odroidx&lt;br /&gt;
| exynos4412-odroidx2&lt;br /&gt;
| exynos4412-origen&lt;br /&gt;
| exynos4412-p4note-n8010&lt;br /&gt;
| exynos4412-smdk4412&lt;br /&gt;
|-&lt;br /&gt;
| exynos4412-tiny4412&lt;br /&gt;
| exynos4412-trats2&lt;br /&gt;
| exynos5250-arndale&lt;br /&gt;
| exynos5250-smdk5250&lt;br /&gt;
| exynos5250-snow-rev5&lt;br /&gt;
| exynos5250-snow&lt;br /&gt;
| exynos5250-spring&lt;br /&gt;
| exynos5260-xyref5260&lt;br /&gt;
| exynos5410-odroidxu&lt;br /&gt;
| exynos5410-smdk5410&lt;br /&gt;
| exynos5420-arndale-octa&lt;br /&gt;
|-&lt;br /&gt;
| exynos5420-peach-pit&lt;br /&gt;
| exynos5420-smdk5420&lt;br /&gt;
| exynos5422-odroidhc1&lt;br /&gt;
| exynos5422-odroidxu3-lite&lt;br /&gt;
| exynos5422-odroidxu3&lt;br /&gt;
| exynos5422-odroidxu4&lt;br /&gt;
| exynos5800-peach-pi&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;
|-&lt;br /&gt;
| imx51-eukrea-mbimxsd51-baseboard&lt;br /&gt;
| imx51-ts4800&lt;br /&gt;
| imx51-zii-rdu1&lt;br /&gt;
| imx51-zii-scu2-mezz&lt;br /&gt;
| imx51-zii-scu3-esb&lt;br /&gt;
| imx53-ard&lt;br /&gt;
| imx53-cx9020&lt;br /&gt;
| imx53-kp-ddc&lt;br /&gt;
| imx53-kp-hsc&lt;br /&gt;
| imx53-m53evk&lt;br /&gt;
| imx53-m53menlo&lt;br /&gt;
|-&lt;br /&gt;
| imx53-mba53&lt;br /&gt;
| imx53-ppd&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-usbarmory&lt;br /&gt;
| imx53-voipac-bsb&lt;br /&gt;
| imx6dl-alti6p&lt;br /&gt;
| imx6dl-apf6dev&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-aristainetos2_4&lt;br /&gt;
| imx6dl-aristainetos2_7&lt;br /&gt;
| imx6dl-aristainetos_4&lt;br /&gt;
| imx6dl-aristainetos_7&lt;br /&gt;
| imx6dl-b105pv2&lt;br /&gt;
| imx6dl-b105v2&lt;br /&gt;
| imx6dl-b125pv2&lt;br /&gt;
| imx6dl-b125v2&lt;br /&gt;
| imx6dl-b155v2&lt;br /&gt;
| imx6dl-colibri-eval-v3&lt;br /&gt;
| imx6dl-colibri-v1_1-eval-v3&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-cubox-i-emmc-som-v15&lt;br /&gt;
| imx6dl-cubox-i-som-v15&lt;br /&gt;
| imx6dl-cubox-i&lt;br /&gt;
| imx6dl-dfi-fs700-m60&lt;br /&gt;
| imx6dl-dhcom-picoitx&lt;br /&gt;
| imx6dl-eckelmann-ci4x10&lt;br /&gt;
| imx6dl-emcon-avari&lt;br /&gt;
| imx6dl-gw51xx&lt;br /&gt;
| imx6dl-gw52xx&lt;br /&gt;
| imx6dl-gw53xx&lt;br /&gt;
| imx6dl-gw54xx&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-gw551x&lt;br /&gt;
| imx6dl-gw552x&lt;br /&gt;
| imx6dl-gw553x&lt;br /&gt;
| imx6dl-gw560x&lt;br /&gt;
| imx6dl-gw5903&lt;br /&gt;
| imx6dl-gw5904&lt;br /&gt;
| imx6dl-gw5907&lt;br /&gt;
| imx6dl-gw5910&lt;br /&gt;
| imx6dl-gw5912&lt;br /&gt;
| imx6dl-gw5913&lt;br /&gt;
| imx6dl-hummingboard-emmc-som-v15&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-hummingboard-som-v15&lt;br /&gt;
| imx6dl-hummingboard&lt;br /&gt;
| imx6dl-hummingboard2-emmc-som-v15&lt;br /&gt;
| imx6dl-hummingboard2-som-v15&lt;br /&gt;
| imx6dl-hummingboard2&lt;br /&gt;
| imx6dl-icore-mipi&lt;br /&gt;
| imx6dl-icore-rqs&lt;br /&gt;
| imx6dl-icore&lt;br /&gt;
| imx6dl-lanmcu&lt;br /&gt;
| imx6dl-mamoj&lt;br /&gt;
| imx6dl-nit6xlite&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-nitrogen6x&lt;br /&gt;
| imx6dl-phytec-mira-rdk-nand&lt;br /&gt;
| imx6dl-phytec-pbab01&lt;br /&gt;
| imx6dl-pico-dwarf&lt;br /&gt;
| imx6dl-pico-hobbit&lt;br /&gt;
| imx6dl-pico-nymph&lt;br /&gt;
| imx6dl-pico-pi&lt;br /&gt;
| imx6dl-plybas&lt;br /&gt;
| imx6dl-plym2m&lt;br /&gt;
| imx6dl-prtmvt&lt;br /&gt;
| imx6dl-prtrvt&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-prtvt7&lt;br /&gt;
| imx6dl-rex-basic&lt;br /&gt;
| imx6dl-riotboard&lt;br /&gt;
| imx6dl-sabreauto&lt;br /&gt;
| imx6dl-sabrelite&lt;br /&gt;
| imx6dl-sabresd&lt;br /&gt;
| imx6dl-savageboard&lt;br /&gt;
| imx6dl-skov-revc-lt2&lt;br /&gt;
| imx6dl-skov-revc-lt6&lt;br /&gt;
| imx6dl-solidsense&lt;br /&gt;
| imx6dl-ts4900&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-ts7970&lt;br /&gt;
| imx6dl-tx6dl-comtft&lt;br /&gt;
| imx6dl-tx6s-8034-mb7&lt;br /&gt;
| imx6dl-tx6s-8034&lt;br /&gt;
| imx6dl-tx6s-8035-mb7&lt;br /&gt;
| imx6dl-tx6s-8035&lt;br /&gt;
| imx6dl-tx6u-801x&lt;br /&gt;
| imx6dl-tx6u-8033-mb7&lt;br /&gt;
| imx6dl-tx6u-8033&lt;br /&gt;
| imx6dl-tx6u-80xx-mb7&lt;br /&gt;
| imx6dl-tx6u-811x&lt;br /&gt;
|-&lt;br /&gt;
| imx6dl-tx6u-81xx-mb7&lt;br /&gt;
| imx6dl-udoo&lt;br /&gt;
| imx6dl-victgo&lt;br /&gt;
| imx6dl-vicut1&lt;br /&gt;
| imx6dl-wandboard-revb1&lt;br /&gt;
| imx6dl-wandboard-revd1&lt;br /&gt;
| imx6dl-wandboard&lt;br /&gt;
| imx6dl-yapp4-draco&lt;br /&gt;
| imx6dl-yapp4-hydra&lt;br /&gt;
| imx6dl-yapp4-orion&lt;br /&gt;
| imx6dl-yapp4-ursa&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-apalis-eval&lt;br /&gt;
| imx6q-apalis-ixora-v1.1&lt;br /&gt;
| imx6q-apalis-ixora&lt;br /&gt;
| imx6q-apf6dev&lt;br /&gt;
| imx6q-arm2&lt;br /&gt;
| imx6q-b450v3&lt;br /&gt;
| imx6q-b650v3&lt;br /&gt;
| imx6q-b850v3&lt;br /&gt;
| imx6q-cm-fx6&lt;br /&gt;
| imx6q-cubox-i-emmc-som-v15&lt;br /&gt;
| imx6q-cubox-i-som-v15&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-cubox-i&lt;br /&gt;
| imx6q-dfi-fs700-m60&lt;br /&gt;
| imx6q-dhcom-pdk2&lt;br /&gt;
| imx6q-display5-tianma-tm070-1280x768&lt;br /&gt;
| imx6q-dmo-edmqmx6&lt;br /&gt;
| imx6q-dms-ba16&lt;br /&gt;
| imx6q-ds&lt;br /&gt;
| imx6q-emcon-avari&lt;br /&gt;
| imx6q-evi&lt;br /&gt;
| imx6q-gk802&lt;br /&gt;
| imx6q-gw51xx&lt;br /&gt;
|-&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-gw551x&lt;br /&gt;
| imx6q-gw552x&lt;br /&gt;
| imx6q-gw553x&lt;br /&gt;
| imx6q-gw560x&lt;br /&gt;
| imx6q-gw5903&lt;br /&gt;
| imx6q-gw5904&lt;br /&gt;
| imx6q-gw5907&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-gw5910&lt;br /&gt;
| imx6q-gw5912&lt;br /&gt;
| imx6q-gw5913&lt;br /&gt;
| imx6q-h100&lt;br /&gt;
| imx6q-hummingboard-emmc-som-v15&lt;br /&gt;
| imx6q-hummingboard-som-v15&lt;br /&gt;
| imx6q-hummingboard&lt;br /&gt;
| imx6q-hummingboard2-emmc-som-v15&lt;br /&gt;
| imx6q-hummingboard2-som-v15&lt;br /&gt;
| imx6q-hummingboard2&lt;br /&gt;
| imx6q-icore-mipi&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-icore-ofcap10&lt;br /&gt;
| imx6q-icore-ofcap12&lt;br /&gt;
| imx6q-icore-rqs&lt;br /&gt;
| imx6q-icore&lt;br /&gt;
| imx6q-kp-tpc&lt;br /&gt;
| imx6q-logicpd&lt;br /&gt;
| imx6q-marsboard&lt;br /&gt;
| imx6q-mccmon6&lt;br /&gt;
| imx6q-nitrogen6_max&lt;br /&gt;
| imx6q-nitrogen6_som2&lt;br /&gt;
| imx6q-nitrogen6x&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-novena&lt;br /&gt;
| imx6q-phytec-mira-rdk-emmc&lt;br /&gt;
| imx6q-phytec-mira-rdk-nand&lt;br /&gt;
| imx6q-phytec-pbab01&lt;br /&gt;
| imx6q-pico-dwarf&lt;br /&gt;
| imx6q-pico-hobbit&lt;br /&gt;
| imx6q-pico-nymph&lt;br /&gt;
| imx6q-pico-pi&lt;br /&gt;
| imx6q-pistachio&lt;br /&gt;
| imx6q-prti6q&lt;br /&gt;
| imx6q-prtwd2&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-rex-pro&lt;br /&gt;
| imx6q-sabreauto&lt;br /&gt;
| imx6q-sabrelite&lt;br /&gt;
| imx6q-sabresd&lt;br /&gt;
| imx6q-savageboard&lt;br /&gt;
| imx6q-sbc6x&lt;br /&gt;
| imx6q-skov-revc-lt2&lt;br /&gt;
| imx6q-skov-revc-lt6&lt;br /&gt;
| imx6q-skov-reve-mi1010ait-1cp1&lt;br /&gt;
| imx6q-solidsense&lt;br /&gt;
| imx6q-tbs2910&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-ts4900&lt;br /&gt;
| imx6q-ts7970&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-1036-mb7&lt;br /&gt;
| imx6q-tx6q-1036&lt;br /&gt;
| imx6q-tx6q-10x0-mb7&lt;br /&gt;
| imx6q-tx6q-1110&lt;br /&gt;
| imx6q-tx6q-11x0-mb7&lt;br /&gt;
|-&lt;br /&gt;
| imx6q-udoo&lt;br /&gt;
| imx6q-utilite-pro&lt;br /&gt;
| imx6q-var-dt6customboard&lt;br /&gt;
| imx6q-vicut1&lt;br /&gt;
| imx6q-wandboard-revb1&lt;br /&gt;
| imx6q-wandboard-revd1&lt;br /&gt;
| imx6q-wandboard&lt;br /&gt;
| imx6q-zii-rdu2&lt;br /&gt;
| imx6qp-nitrogen6_max&lt;br /&gt;
| imx6qp-nitrogen6_som2&lt;br /&gt;
| imx6qp-phytec-mira-rdk-nand&lt;br /&gt;
|-&lt;br /&gt;
| imx6qp-prtwd3&lt;br /&gt;
| imx6qp-sabreauto&lt;br /&gt;
| imx6qp-sabresd&lt;br /&gt;
| imx6qp-tx6qp-8037-mb7&lt;br /&gt;
| imx6qp-tx6qp-8037&lt;br /&gt;
| imx6qp-tx6qp-8137-mb7&lt;br /&gt;
| imx6qp-tx6qp-8137&lt;br /&gt;
| imx6qp-vicutp&lt;br /&gt;
| imx6qp-wandboard-revd1&lt;br /&gt;
| imx6qp-zii-rdu2&lt;br /&gt;
| imx6s-dhcom-drc02&lt;br /&gt;
|-&lt;br /&gt;
| imx6sl-evk&lt;br /&gt;
| imx6sl-tolino-shine2hd&lt;br /&gt;
| imx6sl-tolino-shine3&lt;br /&gt;
| imx6sl-warp&lt;br /&gt;
| imx6sx-nitrogen6sx&lt;br /&gt;
| imx6sx-sabreauto&lt;br /&gt;
| imx6sx-sdb-mqs&lt;br /&gt;
| imx6sx-sdb-reva&lt;br /&gt;
| imx6sx-sdb-sai&lt;br /&gt;
| imx6sx-sdb&lt;br /&gt;
| imx6sx-softing-vining-2000&lt;br /&gt;
|-&lt;br /&gt;
| imx6sx-udoo-neo-basic&lt;br /&gt;
| imx6sx-udoo-neo-extended&lt;br /&gt;
| imx6sx-udoo-neo-full&lt;br /&gt;
| imx6ul-14x14-evk&lt;br /&gt;
| imx6ul-ccimx6ulsbcexpress&lt;br /&gt;
| imx6ul-ccimx6ulsbcpro&lt;br /&gt;
| imx6ul-geam&lt;br /&gt;
| imx6ul-isiot-emmc&lt;br /&gt;
| imx6ul-isiot-nand&lt;br /&gt;
| imx6ul-kontron-n6310-s-43&lt;br /&gt;
| imx6ul-kontron-n6310-s&lt;br /&gt;
|-&lt;br /&gt;
| imx6ul-liteboard&lt;br /&gt;
| imx6ul-opos6uldev&lt;br /&gt;
| imx6ul-phytec-segin-ff-rdk-emmc&lt;br /&gt;
| imx6ul-phytec-segin-ff-rdk-nand&lt;br /&gt;
| imx6ul-pico-dwarf&lt;br /&gt;
| imx6ul-pico-hobbit&lt;br /&gt;
| imx6ul-pico-pi&lt;br /&gt;
| imx6ul-prti6g&lt;br /&gt;
| imx6ul-tx6ul-0010&lt;br /&gt;
| imx6ul-tx6ul-0011&lt;br /&gt;
| imx6ul-tx6ul-mainboard&lt;br /&gt;
|-&lt;br /&gt;
| imx6ull-14x14-evk&lt;br /&gt;
| imx6ull-colibri-eval-v3&lt;br /&gt;
| imx6ull-colibri-wifi-eval-v3&lt;br /&gt;
| imx6ull-myir-mys-6ulx-eval&lt;br /&gt;
| imx6ull-opos6uldev&lt;br /&gt;
| imx6ull-phytec-segin-ff-rdk-emmc&lt;br /&gt;
| imx6ull-phytec-segin-ff-rdk-nand&lt;br /&gt;
| imx6ull-phytec-segin-lc-rdk-nand&lt;br /&gt;
| imx6ulz-14x14-evk&lt;br /&gt;
| imx7d-cl-som-imx7&lt;br /&gt;
| imx7d-colibri-aster&lt;br /&gt;
|-&lt;br /&gt;
| imx7d-colibri-emmc-aster&lt;br /&gt;
| imx7d-colibri-emmc-eval-v3&lt;br /&gt;
| imx7d-colibri-eval-v3&lt;br /&gt;
| imx7d-flex-concentrator-mfg&lt;br /&gt;
| imx7d-flex-concentrator&lt;br /&gt;
| imx7d-mba7&lt;br /&gt;
| imx7d-meerkat96&lt;br /&gt;
| imx7d-nitrogen7&lt;br /&gt;
| imx7d-pico-dwarf&lt;br /&gt;
| imx7d-pico-hobbit&lt;br /&gt;
| imx7d-pico-nymph&lt;br /&gt;
|-&lt;br /&gt;
| imx7d-pico-pi&lt;br /&gt;
| imx7d-remarkable2&lt;br /&gt;
| imx7d-sbc-imx7&lt;br /&gt;
| imx7d-sdb-reva&lt;br /&gt;
| imx7d-sdb-sht11&lt;br /&gt;
| imx7d-sdb&lt;br /&gt;
| imx7d-zii-rmu2&lt;br /&gt;
| imx7d-zii-rpu2&lt;br /&gt;
| imx7s-colibri-aster&lt;br /&gt;
| imx7s-colibri-eval-v3&lt;br /&gt;
| imx7s-mba7&lt;br /&gt;
|-&lt;br /&gt;
| imx7s-warp&lt;br /&gt;
| qcom-apq8060-dragonboard&lt;br /&gt;
| qcom-apq8064-asus-nexus7-flo&lt;br /&gt;
| qcom-apq8064-cm-qs600&lt;br /&gt;
| qcom-apq8064-ifc6410&lt;br /&gt;
| qcom-apq8064-sony-xperia-yuga&lt;br /&gt;
| qcom-apq8074-dragonboard&lt;br /&gt;
| qcom-apq8084-ifc6540&lt;br /&gt;
| qcom-apq8084-mtp&lt;br /&gt;
| qcom-ipq4018-ap120c-ac-bit&lt;br /&gt;
| qcom-ipq4018-ap120c-ac&lt;br /&gt;
|-&lt;br /&gt;
| qcom-ipq4018-jalapeno&lt;br /&gt;
| qcom-ipq4019-ap.dk01.1-c1&lt;br /&gt;
| qcom-ipq4019-ap.dk04.1-c1&lt;br /&gt;
| qcom-ipq4019-ap.dk04.1-c3&lt;br /&gt;
| qcom-ipq4019-ap.dk07.1-c1&lt;br /&gt;
| qcom-ipq4019-ap.dk07.1-c2&lt;br /&gt;
| qcom-ipq8064-ap148&lt;br /&gt;
| qcom-ipq8064-rb3011&lt;br /&gt;
| qcom-mdm9615-wp8548-mangoh-green&lt;br /&gt;
| qcom-msm8226-samsung-s3ve3g&lt;br /&gt;
| qcom-msm8660-surf&lt;br /&gt;
|-&lt;br /&gt;
| qcom-msm8960-cdp&lt;br /&gt;
| qcom-msm8974-fairphone-fp2&lt;br /&gt;
| qcom-msm8974-lge-nexus5-hammerhead&lt;br /&gt;
| qcom-msm8974-samsung-klte&lt;br /&gt;
| qcom-msm8974-sony-xperia-amami&lt;br /&gt;
| qcom-msm8974-sony-xperia-castor&lt;br /&gt;
| qcom-msm8974-sony-xperia-honami&lt;br /&gt;
| qcom-sdx55-mtp&lt;br /&gt;
| qcom-sdx55-t55&lt;br /&gt;
| qcom-sdx55-telit-fn980-tlb&lt;br /&gt;
| sun4i-a10-a1000&lt;br /&gt;
|-&lt;br /&gt;
| sun4i-a10-ba10-tvbox&lt;br /&gt;
| sun4i-a10-chuwi-v7-cw0825&lt;br /&gt;
| sun4i-a10-cubieboard&lt;br /&gt;
| sun4i-a10-dserve-dsrv9703c&lt;br /&gt;
| sun4i-a10-gemei-g9&lt;br /&gt;
| sun4i-a10-hackberry&lt;br /&gt;
| sun4i-a10-hyundai-a7hd&lt;br /&gt;
| sun4i-a10-inet1&lt;br /&gt;
| sun4i-a10-inet97fv2&lt;br /&gt;
| sun4i-a10-inet9f-rev03&lt;br /&gt;
| sun4i-a10-itead-iteaduino-plus&lt;br /&gt;
|-&lt;br /&gt;
| sun4i-a10-jesurun-q5&lt;br /&gt;
| sun4i-a10-marsboard&lt;br /&gt;
| sun4i-a10-mini-xplus&lt;br /&gt;
| sun4i-a10-mk802&lt;br /&gt;
| sun4i-a10-mk802ii&lt;br /&gt;
| sun4i-a10-olinuxino-lime&lt;br /&gt;
| sun4i-a10-pcduino&lt;br /&gt;
| sun4i-a10-pcduino2&lt;br /&gt;
| sun4i-a10-pov-protab2-ips9&lt;br /&gt;
| sun4i-a10-topwise-a721&lt;br /&gt;
| sun5i-a10s-auxtek-t003&lt;br /&gt;
|-&lt;br /&gt;
| sun5i-a10s-auxtek-t004&lt;br /&gt;
| sun5i-a10s-mk802&lt;br /&gt;
| sun5i-a10s-olinuxino-micro&lt;br /&gt;
| sun5i-a10s-r7-tv-dongle&lt;br /&gt;
| sun5i-a10s-wobo-i5&lt;br /&gt;
| sun5i-a13-difrnce-dit4350&lt;br /&gt;
| sun5i-a13-empire-electronix-d709&lt;br /&gt;
| sun5i-a13-empire-electronix-m712&lt;br /&gt;
| sun5i-a13-hsg-h702&lt;br /&gt;
| sun5i-a13-inet-98v-rev2&lt;br /&gt;
| sun5i-a13-licheepi-one&lt;br /&gt;
|-&lt;br /&gt;
| sun5i-a13-olinuxino-micro&lt;br /&gt;
| sun5i-a13-olinuxino&lt;br /&gt;
| sun5i-a13-pocketbook-touch-lux-3&lt;br /&gt;
| sun5i-a13-q8-tablet&lt;br /&gt;
| sun5i-a13-utoo-p66&lt;br /&gt;
| sun5i-gr8-chip-pro&lt;br /&gt;
| sun5i-gr8-evb&lt;br /&gt;
| sun5i-r8-chip&lt;br /&gt;
| sun6i-a31-app4-evb1&lt;br /&gt;
| sun6i-a31-colombus&lt;br /&gt;
| sun6i-a31-hummingbird&lt;br /&gt;
|-&lt;br /&gt;
| sun6i-a31-i7&lt;br /&gt;
| sun6i-a31-m9&lt;br /&gt;
| sun6i-a31-mele-a1000g-quad&lt;br /&gt;
| sun6i-a31s-colorfly-e708-q1&lt;br /&gt;
| sun6i-a31s-cs908&lt;br /&gt;
| sun6i-a31s-inet-q972&lt;br /&gt;
| sun6i-a31s-primo81&lt;br /&gt;
| sun6i-a31s-sina31s&lt;br /&gt;
| sun6i-a31s-sinovoip-bpi-m2&lt;br /&gt;
| sun6i-a31s-yones-toptech-bs1078-v2&lt;br /&gt;
| sun7i-a20-bananapi-m1-plus&lt;br /&gt;
|-&lt;br /&gt;
| sun7i-a20-bananapi&lt;br /&gt;
| sun7i-a20-bananapro&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-icnova-swac&lt;br /&gt;
| sun7i-a20-itead-ibox&lt;br /&gt;
| sun7i-a20-lamobo-r1&lt;br /&gt;
| sun7i-a20-linutronix-testbox-v2&lt;br /&gt;
| sun7i-a20-m3&lt;br /&gt;
|-&lt;br /&gt;
| sun7i-a20-mk808c&lt;br /&gt;
| sun7i-a20-olimex-som-evb-emmc&lt;br /&gt;
| sun7i-a20-olimex-som-evb&lt;br /&gt;
| sun7i-a20-olimex-som204-evb-emmc&lt;br /&gt;
| sun7i-a20-olimex-som204-evb&lt;br /&gt;
| sun7i-a20-olinuxino-lime-emmc&lt;br /&gt;
| sun7i-a20-olinuxino-lime&lt;br /&gt;
| sun7i-a20-olinuxino-lime2-emmc&lt;br /&gt;
| sun7i-a20-olinuxino-lime2&lt;br /&gt;
| sun7i-a20-olinuxino-micro-emmc&lt;br /&gt;
| sun7i-a20-olinuxino-micro&lt;br /&gt;
|-&lt;br /&gt;
| sun7i-a20-orangepi-mini&lt;br /&gt;
| sun7i-a20-orangepi&lt;br /&gt;
| sun7i-a20-pcduino3-nano&lt;br /&gt;
| sun7i-a20-pcduino3&lt;br /&gt;
| sun7i-a20-wexler-tab7200&lt;br /&gt;
| sun7i-a20-wits-pro-a20-dkt&lt;br /&gt;
| sun8i-a23-evb&lt;br /&gt;
| sun8i-a23-gt90h-v4&lt;br /&gt;
| sun8i-a23-inet86dz&lt;br /&gt;
| sun8i-a23-ippo-q8h-v1.2&lt;br /&gt;
| sun8i-a23-ippo-q8h-v5&lt;br /&gt;
|-&lt;br /&gt;
| sun8i-a23-polaroid-mid2407pxe03&lt;br /&gt;
| sun8i-a23-polaroid-mid2809pxe04&lt;br /&gt;
| sun8i-a23-q8-tablet&lt;br /&gt;
| sun8i-a33-et-q8-v1.6&lt;br /&gt;
| sun8i-a33-ga10h-v1.1&lt;br /&gt;
| sun8i-a33-inet-d978-rev2&lt;br /&gt;
| sun8i-a33-ippo-q8h-v1.2&lt;br /&gt;
| sun8i-a33-olinuxino&lt;br /&gt;
| sun8i-a33-q8-tablet&lt;br /&gt;
| sun8i-a33-sinlinx-sina33&lt;br /&gt;
| sun8i-a83t-allwinner-h8homlet-v2&lt;br /&gt;
|-&lt;br /&gt;
| sun8i-a83t-bananapi-m3&lt;br /&gt;
| sun8i-a83t-cubietruck-plus&lt;br /&gt;
| sun8i-a83t-tbs-a711&lt;br /&gt;
| sun8i-h2-plus-bananapi-m2-zero&lt;br /&gt;
| sun8i-h2-plus-libretech-all-h3-cc&lt;br /&gt;
| sun8i-h2-plus-orangepi-r1&lt;br /&gt;
| sun8i-h2-plus-orangepi-zero&lt;br /&gt;
| sun8i-h3-bananapi-m2-plus-v1.2&lt;br /&gt;
| sun8i-h3-bananapi-m2-plus&lt;br /&gt;
| sun8i-h3-beelink-x2&lt;br /&gt;
| sun8i-h3-emlid-neutis-n5h3-devboard&lt;br /&gt;
|-&lt;br /&gt;
| sun8i-h3-libretech-all-h3-cc&lt;br /&gt;
| sun8i-h3-mapleboard-mp130&lt;br /&gt;
| sun8i-h3-nanopi-duo2&lt;br /&gt;
| sun8i-h3-nanopi-m1-plus&lt;br /&gt;
| sun8i-h3-nanopi-m1&lt;br /&gt;
| sun8i-h3-nanopi-neo-air&lt;br /&gt;
| sun8i-h3-nanopi-neo&lt;br /&gt;
| sun8i-h3-nanopi-r1&lt;br /&gt;
| sun8i-h3-orangepi-2&lt;br /&gt;
| sun8i-h3-orangepi-lite&lt;br /&gt;
| sun8i-h3-orangepi-one&lt;br /&gt;
|-&lt;br /&gt;
| sun8i-h3-orangepi-pc-plus&lt;br /&gt;
| sun8i-h3-orangepi-pc&lt;br /&gt;
| sun8i-h3-orangepi-plus&lt;br /&gt;
| sun8i-h3-orangepi-plus2e&lt;br /&gt;
| sun8i-h3-orangepi-zero-plus2&lt;br /&gt;
| sun8i-h3-rervision-dvk&lt;br /&gt;
| sun8i-h3-zeropi&lt;br /&gt;
| sun8i-r16-bananapi-m2m&lt;br /&gt;
| sun8i-r16-nintendo-nes-classic&lt;br /&gt;
| sun8i-r16-nintendo-super-nes-classic&lt;br /&gt;
| sun8i-r16-parrot&lt;br /&gt;
|-&lt;br /&gt;
| sun8i-r40-bananapi-m2-ultra&lt;br /&gt;
| sun8i-r40-oka40i-c&lt;br /&gt;
| sun8i-s3-elimo-initium&lt;br /&gt;
| sun8i-s3-lichee-zero-plus&lt;br /&gt;
| sun8i-s3-pinecube&lt;br /&gt;
| sun8i-t3-cqa3t-bv3&lt;br /&gt;
| sun8i-v3-sl631-imx179&lt;br /&gt;
| sun8i-v3s-licheepi-zero-dock&lt;br /&gt;
| sun8i-v3s-licheepi-zero&lt;br /&gt;
| sun8i-v40-bananapi-m2-berry&lt;br /&gt;
| sun9i-a80-cubieboard4&lt;br /&gt;
|-&lt;br /&gt;
| sun9i-a80-optimus&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;
| zynq-cc108&lt;br /&gt;
| zynq-ebaz4205&lt;br /&gt;
| zynq-microzed&lt;br /&gt;
| zynq-parallella&lt;br /&gt;
| zynq-zc702&lt;br /&gt;
| zynq-zc706&lt;br /&gt;
|-&lt;br /&gt;
| zynq-zc770-xm010&lt;br /&gt;
| zynq-zc770-xm011&lt;br /&gt;
| zynq-zc770-xm012&lt;br /&gt;
| zynq-zc770-xm013&lt;br /&gt;
| zynq-zed&lt;br /&gt;
| zynq-zturn-v5&lt;br /&gt;
| zynq-zturn&lt;br /&gt;
| zynq-zybo-z7&lt;br /&gt;
| zynq-zybo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Install Alpine on supported SoCs==&lt;br /&gt;
&lt;br /&gt;
=== Generic information ===&lt;br /&gt;
&lt;br /&gt;
(If anyone has one of the above devices and has successfully installed Alpine on it, please consider adding the missing info here.)&lt;br /&gt;
&lt;br /&gt;
==== Example with Wandboard ====&lt;br /&gt;
&lt;br /&gt;
===== Get latest Alpine image =====&lt;br /&gt;
Download the last Generic ARM image on https://alpinelinux.org/downloads/&lt;br /&gt;
Extract the archive somewhere.&lt;br /&gt;
&lt;br /&gt;
===== Prepare SD Card =====&lt;br /&gt;
First install SPL and u-boot.img (this could change for other board):&lt;br /&gt;
in root, write the SPL from Alpine extracted files :&lt;br /&gt;
 dd if=u-boot/wandboard/SPL of=/dev/sdX seek=1 bs=1k&lt;br /&gt;
and the u-boot.img :&lt;br /&gt;
 dd if=u-boot/wandboard/u-boot.img of=/dev/sdX seek=69 bs=1k&lt;br /&gt;
&lt;br /&gt;
After create the partition on the sd-card with fdisk, then copy folders apks/ boot/ efi/ extlinux/ u-boot/ to the sd-card partition. (I&#039;m not sure all folder as useful).&lt;br /&gt;
&lt;br /&gt;
After you can put the sd-card in the Wandboard and boot it with serial console connected.&amp;lt;br&amp;gt;&lt;br /&gt;
The board should boot on the sd-card. When the prompt ask a login, enter &#039;root&#039;.&lt;br /&gt;
Then launch &#039;setup-alpine&#039; to configure the system.&lt;br /&gt;
&lt;br /&gt;
=== Specific guides ===&lt;br /&gt;
&lt;br /&gt;
* [[DIY Fully working Alpine Linux for Allwinner and Other ARM SOCs]]&lt;br /&gt;
* [[Raspberry_Pi]]&lt;br /&gt;
* [[Raspberry_Pi_4_-_Persistent_system_acting_as_a_NAS_and_Time_Machine]]&lt;br /&gt;
* [[Odroid-C2]]&lt;br /&gt;
* [https://github.com/rickyrockrat/nanopi-alpine NanoPi Neo build script]&lt;br /&gt;
&lt;br /&gt;
==Unupported SoCs==&lt;br /&gt;
&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;
&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&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;
&lt;br /&gt;
&lt;br /&gt;
===The embedded world===&lt;br /&gt;
&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 will 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;
&lt;br /&gt;
====Storage====&lt;br /&gt;
&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;
&lt;br /&gt;
====Power on====&lt;br /&gt;
&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;
&lt;br /&gt;
====Partitioning====&lt;br /&gt;
&lt;br /&gt;
Either DOS or GPT patitions should work. Start of the first partition should be on block 2048 so there is 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;
&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;
&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;
&lt;br /&gt;
&lt;br /&gt;
== References ==&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>Nrenniewaldock</name></author>
	</entry>
</feed>