<?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=Arrogance</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=Arrogance"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Arrogance"/>
	<updated>2026-04-29T13:14:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Eudev&amp;diff=26286</id>
		<title>Eudev</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Eudev&amp;diff=26286"/>
		<updated>2024-01-19T03:45:45Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:eudev}}&lt;br /&gt;
[https://github.com/eudev-project/eudev eudev] is a [[Device_Manager|device manager]] that provides a drop-in replacement for systemd udev. It is therefore recommended for full blown desktop environments.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The easy way to setup eudev is through the [[#Setup_Script|setup script]]. For custom installation see the [[#Manually|manually section]]. Note that a manual installation is only recommended for advanced users.&lt;br /&gt;
&lt;br /&gt;
=== Setup Script ===&lt;br /&gt;
&lt;br /&gt;
The {{pkg|alpine-conf}} package provides [https://git.alpinelinux.org/alpine-conf/tree/setup-devd.in setup-devd] to easily install and setup device managers.&lt;br /&gt;
&lt;br /&gt;
Install {{pkg|alpine-conf}} if it is not already installed.&lt;br /&gt;
{{cmd|# apk add {{pkg|alpine-conf}}}}&lt;br /&gt;
Setup eudev.&lt;br /&gt;
{{cmd|# setup-devd udev}}&lt;br /&gt;
&lt;br /&gt;
=== Manually ===&lt;br /&gt;
&lt;br /&gt;
You need to install eudev itself and the udev services.&lt;br /&gt;
{{cmd|# apk add {{pkg|eudev}} {{pkg|udev-init-scripts}}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you already have a device manager installed you need to stop it before you start eudev.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then enable the services.&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;# rc-update add udev sysinit&lt;br /&gt;
# rc-update add udev-trigger sysinit&lt;br /&gt;
# rc-update add udev-settle sysinit&lt;br /&gt;
# rc-update add udev-postmount default&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
If you are not running in a chroot you will also want to start eudev.&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;# rc-service udev start&lt;br /&gt;
# rc-service udev-trigger start&lt;br /&gt;
# rc-service udev-settle start&lt;br /&gt;
# rc-service udev-postmount start&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Remove ==&lt;br /&gt;
&lt;br /&gt;
{{warning|Disabling eudev without setting up a different device manager may cause unexpected issues. If you install a different device manager with the setup script this step is not needed.}}&lt;br /&gt;
&lt;br /&gt;
If you are not running in a chroot you need to stop the service first.&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;# rc-service udev stop&lt;br /&gt;
# rc-service udev-postmount stop&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Then disable the services.&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;# rc-update delete udev sysinit&lt;br /&gt;
# rc-update delete udev-trigger sysinit&lt;br /&gt;
# rc-update delete udev-settle sysinit&lt;br /&gt;
# rc-update delete udev-postmount default&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You might also want to uninstall the packages since they are not used anymore.&lt;br /&gt;
{{cmd|# apk del {{pkg|eudev}} {{pkg|udev-init-scripts}}}}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[:Category:Device_Manager|Device Managers]]&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/Eudev Gentoo wiki eudev]&lt;br /&gt;
* [https://wiki.archlinux.org/title/Udev Archwiki udev]&lt;br /&gt;
&lt;br /&gt;
[[Category:Device_Manager]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Requirements&amp;diff=23682</id>
		<title>Requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Requirements&amp;diff=23682"/>
		<updated>2023-06-19T19:51:19Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: /* Memory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will tell you what requirements you will need to use the Alpine Linux operating system:&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Hardware requirements ==&lt;br /&gt;
&lt;br /&gt;
For installation and usage consider that Alpine can run on several kinds of devices, from the popular PC machine to video game consoles like the 3DS, and as such you must verify the details below:&lt;br /&gt;
&lt;br /&gt;
* CPU architecture&lt;br /&gt;
* Memory&lt;br /&gt;
* Storage&lt;br /&gt;
* Peripherals&lt;br /&gt;
&lt;br /&gt;
=== Architectures ===&lt;br /&gt;
&lt;br /&gt;
CPU architecture is an instruction set design that defines how a processor is used by software. Widely used across desktops and servers are x86 (mostly i386) and x86_64 (also known as amd64). There are other supported computer architectures that are not &amp;quot;x86&amp;quot;, like mainframes, servers, and embedded devices (such as routers like Sonicwall and Cisco ones). The table below represents architectures supported by Alpine:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Supported architecture !! Available since !! Description&lt;br /&gt;
|-&lt;br /&gt;
| x86_64 || all || Widely spread AMD64 compatible 64-bit x86 instruction set.&lt;br /&gt;
|-&lt;br /&gt;
| x86 || all || Another widely used 32-bit instruction set.&lt;br /&gt;
|-&lt;br /&gt;
| ppc64le || v3.6 || For PowerPC devices with pure little-endian mode, mostly for POWER8 and POWER9&lt;br /&gt;
|-&lt;br /&gt;
| armhf || v3.0 || A 32-bit ARM instruction set with hard-float point extension.&lt;br /&gt;
|-&lt;br /&gt;
| armv7 || v3.9 || The 32-bit ARM only execution state of the ARMv7 devices machines.&lt;br /&gt;
|-&lt;br /&gt;
| aarch64 || v3.5 || The 64-bit ARM only execution state of the ARMv8+ device machines.&lt;br /&gt;
|-&lt;br /&gt;
| ppc64le || v3.6 || For 64-bit big-endian PowerPC and Power ISA processors like some Mac computers.&lt;br /&gt;
|-&lt;br /&gt;
| s390x || v3.6 || For IBM mainframes, especially IBM Z and IBM LinuxONE servers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Memory ===&lt;br /&gt;
{{Obsolete|Most of these numbers seem to be guessed, if not outright fabricated}}&lt;br /&gt;
Below are shown minimum RAM amounts for various installation types and phases:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target Arch !! Minimum RAM to start !! Minimum RAM to install !! Minimum RAM for GUI desktop !! Enough for GUI work&lt;br /&gt;
|-&lt;br /&gt;
| x86_64 || 512 Megs || 512 Megs || 2 Gigs || 8 Gigs&lt;br /&gt;
|-&lt;br /&gt;
| x86_32 || 128 Megs || 256 Megs || 1 Gigs || 3 Gigs&lt;br /&gt;
|-&lt;br /&gt;
| ppc64le || 128 Megs || 256 Megs || 2 Gigs || 8 Gigs&lt;br /&gt;
|-&lt;br /&gt;
| armhf || 256 Megs || 512 Megs || 1 Gigs || 6 Gigs&lt;br /&gt;
|-&lt;br /&gt;
| armv7 || 256 Megs || 512 Megs || 1 Gigs || 6 Gigs&lt;br /&gt;
|-&lt;br /&gt;
| aarch64 || 256 Megs || 512 Megs || 2 Gigs || 8 Gigs&lt;br /&gt;
|-&lt;br /&gt;
| ppc64le || 256 Megs || 512 Megs || 1 Gigs || 6 Gigs&lt;br /&gt;
|-&lt;br /&gt;
| s390x || 128 Megs || 256 Megs || 2 Gigs || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
&lt;br /&gt;
This means any external or internal storage device that can be added after or before installation to use by the Alpine Linux system. &lt;br /&gt;
&lt;br /&gt;
PATA and SATA hard disk drives are supported, as well as any USB or SD card that can be detected by the Linux during installation.&lt;br /&gt;
&lt;br /&gt;
=== Peripherals ===&lt;br /&gt;
&lt;br /&gt;
This means any external or internal device that can be added before or after installation and detected by Alpine Linux. The peripherals that are supported depends on the current version of the Linux kernel.&lt;br /&gt;
&lt;br /&gt;
Almost any GPU is supported, but certain features and 3D acceleration might depend on MESA drivers:&lt;br /&gt;
&lt;br /&gt;
* Intel: mostly any Intel by one exception, Intel i810/i815 will lack features since it has only 4Mb memory, support for it has been dropped by Mesa and Linux.&lt;br /&gt;
* ATI/AMD, only Radeon series with exception of recent last two years, Rage r128/match64 series has limited support.&lt;br /&gt;
* Nvidia: support for Nvidia GPUs is limited since their drivers are proprietary and built for GNU libc. Nouveau drivers are available as free alternative.&lt;br /&gt;
* Matrox: not all features are supported.&lt;br /&gt;
* Sis: limited features are supported, due to limited support from upstream.&lt;br /&gt;
* Via: limited features are supported, due to limited support from upstream.&lt;br /&gt;
&lt;br /&gt;
== Software requirements ==&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
Alpine boot images are provided on [https://alpinelinux.org/downloads/ downloads page] or on a [https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/ mirror]&lt;br /&gt;
&lt;br /&gt;
The images should be verified as in [[Installation]], to ensure the file wasn&#039;t corrupted during transfer.&lt;br /&gt;
&lt;br /&gt;
=== Booting ===&lt;br /&gt;
&lt;br /&gt;
The following table describes supported firmware types, for more information please check [[Alpine_and_UEFI|Alpine and UEFI]] wiki page.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Supported Arch !! Supported firmware !! Supported Types&lt;br /&gt;
|-&lt;br /&gt;
| x86_64 || Coreboot, Vendor/OEM || BIOS, UEFI&lt;br /&gt;
|-&lt;br /&gt;
| x86 || Coreboot, Vendor/OEM || BIOS, UEFI&lt;br /&gt;
|-&lt;br /&gt;
| ppc64le || Coreboot, Vendor/OEM || UEFI&lt;br /&gt;
|-&lt;br /&gt;
| armhf || Uboot, Vendor/OEM || UEFI&lt;br /&gt;
|-&lt;br /&gt;
| armv7 || Uboot, Vendor/OEM || UEFI&lt;br /&gt;
|-&lt;br /&gt;
| aarch64 || Vendor/OEM || UEFI&lt;br /&gt;
|-&lt;br /&gt;
| s390x || Vendor/OEM || unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Space ===&lt;br /&gt;
&lt;br /&gt;
A default installation of Alpine requires at least 1GB of free space. You can see various partition configurations and their sizes on [[Alpine_and_UEFI#Alpine_disk_layout_for_UEFI|Alpine disk layout for UEFI/BIOS at Alpine and UEFI]] wiki page.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
# [[Installation]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Replacing_non-Alpine_Linux_with_Alpine_remotely&amp;diff=23669</id>
		<title>Replacing non-Alpine Linux with Alpine remotely</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Replacing_non-Alpine_Linux_with_Alpine_remotely&amp;diff=23669"/>
		<updated>2023-06-11T15:52:28Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Marking as obsolete, as per comment by User:Darkfader on the talk page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{obsolete}}&lt;br /&gt;
* What: These instructions are for installing Alpine Linux on a hosted &#039;&#039;physical&#039;&#039; server from a hosting company like serverpronto, bluehost, etc.&lt;br /&gt;
* Why: Typically these companies run Debian, Fedora, or another Linux distribution.  This document explains how to get Alpine Linux on a machine with nothing but ssh access.&lt;br /&gt;
&lt;br /&gt;
== With VNC access ==&lt;br /&gt;
{{Note|Usually providers offer vnc access to the server, if that&#039;s not the case skip this.}}&lt;br /&gt;
Download an alpine iso that boots from ram, e.g. alpine-virt&lt;br /&gt;
  wget nl.alpinelinux.org/alpine/v3.5/releases/x86_64/alpine-virt-3.5.2-x86_64.iso&lt;br /&gt;
Flash the image to the drive of your server, e.g. /dev/sda&lt;br /&gt;
  dd if=alpine-virt-3.5.2-x86_64.iso of=/dev/sda&lt;br /&gt;
Reboot, and login again from vnc with root. Alpine is now running from ram, and should have mounted /dev/sda on /media/sda, paste it into ram.&lt;br /&gt;
  mkdir /media/setup&lt;br /&gt;
  cp -a /media/sda/* /media/setup&lt;br /&gt;
Copy also the kernel modules which are located in /.modloop&lt;br /&gt;
  mkdir /lib/setup&lt;br /&gt;
  cp -a /.modloop/* /lib/setup&lt;br /&gt;
Unmount modloop and the media folder&lt;br /&gt;
  /etc/init.d/modloop stop&lt;br /&gt;
  umount /dev/sda&lt;br /&gt;
Move back the files in place&lt;br /&gt;
  mv /media/setup/* /media/sda/&lt;br /&gt;
  mv /lib/setup/* /.modloop/&lt;br /&gt;
Finally you can format the disk to install alpine&lt;br /&gt;
  setup-disk&lt;br /&gt;
Or just run the the whole setup&lt;br /&gt;
  setup-alpine&lt;br /&gt;
&lt;br /&gt;
== Without VNC access ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This process will not work with alpine-1.9.0_rc4 or &#039;&#039;earlier&#039;&#039;&#039;&#039;&#039;  Use Alpine-1.9.1 or later for best results.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning| Practice on a computer with physical access first. If something goes wrong, the remote box will very likely be left in an unusable state.  In that case, you get to turn in a support request to regen the server back to &amp;quot;factory fresh&amp;quot; mode.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Really.  Practice this first.}}&lt;br /&gt;
&lt;br /&gt;
Prerequisites:&lt;br /&gt;
* SSH access to the remote box (needs to have SSH server running)&lt;br /&gt;
* Alpine Linux supported hardware&lt;br /&gt;
* Adventurous mind&lt;br /&gt;
* Nerves of steel&lt;br /&gt;
&lt;br /&gt;
These instructions are based on a debian (physical) server, and all steps are performed while logged into the machine.  So you should start with a machine that has ssh running.&lt;br /&gt;
&lt;br /&gt;
== Create apk overlay suitable for hard disk based tmpfs boot ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This entire section can be replaced by setting up a box from scratch, using setup-alpine and selecting &#039;none&#039; for the install disk, then running &#039;lbu ci&#039; to save the apkovl. You can then open the overlay and set up networking &#039;&#039;exactly&#039;&#039; as it should be on the target box, then repackage the overlay and drop in the root of alpine_dev on the remote host.)}}&lt;br /&gt;
&lt;br /&gt;
The first step is to create Alpine configuration file with basic configuration of the host. We need the new box to start networking and ssh in the beginning so we can reconnect to it after reboot.&lt;br /&gt;
&lt;br /&gt;
Create basic layout for the overlay:&lt;br /&gt;
 mkdir overlay&lt;br /&gt;
 cd overlay&lt;br /&gt;
 mkdir -p etc/ssh etc/network etc/runlevels/{default,boot,sysinit,shutdown} root/.ssh etc/lbu&lt;br /&gt;
&lt;br /&gt;
You can also use default Alpine configuration files. In this case you should use ssh key to authorize yourself (as root password is empty, and ssh has empty passwords disabled).&lt;br /&gt;
&lt;br /&gt;
If you want to keep the existing host identity (e.g. SSH key), you can copy them over:&lt;br /&gt;
&lt;br /&gt;
 cp -a /etc/{passwd,group,shadow,gshadow,hostname,resolv.conf,network/interfaces,ssh} etc/&lt;br /&gt;
 cp /etc/network/interfaces etc/network&lt;br /&gt;
&lt;br /&gt;
Copy over your ssh authorized_keys and make sure its included in future:&lt;br /&gt;
 cp -a /root/.ssh/authorized_keys root/.ssh&lt;br /&gt;
 echo &amp;quot;/root/.ssh&amp;quot; &amp;gt; etc/lbu/include&lt;br /&gt;
&lt;br /&gt;
Find out which shell is used for root:&lt;br /&gt;
&lt;br /&gt;
 grep ^root /etc/passwd&lt;br /&gt;
&lt;br /&gt;
If its /bin/ash, you are good.  If not, edit etc/passwd and change it to /bin/ash.&lt;br /&gt;
 sed -i -e &#039;/^root:/s:/bin/bash:/bin/ash:&#039; etc/passwd&lt;br /&gt;
&lt;br /&gt;
{{Note|If you don&#039;t do this, nobody (even with physical access) will be able to log into the machine.}}&lt;br /&gt;
&lt;br /&gt;
Create etc/network/interfaces with network configuration (unless it was previously copied over). It should look something like:&lt;br /&gt;
 auto lo&lt;br /&gt;
 iface lo inet loopback&lt;br /&gt;
 &lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
       address ip.ad.dr.es&lt;br /&gt;
       netmask 255.255.255.0&lt;br /&gt;
       gateway gw.ad.dr.es&lt;br /&gt;
&lt;br /&gt;
Since Alpine 3.13 must be:&lt;br /&gt;
 auto lo&lt;br /&gt;
 iface lo inet loopback&lt;br /&gt;
 &lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address ip.ad.dr.es/cidr&lt;br /&gt;
        gateway gw.ad.dr.es&lt;br /&gt;
&#039;&#039;&#039;Make sure there is no whitespace at end of lines&#039;&#039;&#039; in interfaces file. Busybox ifup is very picky.&lt;br /&gt;
&lt;br /&gt;
Make sure your etc/resolv.conf exists; if not create etc/resolv.conf with the nameserver configuration like:&lt;br /&gt;
 nameserver dns.ip.ad.dr&lt;br /&gt;
 options edns0 trust-ad single-request-reopen&lt;br /&gt;
&lt;br /&gt;
Create the apk world (etc/apk/world) with essential packages:&lt;br /&gt;
 mkdir -p etc/apk&lt;br /&gt;
 echo &amp;quot;alpine-base iproute2 openssh&amp;quot; &amp;gt; etc/apk/world&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Double check the IP configuration and ssh keys.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, make the essential services start up automatically and create the overlay file:&lt;br /&gt;
 ln -s /etc/init.d/{hwclock,modules,sysctl,hostname,bootmisc,syslog} etc/runlevels/boot/&lt;br /&gt;
 ln -s /etc/init.d/{devfs,dmesg,mdev,hwdrivers} etc/runlevels/sysinit/&lt;br /&gt;
 ln -s /etc/init.d/{networking,sshd} etc/runlevels/default/&lt;br /&gt;
 ln -s /etc/init.d/{mount-ro,killprocs,savecache} etc/runlevels/shutdown/&lt;br /&gt;
 tar czf ../host.apkovl.tar.gz *&lt;br /&gt;
&lt;br /&gt;
Verify the overlay with &amp;quot;tar tzf&amp;quot; to see that it contains everything in proper places, and ensure it is in the / directory&lt;br /&gt;
&lt;br /&gt;
 tar tzvf host.apkovl.tar.gz&lt;br /&gt;
 cp host.apkovl.tar.gz /&lt;br /&gt;
&lt;br /&gt;
== Install Alpine cd-rom image on hard disk ==&lt;br /&gt;
&lt;br /&gt;
We need to copy over two sets of information: the boot kernel (kernel, initramdisk and boot configuration) and operating system boot data (overlay, apk packages and kernel modules). These can reside on same partition if they fit. However, /boot is usually small, so you might want to put the apks on separate partition. This guide assumes they are on sda1 (/boot) and sda2 (/) with both having ext3 filesystems. If you don&#039;t have ext3 on / or /boot, then you might be able to disable swap and reformat the swap partition as ext3 and use that.&lt;br /&gt;
&lt;br /&gt;
Download an alpine iso and mount it; for example&lt;br /&gt;
&lt;br /&gt;
  wget {{#latestalp:alpine|url}}&lt;br /&gt;
  mount alpine*.iso /cdrom -o loop&lt;br /&gt;
&lt;br /&gt;
Copy the apkovl and the contents of cd-rom image to root of current installation:&lt;br /&gt;
 cp host.apkovl.tar.gz /&lt;br /&gt;
 cp -a /cdrom/* /&lt;br /&gt;
&lt;br /&gt;
Next we make the Alpine Linux kernel bootable (requires syslinux) and use fdisk to mark the /boot partition as bootable (if not done already):&lt;br /&gt;
 dd if=/usr/share/syslinux/mbr.bin of=/dev/sda   # on some older systems its /usr/lib/syslinux/mbr.bin&lt;br /&gt;
 fdisk /dev/sda&lt;br /&gt;
&lt;br /&gt;
Make sure that /boot dir has a symlink pointing to itself. This is to handle the case when /boot is on separate partition.&lt;br /&gt;
  ln -sf . /boot/boot&lt;br /&gt;
&lt;br /&gt;
Create /boot/extlinux.conf with contents like (check the filesystem type for alpine_dev; kernel and initrd are relative to partition root):&lt;br /&gt;
 timeout 20&lt;br /&gt;
 prompt 1&lt;br /&gt;
 default grsec&lt;br /&gt;
 label grsec&lt;br /&gt;
   kernel /boot/grsec&lt;br /&gt;
   append initrd=/boot/grsec.gz alpine_dev=sda2:ext3 modloop=grsec.cmg modules=loop,cramfs,sd-mod,usb-storage,ext3 quiet&lt;br /&gt;
&lt;br /&gt;
From Alpine Linux 2.1 you can use the UUID of the partition that holds the apkovl and the &#039;&#039;apks&#039;&#039; directory, the current root. Use &#039;&#039;blkid&#039;&#039; to get the proper UUID. By using UUID we solve the problem when there are multiple disks and we don&#039;t knowing how kernel enumerates them after boot. Example extlinux.conf:&lt;br /&gt;
 timeout 20&lt;br /&gt;
 prompt 1&lt;br /&gt;
 default grsec&lt;br /&gt;
 label grsec&lt;br /&gt;
 	kernel /boot/grsec&lt;br /&gt;
 	append initrd=/boot/grsec.gz alpine_dev=UUID=44ea33e2-deb4-4a29-88e2-fc8a4ef80ab0:ext3 modloop=grsec.cmg modules=loop,cramfs,sd-mod,usb-storage,ext3 quiet&lt;br /&gt;
&lt;br /&gt;
[Comment added by IceCodeNew]&lt;br /&gt;
&lt;br /&gt;
I tried this instruction on Ubuntu 20.04, and I&#039;m installing Alpine-virt 3.13.2.&lt;br /&gt;
&lt;br /&gt;
I found there is no such file named `*/syslinux/mbr.bin`, but even if I skip the step which issuing `dd if=/usr/share/syslinux/mbr.bin of=/dev/sda`, the machine was able to boot alpine without problem.&lt;br /&gt;
&lt;br /&gt;
Here is the extlinux.conf I use (since there are lots of files that had been renamed):  &lt;br /&gt;
 timeout 20&lt;br /&gt;
 prompt 1&lt;br /&gt;
 default grsec&lt;br /&gt;
 label grsec&lt;br /&gt;
 	kernel /boot/vmlinuz-virt&lt;br /&gt;
 	append initrd=/boot/initramfs-virt alpine_dev=UUID=db153994-91fe-426f-bd88-f751e07f97f2:ext4 modloop=/boot/modloop-virt modules=loop,cramfs,sd-mod,usb-storage,ext4 quiet&lt;br /&gt;
&lt;br /&gt;
[End of comment]&lt;br /&gt;
&lt;br /&gt;
Finally make the /boot partition bootable by extlinux.&lt;br /&gt;
 extlinux -i /boot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Tested on 2.1.2 and higher)  Make sure:&lt;br /&gt;
* grsec.cmg is on /&lt;br /&gt;
* [something].apkovl.tar.gz is on /&lt;br /&gt;
* grsec.gz is on /boot&lt;br /&gt;
* The apline_dev UUID value points to whatever is currently /&lt;br /&gt;
* the partition for /boot is flagged as bootable&lt;br /&gt;
* the output of extlinux was for the partition currently mounted at /boot&lt;br /&gt;
&lt;br /&gt;
== Install Alpine on hard-disk ==&lt;br /&gt;
&lt;br /&gt;
Reboot the box. And wait for it to come alive again. If it doesn&#039;t, tough luck. So dry practice with local box, with as identical hardware as possible.&lt;br /&gt;
&lt;br /&gt;
Once back in the box, we are running in Alpine Linux from tmpfs. So just do a regular installation of Alpine from network via ssh connection.&lt;br /&gt;
&lt;br /&gt;
Edit /etc/apk/repositories to contain your favorite Alpine mirror or just:&lt;br /&gt;
 http://dl-3.alpinelinux.org/alpine/v1.10/packages/main&lt;br /&gt;
&lt;br /&gt;
Finally run:&lt;br /&gt;
 /etc/init.d/modloop stop&lt;br /&gt;
 apk update&lt;br /&gt;
 setup-disk&lt;br /&gt;
&lt;br /&gt;
After hard disk setup is complete, &#039;&#039;&#039;copy ssh_authorized_keys to hard disk&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Reboot once more, and you have the server with native Alpine hard disk installation.&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Template_talk:AlpineLatest&amp;diff=23662</id>
		<title>Template talk:AlpineLatest</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Template_talk:AlpineLatest&amp;diff=23662"/>
		<updated>2023-06-07T11:24:39Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Created page with &amp;quot;This needs to be updated to the latest version (currently 3.18), but I can&amp;#039;t do so as it is protected. ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This needs to be updated to the latest version (currently 3.18), but I can&#039;t do so as it is protected. [[User:Arrogance|Arrogance]] ([[User talk:Arrogance|talk]]) 11:24, 7 June 2023 (UTC)&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Arrogance/subpage/subpage&amp;diff=23623</id>
		<title>User:Arrogance/subpage/subpage</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Arrogance/subpage/subpage&amp;diff=23623"/>
		<updated>2023-05-30T18:38:28Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!---[[{{#titleparts:{{FULLPAGENAME}}|1|1}}]] {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|2|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|2|1}}]]}}{{#ifexist:{{#titleparts:{{FULLPAGENAME}}|3|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|3|1}}]]}} {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|4|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|4|1}}]]| }} {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|5|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|5|1}}]]| }} {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|6|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|6|1}}]]| }} {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|7|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|7|1}}]]| }}&lt;br /&gt;
{{#explode:{{PAGENAME}}|/|3}}&lt;br /&gt;
---&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Talk:Installation&amp;diff=23622</id>
		<title>Talk:Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Talk:Installation&amp;diff=23622"/>
		<updated>2023-05-30T18:25:50Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== New Discussions ==&lt;br /&gt;
&lt;br /&gt;
I wasn&#039;t here for most of the drama, but it might help with reducing redundant pages and poor verbiage if some of the other &amp;quot;install&amp;quot; pages were made subpages of this one. Instead of &amp;quot;Installing Alpine in a virtual machine&amp;quot;, &amp;quot;Installing Alpine on VMware ESXi&amp;quot;, &amp;quot;Alpine on ARM&amp;quot;, etc... we could group by hypervisor (if any), then architecture or firmware, then board, etc... existing only where there are differences between others of the same level. For example:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Installation/VirtualBox/BIOS&#039;&#039;&#039; - &lt;br /&gt;
* &#039;&#039;&#039;Installation/AARCH64/Raspberry Pi 4&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Installation/x86/Dell Inspiron 1525&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, we could duplicate the top level installation page for each architecture (like the Gentoo Handbook). That would allow better nuance in the initial media preparation and boot process. This page would then simply provide a brief guide of choosing the correct arch. [[User:Arrogance|Arrogance]] ([[User talk:Arrogance|talk]]) 09:17, 30 May 2023 (UTC)&lt;br /&gt;
&lt;br /&gt;
:+1 for this idea. I&#039;m not a pro at this but it would make it easier to navigate. Is the subpage feature on for regular pages? [[User:Bbbhltz|bbbhltz]] ([[User talk:Bbbhltz|talk]]) 10:46, 30 May 2023 (UTC)&lt;br /&gt;
::No, it&#039;s not on, although that doesn&#039;t technically stop making pages this way. It mostly just means there isn&#039;t a built-in way to navigate to parent pages. Within certain constraints (a hypothetical &#039;&#039;&#039;Installation/x86&#039;&#039;&#039; would need to be named &#039;&#039;&#039;Installation/X86&#039;&#039;&#039;, for example), it shouldn&#039;t stop enabling them at a future date, either.  [[User:Arrogance|Arrogance]] ([[User talk:Arrogance|talk]]) 18:25, 30 May 2023 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resolved Discussions==&lt;br /&gt;
&lt;br /&gt;
=== Focused users and edits ===&lt;br /&gt;
&lt;br /&gt;
We are aware that wiki is not so complete but, last month wiki installation page are a crap ton of changes.. The wiki page tries to include so many information.. but it lacks of good structure, neither hav a good requirements page&lt;br /&gt;
&lt;br /&gt;
So then &#039;&#039;&#039;I separated the requirements detailed&#039;&#039;&#039; to a new wiki page, https://wiki.alpinelinux.org/wiki/Requirements, with all details and reduce significatively the installation page details to only RAM and SPACE storage.. &lt;br /&gt;
&lt;br /&gt;
Later added a section in https://wiki.alpinelinux.org/wiki/Alpine_newbie_install_manual#Ways_to_install_Alpine_listed_by_architectures so then &#039;&#039;&#039;users that need different methods of install does not need to crap&#039;&#039;&#039; with over information the only wiki installation page.. (over information) &#039;&#039;&#039;I mean over sentences of &amp;quot;for this ARM flafour go to here and here and for this toy go to here&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Last then i reduced rest of info to improved independent pages of each one!&#039;&#039;&#039; &lt;br /&gt;
Contributions must be focused in independent cases and listed in how to and tutorial wiki page .. so then i can check and later listed at new users tutorial pages.&lt;br /&gt;
&lt;br /&gt;
All of this new pages will be improved in next days. Currently information was slpitted and improved to reduce the oversized installation page!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;About changes and recent diff from SB1 June and July changes..&#039;&#039;&#039;.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Checksum command is a extra optional info&#039;&#039;&#039;: first note are the checksum command to verify.. only takes in consideration linux (ovbiusly will be so &amp;quot;rare&amp;quot; if not) and win! there&#039; is no more OS in the world? there&#039;s no MAC or FreeBSD? is clear Alpine need minimal linux knowledge so are nonsense try to catch win users without minimal linux knowledge.. specific pages for that must be done! not in main install pages!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot of external devices&#039;&#039;&#039; depends of each computer device so each wiki page cases of architecture installation must added its own information&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;also the use Sb1 erased/changed so many information&#039;&#039;&#039; and does not property posted in any other page .. (i mean setup alpine or similar) all the info was grouped and pasted in main installation page.. oversized the target of.. the good examples of wiki pages must be like:  https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#What_is_the_difference_between_.27sys.27.2C_.27data.27.2C_and_.27diskless.27_when_running_.27setup-alpine.27_or_.27setup-disk.27.3F makes references to install page as further deep information available.. but this page as i said was changed significatively.. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:mckaygerhard|mckaygerhard]] July 2020&lt;br /&gt;
&lt;br /&gt;
* Sorry, it&#039;s problematic when your edits **replace** concise pages with your &amp;quot;alpine newbie&amp;quot; series style. (And that repeatedly.) For readers looking for information, these are a quite much convoluted agglomeration of multiple, unmaintainable pages with much overlapping and duplicate information and do not refrain from opinionated jargon. &amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;For example, it does not make much sense to move the recommended image verification commands into some [[Requirements]] page. That page is immense and convoluted with unmaintanable tables that for example only resemble statistics about the currently downloadable images. Further, parts of it are duplicated in the plethora of &amp;quot;Alpine_newbie&amp;quot; install recipes (in which readers that follow it or want to look up something to get lost in, without getting a much needed overview and information about the available options, to end up being able to arrive at well informed decisions). &amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;  =&amp;gt;  So there are good reasons why your changes were reverted (12:40, 12 December 2020‎ &amp;quot;Reverting as of https://lists.alpinelinux.org/~alpine/devel/&amp;lt;20201002143513.yco7vwx2ci3lqezm@wolfsden.cz&amp;gt; Second time user Mckaygerhard pulled stunt on this page. (Aug.13/19 &amp;amp; Jul.12/20))&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Arrogance/subpage&amp;diff=23621</id>
		<title>User:Arrogance/subpage</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Arrogance/subpage&amp;diff=23621"/>
		<updated>2023-05-30T18:09:09Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: touch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Arrogance/subpage/subpage&amp;diff=23620</id>
		<title>User:Arrogance/subpage/subpage</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Arrogance/subpage/subpage&amp;diff=23620"/>
		<updated>2023-05-30T18:08:05Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[{{#titleparts:{{FULLPAGENAME}}|1|1}}]] {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|2|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|2|1}}]]}}{{#ifexist:{{#titleparts:{{FULLPAGENAME}}|3|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|3|1}}]]}} {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|4|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|4|1}}]]}} {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|5|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|5|1}}]]}} {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|6|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|6|1}}]]}} {{#ifexist:{{#titleparts:{{FULLPAGENAME}}|7|1}}| &amp;gt; [[{{#titleparts:{{FULLPAGENAME}}|7|1}}]]}}&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Talk:Installation&amp;diff=23617</id>
		<title>Talk:Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Talk:Installation&amp;diff=23617"/>
		<updated>2023-05-30T09:17:10Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== New Discussions ==&lt;br /&gt;
&lt;br /&gt;
I wasn&#039;t here for most of the drama, but it might help with reducing redundant pages and poor verbiage if some of the other &amp;quot;install&amp;quot; pages were made subpages of this one. Instead of &amp;quot;Installing Alpine in a virtual machine&amp;quot;, &amp;quot;Installing Alpine on VMware ESXi&amp;quot;, &amp;quot;Alpine on ARM&amp;quot;, etc... we could group by hypervisor (if any), then architecture or firmware, then board, etc... existing only where there are differences between others of the same level. For example:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Installation/VirtualBox/BIOS&#039;&#039;&#039; - &lt;br /&gt;
* &#039;&#039;&#039;Installation/AARCH64/Raspberry Pi 4&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Installation/x86/Dell Inspiron 1525&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, we could duplicate the top level installation page for each architecture (like the Gentoo Handbook). That would allow better nuance in the initial media preparation and boot process. This page would then simply provide a brief guide of choosing the correct arch. [[User:Arrogance|Arrogance]] ([[User talk:Arrogance|talk]]) 09:17, 30 May 2023 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resolved Discussions==&lt;br /&gt;
&lt;br /&gt;
=== Focused users and edits ===&lt;br /&gt;
&lt;br /&gt;
We are aware that wiki is not so complete but, last month wiki installation page are a crap ton of changes.. The wiki page tries to include so many information.. but it lacks of good structure, neither hav a good requirements page&lt;br /&gt;
&lt;br /&gt;
So then &#039;&#039;&#039;I separated the requirements detailed&#039;&#039;&#039; to a new wiki page, https://wiki.alpinelinux.org/wiki/Requirements, with all details and reduce significatively the installation page details to only RAM and SPACE storage.. &lt;br /&gt;
&lt;br /&gt;
Later added a section in https://wiki.alpinelinux.org/wiki/Alpine_newbie_install_manual#Ways_to_install_Alpine_listed_by_architectures so then &#039;&#039;&#039;users that need different methods of install does not need to crap&#039;&#039;&#039; with over information the only wiki installation page.. (over information) &#039;&#039;&#039;I mean over sentences of &amp;quot;for this ARM flafour go to here and here and for this toy go to here&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Last then i reduced rest of info to improved independent pages of each one!&#039;&#039;&#039; &lt;br /&gt;
Contributions must be focused in independent cases and listed in how to and tutorial wiki page .. so then i can check and later listed at new users tutorial pages.&lt;br /&gt;
&lt;br /&gt;
All of this new pages will be improved in next days. Currently information was slpitted and improved to reduce the oversized installation page!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;About changes and recent diff from SB1 June and July changes..&#039;&#039;&#039;.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Checksum command is a extra optional info&#039;&#039;&#039;: first note are the checksum command to verify.. only takes in consideration linux (ovbiusly will be so &amp;quot;rare&amp;quot; if not) and win! there&#039; is no more OS in the world? there&#039;s no MAC or FreeBSD? is clear Alpine need minimal linux knowledge so are nonsense try to catch win users without minimal linux knowledge.. specific pages for that must be done! not in main install pages!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot of external devices&#039;&#039;&#039; depends of each computer device so each wiki page cases of architecture installation must added its own information&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;also the use Sb1 erased/changed so many information&#039;&#039;&#039; and does not property posted in any other page .. (i mean setup alpine or similar) all the info was grouped and pasted in main installation page.. oversized the target of.. the good examples of wiki pages must be like:  https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#What_is_the_difference_between_.27sys.27.2C_.27data.27.2C_and_.27diskless.27_when_running_.27setup-alpine.27_or_.27setup-disk.27.3F makes references to install page as further deep information available.. but this page as i said was changed significatively.. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:mckaygerhard|mckaygerhard]] July 2020&lt;br /&gt;
&lt;br /&gt;
* Sorry, it&#039;s problematic when your edits **replace** concise pages with your &amp;quot;alpine newbie&amp;quot; series style. (And that repeatedly.) For readers looking for information, these are a quite much convoluted agglomeration of multiple, unmaintainable pages with much overlapping and duplicate information and do not refrain from opinionated jargon. &amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;For example, it does not make much sense to move the recommended image verification commands into some [[Requirements]] page. That page is immense and convoluted with unmaintanable tables that for example only resemble statistics about the currently downloadable images. Further, parts of it are duplicated in the plethora of &amp;quot;Alpine_newbie&amp;quot; install recipes (in which readers that follow it or want to look up something to get lost in, without getting a much needed overview and information about the available options, to end up being able to arrive at well informed decisions). &amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;  =&amp;gt;  So there are good reasons why your changes were reverted (12:40, 12 December 2020‎ &amp;quot;Reverting as of https://lists.alpinelinux.org/~alpine/devel/&amp;lt;20201002143513.yco7vwx2ci3lqezm@wolfsden.cz&amp;gt; Second time user Mckaygerhard pulled stunt on this page. (Aug.13/19 &amp;amp; Jul.12/20))&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Install_Alpine_on_VMware_Workstation&amp;diff=23614</id>
		<title>Install Alpine on VMware Workstation</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Install_Alpine_on_VMware_Workstation&amp;diff=23614"/>
		<updated>2023-05-30T08:20:49Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{merge|[[Installing Alpine on a virtual machine]]}}&lt;br /&gt;
There&#039;s at least 2 ways you can setup Alpine on a VMware box.&lt;br /&gt;
&lt;br /&gt;
== Option 1: sys mode, traditional hard-disk install (preferable for a dev box) ==&lt;br /&gt;
&lt;br /&gt;
# Create a virtual machine (Linux, other 3.x kernel 64 bit)&lt;br /&gt;
## Add a hard drive with your desired size&lt;br /&gt;
## Add a CD/DVD to the VM that points to the Alpine ISO you downloaded&lt;br /&gt;
## Disable &amp;quot;UEFI secure boot&amp;quot; in Settings -&amp;gt; Advanced&lt;br /&gt;
# Boot the VM and log in with username &amp;quot;root&amp;quot;&lt;br /&gt;
## run &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt;&lt;br /&gt;
## choose &#039;&#039;&#039;sys&#039;&#039;&#039; when asked about the disk mode ([[Installation#System_Disk_Mode|sys mode]] will install Alpine to the disk)&lt;br /&gt;
## choose the default hard disk mounted by VMware&lt;br /&gt;
## reboot after the installation is complete&lt;br /&gt;
&lt;br /&gt;
== Option 2: USB mode, no data preserved between reboots ==&lt;br /&gt;
&lt;br /&gt;
# Create a virtual machine (Linux, other 3.x kernel 64 bit)&lt;br /&gt;
## add a small hard drive, e.g. 100MB for saving configs (like an usb stick)&lt;br /&gt;
## Add a CD/DVD to the VM that points to the Alpine ISO you downloaded&lt;br /&gt;
# boot into the VM&lt;br /&gt;
# press F2 on boot to enter the BIOS &lt;br /&gt;
## change the boot order so that it boots from CD, then HD, then floppy (or whatever - as long as CD is first)&lt;br /&gt;
# boot the machine&lt;br /&gt;
# now run the following commands:&lt;br /&gt;
## &amp;lt;code&amp;gt;mkfs.vfat /dev/sda&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;mount /dev/sda /media/usb&amp;lt;/code&amp;gt; (Or try: &amp;lt;code&amp;gt;mount -t vfat /dev/sda /media/usb&amp;lt;/code&amp;gt;)&lt;br /&gt;
## &amp;lt;code&amp;gt;grep /dev/sda /proc/mounts &amp;gt;&amp;gt; /etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; (select no disk, save configs to &#039;usb&#039;)&lt;br /&gt;
## &amp;lt;code&amp;gt;lbu ci usb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the VM hangs at the boot prompt, reboot the VM, and when the boot prompt appears again, type &amp;lt;code&amp;gt;pax_nouderef&amp;lt;/code&amp;gt; (i.e. append it to the kernel options) and press Enter. This should allow normal boot-up. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you should be able to reboot and it should retain your settings because they were saved to your &amp;quot;usb-disk&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== VMware Tools ==&lt;br /&gt;
&lt;br /&gt;
More info on this page: [[Open-vm-tools]]&lt;br /&gt;
&lt;br /&gt;
For VMware Tools support you need to install the package [https://pkgs.alpinelinux.org/package/edge/community/x86_64/open-vm-tools open-vm-tools].&lt;br /&gt;
&lt;br /&gt;
[[Category:Virtualization]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Installing_Alpine_on_a_virtual_machine&amp;diff=23613</id>
		<title>Installing Alpine on a virtual machine</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Installing_Alpine_on_a_virtual_machine&amp;diff=23613"/>
		<updated>2023-05-30T08:20:31Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Changed redirect target from Category:Virtualization to Installing Alpine in a virtual machine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Installing Alpine in a virtual machine]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=I3wm&amp;diff=23611</id>
		<title>I3wm</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=I3wm&amp;diff=23611"/>
		<updated>2023-05-30T08:06:00Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:i3wm}}&lt;br /&gt;
== Initial setup ==&lt;br /&gt;
&lt;br /&gt;
I will assume you are working on a fresh, installation of Alpine standard.&lt;br /&gt;
Otherwise see [[Installation|these]] instructions.&lt;br /&gt;
&lt;br /&gt;
== Enable Community Repository ==&lt;br /&gt;
&lt;br /&gt;
We need the Community Repository available for access to the i3 packages.&lt;br /&gt;
Instructions are available on the [[Repositories#Enabling_the_community_repository|Repositories]] page.&lt;br /&gt;
&lt;br /&gt;
== Install drivers ==&lt;br /&gt;
&lt;br /&gt;
Ensure you have the required drivers.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk search xf86-input*}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk search xf86-video*}}&lt;br /&gt;
&lt;br /&gt;
=== Example driver installation ===&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add xf86-video-intel xf86-input-intel xf86-video-fbdev xf86-video-vesa}}&lt;br /&gt;
&lt;br /&gt;
== Install fonts ==&lt;br /&gt;
&lt;br /&gt;
Install [[Fonts|fonts]]. If you start i3 without fonts it will be unusable.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add font-terminus}}&lt;br /&gt;
&lt;br /&gt;
== Install dbus ==&lt;br /&gt;
&lt;br /&gt;
Install dbus and set it up.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add dbus}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# dbus-uuidgen &amp;gt; /var/lib/dbus/machine-id}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# rc-update add dbus}}&lt;br /&gt;
&lt;br /&gt;
== Install X11 ==&lt;br /&gt;
&lt;br /&gt;
Install X11 and set it up.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# setup-xorg-base}}&lt;br /&gt;
&lt;br /&gt;
== Install i3 ==&lt;br /&gt;
&lt;br /&gt;
Install i3, the i3 status bar and a terminal.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add i3wm i3status xterm}}&lt;br /&gt;
&lt;br /&gt;
== Set up a non-root account ==&lt;br /&gt;
&lt;br /&gt;
Set up a non-root account:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# adduser &#039;&#039;new-user&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# addgroup &#039;&#039;new-user&#039;&#039; input}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# addgroup &#039;&#039;new-user&#039;&#039; video}}&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
Now you can start i3 manually:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# startx /usr/bin/i3}}&lt;br /&gt;
&lt;br /&gt;
{{Note|The default configuration is minimal and most menu options won&#039;t work unless you customize and/or install additional packages. More information is available in the [https://i3wm.org/docs/userguide.html i3 user guide].}}&lt;br /&gt;
&lt;br /&gt;
== Starting i3 on login ==&lt;br /&gt;
&lt;br /&gt;
To have i3 start automatically on login, you should set up xinit.&lt;br /&gt;
&lt;br /&gt;
There are different ways to do this. The [https://wiki.archlinux.org/title/Xinit ArchWiki]&lt;br /&gt;
has information on this.&lt;br /&gt;
&lt;br /&gt;
{{Todo|add section on Xinit}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: Desktop]]&lt;br /&gt;
[[category: Window Managers]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=QEMU&amp;diff=23610</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=QEMU&amp;diff=23610"/>
		<updated>2023-05-30T07:44:13Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://wiki.qemu.org/Index.html QEMU] is a very flexible open source virtual machine and emulator. QEMU is able to virtualize or emulate x86, PowerPC, ARM, and S390 guests.&lt;br /&gt;
&lt;br /&gt;
= Install Alpine Linux in QEMU =&lt;br /&gt;
{{merge|Installing_Alpine_in_a_virtual_machine#KVM_/_QEMU|Installing Alpine in QEMU and installing QEMU in Alpine should be handled separately.}}&lt;br /&gt;
{{:Install_Alpine_in_QEMU}}&lt;br /&gt;
&lt;br /&gt;
= Live mode =&lt;br /&gt;
{{:Running_Alpine_in_Qemu_Live_mode}}&lt;br /&gt;
&lt;br /&gt;
= Advanced network configuration =&lt;br /&gt;
&lt;br /&gt;
{{:Running Alpine Linux As a QEMU networked Guest}}&lt;br /&gt;
&lt;br /&gt;
= Using Xorg inside QEMU =&lt;br /&gt;
&lt;br /&gt;
The video driver needed for Xorg inside QEMU is &amp;lt;code&amp;gt;xf86-video-modesetting&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{tip|Probably for KVM/Qemu guests you want to use &#039;&#039;qxl&#039;&#039; Video and Display &#039;&#039;Spice&#039;&#039;. For this purpose install xf86-video-qxl on guest and run a Spice client on the host}}&lt;br /&gt;
&lt;br /&gt;
If you decided to use a &#039;&#039;qxl&#039;&#039; Video on KVM/Qemu guest, add this configuration to `/etc/X11/xorg.conf`&lt;br /&gt;
&lt;br /&gt;
{{Cmd|Section &amp;quot;Device&amp;quot;&lt;br /&gt;
  Identifier &amp;quot;qxl&amp;quot;&lt;br /&gt;
  Driver &amp;quot;qxl&amp;quot;&lt;br /&gt;
  Option &amp;quot;ENABLE_SURFACES&amp;quot; &amp;quot;False&amp;quot;&lt;br /&gt;
EndSection}}&lt;br /&gt;
&lt;br /&gt;
= Run a guest OS on Alpine Linux using KVM/QEMU =&lt;br /&gt;
&lt;br /&gt;
Install:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# apk add qemu-system-x86_64 qemu-modules libvirt libvirt-qemu}}&lt;br /&gt;
&lt;br /&gt;
{{Note|also install {{Pkg|virt-manager}} for a KVM/QEMU gui}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add &#039;&#039;&#039;tun&#039;&#039;&#039; to &amp;lt;code&amp;gt;/etc/modules&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|(su) echo tun &amp;gt;&amp;gt; /etc/modules}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting &#039;&#039;&#039;tun&#039;&#039;&#039; now:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# modprobe tun}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add your user to the &#039;&#039;&#039;kvm&#039;&#039;&#039; and &#039;&#039;&#039;qemu&#039;&#039;&#039; groups&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# addgroup &amp;lt;username&amp;gt; kvm}}&lt;br /&gt;
{{Cmd|# adduser &amp;lt;username&amp;gt; qemu}}&lt;br /&gt;
&lt;br /&gt;
Logout for the group changes to take effect&lt;br /&gt;
&amp;lt;!-- {{Cmd|qemu-system-x86_64 --enable-kvm -m 1024M -fda M6410220.IMG}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adding services:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# rc-update add libvirtd}}&lt;br /&gt;
{{Cmd|# rc-update add libvirt-guests}}&lt;br /&gt;
&lt;br /&gt;
Starting the services now:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|# rc-service libvirtd start}}&lt;br /&gt;
{{Cmd|# rc-service libvirt-guests start}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are interested in using a bridged network (so that the guest machine can be reached easily from the outside), see [[Bridge]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Virtualization]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Wall&amp;diff=23609</id>
		<title>Alpine Wall</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Wall&amp;diff=23609"/>
		<updated>2023-05-30T07:31:22Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{obsolete}}&lt;br /&gt;
This page is a design and implementation plan for a new firewall&lt;br /&gt;
management framework. The new framework addresses the limitations&lt;br /&gt;
of Shorewall, which is probably the most common solution used&lt;br /&gt;
with Alpine.&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
We evaluated serveral existing open source projects, none of which&lt;br /&gt;
satisfied our demanding taste. The existing solutions are either too&lt;br /&gt;
tied to specific (router) distributions, targeted to home users (with&lt;br /&gt;
too many assumptions built-in), or depedent on bloated frameworks&lt;br /&gt;
(usually Perl). Moreover, we would like to keep management of firewall&lt;br /&gt;
settings and activation of such settings as two separate workflows,&lt;br /&gt;
which would facilitate centralized management of firewall rules.&lt;br /&gt;
&lt;br /&gt;
As no readily available solution was found, the proposal is to&lt;br /&gt;
implement a new management framework for &amp;lt;code&amp;gt;iptables&amp;lt;/code&amp;gt;, which&lt;br /&gt;
would integrate with the&lt;br /&gt;
[[Alpine Configuration Framework Design|Alpine Configuration&lt;br /&gt;
Framework]]&lt;br /&gt;
(ACF). The framework is hereafter referred to as the Alpine Wall&lt;br /&gt;
({{Pkg|awall}}).&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
Awall would consist of three major components: data model, front-end,&lt;br /&gt;
and back-end. It also implements a plug-in architecture, which allows&lt;br /&gt;
extending the data model and functionality, in order to simplify&lt;br /&gt;
common organization-specific administrative tasks.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;data model&#039;&#039;&#039; would describe the firewall configuration using&lt;br /&gt;
concepts and terminology that is roughly compatible with Shorewall. It&lt;br /&gt;
would also borrow some useful concepts from other firewall solutions&lt;br /&gt;
we evaluated, such as the Service concept as defined in the&lt;br /&gt;
[http://www.turtlefirewall.com/manual-en/x161.html Turtle Firewall]&lt;br /&gt;
(but generalized a bit). Awall plug-ins can contain schema extension&lt;br /&gt;
modules augmenting the basic model provided by the framework.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;back-end&#039;&#039;&#039; is responsible for translating the model&#039;s data&lt;br /&gt;
into configuration files, most notably the files that can be read by&lt;br /&gt;
&amp;lt;code&amp;gt;iptables-restore&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;. Moreover, it can produce files into&lt;br /&gt;
e.g. &amp;lt;code&amp;gt;/etc/modprobe.d&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/etc/sysctl.d&amp;lt;/code&amp;gt; if&lt;br /&gt;
necessary. When a plug-in extends the data model, it must also provide&lt;br /&gt;
a back-end module that interprets model extension and translates the&lt;br /&gt;
data into &amp;lt;code&amp;gt;iptables&amp;lt;/code&amp;gt; and other rules. The framework&lt;br /&gt;
includes a module for interpreting the base model. The framework is&lt;br /&gt;
responsible for ordering and aggregating the results produced by all&lt;br /&gt;
modules into actual configuration files.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;front-end&#039;&#039;&#039; is essentially an ACF module which allows editing&lt;br /&gt;
the data model and activating the changes with the help of the&lt;br /&gt;
back-end. The front-end implements also a fallback mechanism that&lt;br /&gt;
prevents the operator from locking himself out by a faulty&lt;br /&gt;
configuration. The configuration data is stored in text files which&lt;br /&gt;
can be directly edited. The front-end provides a command line tool for&lt;br /&gt;
validating and activating the configuration after manual changes.&lt;br /&gt;
&lt;br /&gt;
== Base Model ==&lt;br /&gt;
&lt;br /&gt;
The basic data model could roughly look like as follows:&lt;br /&gt;
&lt;br /&gt;
;Zone&lt;br /&gt;
; &amp;lt;code&amp;gt;interface*, subnet*&amp;lt;/code&amp;gt;&lt;br /&gt;
;Service&lt;br /&gt;
; &amp;lt;code&amp;gt;(protocol, port*)+&amp;lt;/code&amp;gt;&lt;br /&gt;
;Forwarding policy&lt;br /&gt;
; &amp;lt;code&amp;gt;Zone:in*, Zone:out*, accept/reject/drop, masq_on/masq_off&amp;lt;/code&amp;gt;&lt;br /&gt;
;Filtering rule&lt;br /&gt;
; &amp;lt;code&amp;gt;Zone:in*, Zone:out*, Service+, accept/reject/drop, conn_limit?, flow_limit?&amp;lt;/code&amp;gt;&lt;br /&gt;
;NAT rule&lt;br /&gt;
; &amp;lt;code&amp;gt;snat/dnat, Zone:in*, Zone:out*, Service, ip4_range, port_range?&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subnets in zone definitions can be declared using IPv4/IPv6 addresses&lt;br /&gt;
(CIDR notation), domain names, or as references to &lt;br /&gt;
[http://ipset.netfilter.org/ipset.man.html ipsets]. A domain name can&lt;br /&gt;
resolve to one or more IP addresses. The referred ipsets may be&lt;br /&gt;
managed manually or by some other tool.&lt;br /&gt;
&lt;br /&gt;
If a packet with source address &#039;&#039;a&#039;&#039; arrives on interface &#039;&#039;i&#039;&#039;, it&lt;br /&gt;
is considered to originate from zone &#039;&#039;Z = (I, S)&#039;&#039; (where &#039;&#039;I&#039;&#039; is&lt;br /&gt;
the set of interfaces and &#039;&#039;S&#039;&#039; is the set of subnets) if and only if &lt;br /&gt;
&#039;&#039;I&#039;&#039; includes &#039;&#039;i&#039;&#039;, and &#039;&#039;a&#039;&#039; belongs to any subnet of &#039;&#039;S&#039;&#039;. In&lt;br /&gt;
zone definitions, &#039;&#039;I&#039;&#039; would default to the set of all interfaces and &lt;br /&gt;
&#039;&#039;S&#039;&#039; to {0.0.0.0/0, ::}. The destination zone would be defined in a&lt;br /&gt;
similar way based on the packet&#039;s destination address and interface.&lt;br /&gt;
&lt;br /&gt;
== Implementation Considerations ==&lt;br /&gt;
&lt;br /&gt;
The data model should preferably be based on some existing format,&lt;br /&gt;
such as JSON, XML, or YAML. In order to allow extensions to the data&lt;br /&gt;
model, awall must define some kind of schema language. This language&lt;br /&gt;
would embed the necessary information the front-end needs to&lt;br /&gt;
automatically generate a user interface for the extension. For&lt;br /&gt;
example, the help texts shown to the user would be placed in the&lt;br /&gt;
schema modules.&lt;br /&gt;
&lt;br /&gt;
Ideally, the base model would be described using the very same&lt;br /&gt;
language as the model extensions, but it would impose quite demanding&lt;br /&gt;
requirements on the language, e.g. support for complex data types. If&lt;br /&gt;
we select this approach and model the data using XML, we could use XML&lt;br /&gt;
Schema as the basis. There is also an (expired) Internet Draft on &lt;br /&gt;
[http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON Schema], but&lt;br /&gt;
there seems to be no existing validator implementation in C or Lua.&lt;br /&gt;
&lt;br /&gt;
Even though elegant from architecture point of view, it is unlikely&lt;br /&gt;
that support for complex data types would be required by typical&lt;br /&gt;
extensions. In most cases, a set of global variables of primitive&lt;br /&gt;
types would suffice. Therefore, we could just use a very simple&lt;br /&gt;
language for declaring such variables or implement support for a&lt;br /&gt;
limited subset of some well-known schema language. In this&lt;br /&gt;
alternative, the base model would not be described using this language&lt;br /&gt;
but rather hard-coded into the front-end.&lt;br /&gt;
&lt;br /&gt;
The back-end modules are responsible for translating the configuration&lt;br /&gt;
data into configuration file fragments. As regards their&lt;br /&gt;
implementation, we have two alternatives. The first alternative is to&lt;br /&gt;
implement them as Lua functions invoked by the framework in a defined&lt;br /&gt;
way. The framework would provide a library that allows the said&lt;br /&gt;
functions to access the data model, and also otherwise assists in&lt;br /&gt;
their implementation. The functions would report the results back to&lt;br /&gt;
the framework, which finally would translate them into target files.&lt;br /&gt;
&lt;br /&gt;
In the second alternative, the back-end modules would be implemented&lt;br /&gt;
using a template language rather than a general-purpose programming&lt;br /&gt;
language. An example of a firewall-related template language is&lt;br /&gt;
[http://ferm.foo-projects.org/download/2.1/ferm.html ferm], which&lt;br /&gt;
unfortunately is implemented in Perl. Ferm also lacks certain&lt;br /&gt;
capabilities required to implement e.g. the Zone and Service concepts&lt;br /&gt;
conveniently. However, we could introduce a new template language that&lt;br /&gt;
would better suit our purposes. Such a language would eliminate some&lt;br /&gt;
redundancy from the back-end modules which necessarily comes with the&lt;br /&gt;
use of a general-purpose language. On the other hand, developing and&lt;br /&gt;
maintaining such a language would take effort and might make the&lt;br /&gt;
framework initially more difficult to use.&lt;br /&gt;
&lt;br /&gt;
The back-end will contain functionality for domain name resolution. In&lt;br /&gt;
the data model, hosts of groups thereof can be identified by their&lt;br /&gt;
domain names. The back-end will resolve these to IP addresses, which&lt;br /&gt;
will be stored in the target files, so there will be no need to&lt;br /&gt;
resolve anything when activating the configuration during boot.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Zero-To-Awall]]&lt;br /&gt;
* [[How-To Alpine Wall]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Vlan&amp;diff=23608</id>
		<title>Vlan</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Vlan&amp;diff=23608"/>
		<updated>2023-05-30T07:28:51Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Vlan to VLAN&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[VLAN]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=VLAN&amp;diff=23607</id>
		<title>VLAN</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=VLAN&amp;diff=23607"/>
		<updated>2023-05-30T07:28:51Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Vlan to VLAN&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article shows how to configure a network interface as an IEEE 802.1q VLAN trunk.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note| Alpine Linux v2.4 or later is required}}&lt;br /&gt;
==Installation==&lt;br /&gt;
First, install the &#039;&#039;vlan&#039;&#039; package. This will give you support for vlans in the &#039;&#039;/etc/network/interfaces&#039;&#039; file.&lt;br /&gt;
{{Cmd|apk add vlan}}&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Edit the &#039;&#039;/etc/network/interfaces&#039;&#039; file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto eth0.8&lt;br /&gt;
iface eth0.8&lt;br /&gt;
	address 192.168.0.2/24&lt;br /&gt;
	gateway 192.168.0.1&lt;br /&gt;
	vlan-raw-device eth0&lt;br /&gt;
	vlan_id 8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
With the &#039;&#039;vlan&#039;&#039; package installed, ifup will find the trailing .8 in eth0.8 and will create a vlan interface with vid 8 over eth0.&lt;br /&gt;
&lt;br /&gt;
Alternativly with vlan8 over eth0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto vlan8&lt;br /&gt;
iface vlan8&lt;br /&gt;
	address 192.168.0.2/24&lt;br /&gt;
	gateway 192.168.0.1&lt;br /&gt;
	vlan-raw-device eth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A static ip address was used in the examples shown above, but dhcp can be used as well.&lt;br /&gt;
&lt;br /&gt;
== Example with bridges associated with VLANs over bonding with differing MTUs on the various VLANs ==&lt;br /&gt;
This serves as an example of some of the more complicated networking possible. Particularly, this would work well for a hypervisor attached to a dedicated storage VLAN. Less complicated implementations can be achieved by merely removing the non-applicable parts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto bond0&lt;br /&gt;
  iface bond0 inet manual&lt;br /&gt;
  bond_slaves eth0 eth1&lt;br /&gt;
  bond_mode 802.3ad&lt;br /&gt;
  bond_miimon 100&lt;br /&gt;
  bond_xmit_hash_policy layer2+3&lt;br /&gt;
  post-up ip link set dev bondi0 mtu 9000&lt;br /&gt;
&lt;br /&gt;
iface bond0.1&lt;br /&gt;
&lt;br /&gt;
auto br1&lt;br /&gt;
iface br1&lt;br /&gt;
  address 192.168.1.196/24&lt;br /&gt;
  gateway 192.168.1.1&lt;br /&gt;
  bridge_ports bond0.1&lt;br /&gt;
  bridge_stp off&lt;br /&gt;
  bridge_fd 0.0&lt;br /&gt;
  post-up ip link set dev bond0.1 mtu 1500&lt;br /&gt;
&lt;br /&gt;
iface bond0.10 inet manual&lt;br /&gt;
&lt;br /&gt;
auto br10&lt;br /&gt;
  iface br10 inet static&lt;br /&gt;
  address 192.168.10.1/24&lt;br /&gt;
  bridge_ports bond0.10&lt;br /&gt;
  bridge_stp off&lt;br /&gt;
  bridge_fd 0.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example with two interfaces on the same adapter. One with vlan and one without ==&lt;br /&gt;
&lt;br /&gt;
Since linux doesn&#039;t allow multiple default gateways we need to use a second routing table using iproute2&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add iproute2}}&lt;br /&gt;
&lt;br /&gt;
Then we&#039;ll add two new routig tables to the config file. One for each network&lt;br /&gt;
&lt;br /&gt;
{{Cmd|echo &amp;quot;1 rt1&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables;echo &amp;quot;2 rt2&amp;quot; &amp;gt;&amp;gt; /etc/iproute2/rt_tables;}}&lt;br /&gt;
&lt;br /&gt;
Now we need to edit /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
# the native interface without a vlan (also called untagged)&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0&lt;br /&gt;
        address 192.168.1.100/24&lt;br /&gt;
        gateway 192.168.1.1&lt;br /&gt;
        post-up ip route add 192.168.1.0/24 dev eth0 src 192.168.1.100 table rt1&lt;br /&gt;
        post-up ip route add default via 192.168.1.1 dev eth0 table rt1 # the actual gateway for this interface&lt;br /&gt;
        post-up ip rule add from 192.168.1.100/32 table rt1&lt;br /&gt;
        post-up ip rule add to 192.168.1.100/32 table rt1&lt;br /&gt;
&lt;br /&gt;
# second interface with the vlan tag 5&lt;br /&gt;
auto eth0.5&lt;br /&gt;
iface eth0.5&lt;br /&gt;
    address 192.168.5.100/24&lt;br /&gt;
    post-up ip route add 192.168.5.0/24 dev eth0.5 src 192.168.5.100 table rt2&lt;br /&gt;
    post-up ip route add default via 192.168.5.1 dev eth0.5 table rt2 # the actual gateway for this interface&lt;br /&gt;
    post-up ip rule add from 192.168.5.100/32 table rt2&lt;br /&gt;
    post-up ip rule add to 192.168.5.100/32 table rt2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that if you want to add a third interface this way, you&#039;ll have to add another routing table&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Tmux&amp;diff=23606</id>
		<title>Tmux</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Tmux&amp;diff=23606"/>
		<updated>2023-05-30T07:25:43Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:tmux}}&lt;br /&gt;
{{pkg|tmux}} is a terminal multiplexer. It&#039;s a good tool for e.g. remote support. It can also be used to start a command you want to keep running after you close your console session (you can later on attach to your running session).&lt;br /&gt;
&lt;br /&gt;
= Install =&lt;br /&gt;
In order to use {{pkg|tmux}} you will have to install it:&lt;br /&gt;
{{cmd|apk add tmux}}&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Start a new session ==&lt;br /&gt;
To create a {{pkg|tmux}} session you just enter:&lt;br /&gt;
{{cmd|tmux}}&lt;br /&gt;
&lt;br /&gt;
== List existing sessions ==&lt;br /&gt;
When you have started some session(s) you can list them:&lt;br /&gt;
{{cmd|tmux ls}}&lt;br /&gt;
{{tip|Above command can also be run as &amp;lt;code&amp;gt;tmux list-sessions&amp;lt;/code&amp;gt;}}&lt;br /&gt;
You might get a list that looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0: 1 windows (created Wed Oct 24 15:12:12 2012) [126x35]&lt;br /&gt;
1: 1 windows (created Wed Oct 24 15:14:44 2012) [126x35]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Attach to a existing session ==&lt;br /&gt;
Lets say you want to attach to a existing session (e.g. the above &amp;lt;code&amp;gt;1: 1 windows&amp;lt;/code&amp;gt; session).&lt;br /&gt;
{{cmd|tmux attach -t 1}}&lt;br /&gt;
{{tip|If you only have one session you don&#039;t need to specify session. Just run &amp;lt;code&amp;gt;tmux attach&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Controlling a session ==&lt;br /&gt;
While inside a {{pkg|tmux}} session, you can control it using keyboard shortcuts. We will only describe some of those alternatives.&lt;br /&gt;
&lt;br /&gt;
{{tip|To enter a keyboard shortcut that controls the current {{pkg|tmux}} session, you should click {{key|B}} while holding down {{key|CTRL}}&amp;lt;br&amp;gt;In the below examples this procedure is described as &amp;lt;code&amp;gt;C-b&amp;lt;/code&amp;gt;}}&lt;br /&gt;
=== Get help ===&lt;br /&gt;
One of the most useful commands is the one that gives you &#039;help&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
While in your {{pkg|tmux}} session, click:&lt;br /&gt;
{{cmd|C-b ?}}&lt;br /&gt;
&#039;&#039;(Do not press/hold {{key|CTRL}} when clicking {{key|?}})&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Detach from a session ===&lt;br /&gt;
Sometimes it&#039;s useful to just detach from a session without killing it.&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmd|C-b d}}&lt;br /&gt;
{{tip|Try starting &amp;lt;code&amp;gt;ping 127.0.0.1&amp;lt;/code&amp;gt; while inside a session and then detach from the session.&amp;lt;br&amp;gt;After some while re-connect to the session using &amp;lt;code&amp;gt;tmux attach&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;Note that the &amp;quot;seq&amp;quot; value indicates that ping had continued running while you where detached from the session.}}&lt;br /&gt;
&lt;br /&gt;
=== Close or kill a session ===&lt;br /&gt;
To &#039;kill&#039; a session:&lt;br /&gt;
{{cmd|C-b &amp;amp;}}&lt;br /&gt;
Confirm by clicking {{key|y}} when prompted.&lt;br /&gt;
&lt;br /&gt;
You can also &#039;kill&#039; your session by entering:&lt;br /&gt;
{{cmd|exit}}&lt;br /&gt;
&lt;br /&gt;
= Other terminal multiplexers =&lt;br /&gt;
A similar tool is {{pkg|screen}} which is documented [[Screen_on_console|here]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Shell]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Tmux_terminal_multiplexer&amp;diff=23605</id>
		<title>Tmux terminal multiplexer</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Tmux_terminal_multiplexer&amp;diff=23605"/>
		<updated>2023-05-30T07:25:06Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Tmux terminal multiplexer to Tmux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Tmux]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Tmux&amp;diff=23604</id>
		<title>Tmux</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Tmux&amp;diff=23604"/>
		<updated>2023-05-30T07:25:06Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Tmux terminal multiplexer to Tmux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{pkg|tmux}} is a terminal multiplexer. It&#039;s a good tool for e.g. remote support. It can also be used to start a command you want to keep running after you close your console session (you can later on attach to your running session).&lt;br /&gt;
&lt;br /&gt;
= Install =&lt;br /&gt;
In order to use {{pkg|tmux}} you will have to install it:&lt;br /&gt;
{{cmd|apk add tmux}}&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Start a new session ==&lt;br /&gt;
To create a {{pkg|tmux}} session you just enter:&lt;br /&gt;
{{cmd|tmux}}&lt;br /&gt;
&lt;br /&gt;
== List existing sessions ==&lt;br /&gt;
When you have started some session(s) you can list them:&lt;br /&gt;
{{cmd|tmux ls}}&lt;br /&gt;
{{tip|Above command can also be run as &amp;lt;code&amp;gt;tmux list-sessions&amp;lt;/code&amp;gt;}}&lt;br /&gt;
You might get a list that looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0: 1 windows (created Wed Oct 24 15:12:12 2012) [126x35]&lt;br /&gt;
1: 1 windows (created Wed Oct 24 15:14:44 2012) [126x35]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Attach to a existing session ==&lt;br /&gt;
Lets say you want to attach to a existing session (e.g. the above &amp;lt;code&amp;gt;1: 1 windows&amp;lt;/code&amp;gt; session).&lt;br /&gt;
{{cmd|tmux attach -t 1}}&lt;br /&gt;
{{tip|If you only have one session you don&#039;t need to specify session. Just run &amp;lt;code&amp;gt;tmux attach&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Controlling a session ==&lt;br /&gt;
While inside a {{pkg|tmux}} session, you can control it using keyboard shortcuts. We will only describe some of those alternatives.&lt;br /&gt;
&lt;br /&gt;
{{tip|To enter a keyboard shortcut that controls the current {{pkg|tmux}} session, you should click {{key|B}} while holding down {{key|CTRL}}&amp;lt;br&amp;gt;In the below examples this procedure is described as &amp;lt;code&amp;gt;C-b&amp;lt;/code&amp;gt;}}&lt;br /&gt;
=== Get help ===&lt;br /&gt;
One of the most useful commands is the one that gives you &#039;help&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
While in your {{pkg|tmux}} session, click:&lt;br /&gt;
{{cmd|C-b ?}}&lt;br /&gt;
&#039;&#039;(Do not press/hold {{key|CTRL}} when clicking {{key|?}})&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Detach from a session ===&lt;br /&gt;
Sometimes it&#039;s useful to just detach from a session without killing it.&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmd|C-b d}}&lt;br /&gt;
{{tip|Try starting &amp;lt;code&amp;gt;ping 127.0.0.1&amp;lt;/code&amp;gt; while inside a session and then detach from the session.&amp;lt;br&amp;gt;After some while re-connect to the session using &amp;lt;code&amp;gt;tmux attach&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;Note that the &amp;quot;seq&amp;quot; value indicates that ping had continued running while you where detached from the session.}}&lt;br /&gt;
&lt;br /&gt;
=== Close or kill a session ===&lt;br /&gt;
To &#039;kill&#039; a session:&lt;br /&gt;
{{cmd|C-b &amp;amp;}}&lt;br /&gt;
Confirm by clicking {{key|y}} when prompted.&lt;br /&gt;
&lt;br /&gt;
You can also &#039;kill&#039; your session by entering:&lt;br /&gt;
{{cmd|exit}}&lt;br /&gt;
&lt;br /&gt;
= Other terminal multiplexers =&lt;br /&gt;
A similar tool is {{pkg|screen}} which is documented [[Screen_on_console|here]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Shell]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Serial_mouse&amp;diff=23603</id>
		<title>Serial mouse</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Serial_mouse&amp;diff=23603"/>
		<updated>2023-05-30T07:21:06Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&lt;br /&gt;
A mouse connected to the serial port will not be recognized by an X.Org server automatically. In &amp;lt;code&amp;gt;/var/log/Xorg.0.log&amp;lt;/code&amp;gt; there will be a message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(II) The server relies on udev to provide the list of input devices.&lt;br /&gt;
If no devices become available, reconfigure udev or disable AutoAddDevices.&lt;br /&gt;
&amp;lt;/pre&amp;gt;   &lt;br /&gt;
An existing &amp;lt;code&amp;gt;/etc/X11/xorg.conf&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;AutoAddDevices&amp;lt;/code&amp;gt; enabled will result in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(WW) Hotplugging is on, devices using drivers &#039;kbd&#039;, &#039;mouse&#039; or &#039;vmmouse&#039; will be disabled.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will describe two ways of getting an usable serial mouse under X.org. In our example we have a Logitec serial mouse of the model M/N: M-M30 associated to the device &amp;lt;code&amp;gt;/dev/ttyS0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Getting information about the mouse=&lt;br /&gt;
&lt;br /&gt;
If the protocol for the serial mouse is unkown, the command {{cmd|mouse-test /dev/ttyS0}} from the package &amp;lt;code&amp;gt;gpm&amp;lt;/code&amp;gt; can be used to get the necessary information. The program is interactive and will print at the end a message like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Your mouse seems to be a &#039;mman&#039; one  on &amp;quot;/dev/ttyS0&amp;quot; (24 matches)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt; page &amp;lt;code&amp;gt;gpm-types&amp;lt;/code&amp;gt; contain a list of the protocols. In our case the lines&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       mman Mouseman&lt;br /&gt;
              The  protocol  used  by the new Logitech devices with three but-&lt;br /&gt;
              tons.  It is backward compatible with the Microsoft protocol, so&lt;br /&gt;
              if  your mouse has three buttons and works with -t ms or similar&lt;br /&gt;
              decoders you may try -t mman instead to use the  middle  button.&lt;br /&gt;
              This  mouse  decoder  accepts  standard serial options, although&lt;br /&gt;
              they should not be needed.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gives us more information about the protocol. We can test the mouse in a virtual console by running:&lt;br /&gt;
{{cmd|gpm -m /dev/ttyS0 -t mman}}&lt;br /&gt;
&lt;br /&gt;
=Solution: Inform the Linux input subsystem=&lt;br /&gt;
&lt;br /&gt;
The serial port should already be known to udev:&lt;br /&gt;
{{Cmd|udevadm info --name&amp;amp;#61;/dev/ttyS0 --query&amp;amp;#61;path}}&lt;br /&gt;
&amp;lt;pre&amp;gt;/devices/platform/serial8250/tty/ttyS0&amp;lt;/pre&amp;gt;&lt;br /&gt;
But in the output of {{cmd|cat /proc/bus/input/devices}} there is no hint of its existence. Installing the package &amp;lt;code&amp;gt;linuxconsoletools&amp;lt;/code&amp;gt; from the testing repository and executing&lt;br /&gt;
{{cmd|inputattach --mouseman /dev/ttyS0}}&lt;br /&gt;
should give us a working mouse for the X server.&lt;br /&gt;
The command&lt;br /&gt;
{{cmd|inputattach --help}} prints a list of the available protocols. In our case the line&lt;br /&gt;
&amp;lt;pre&amp;gt;  --mouseman       -mman     3-button Logitech / Genius mouse&amp;lt;/pre&amp;gt;&lt;br /&gt;
tells us which one to use. Now the output of {{cmd|cat /proc/bus/input/devices}} should contain a section like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I: Bus=0013 Vendor=0004 Product=0001 Version=0100&lt;br /&gt;
N: Name=&amp;quot;Logitech M+ Mouse&amp;quot;&lt;br /&gt;
P: Phys=ttyS0/serio0/input0&lt;br /&gt;
S: Sysfs=/devices/platform/serial8250/tty/ttyS0/serio8/input/input9&lt;br /&gt;
U: Uniq=&lt;br /&gt;
H: Handlers=event2 mouse0 &lt;br /&gt;
B: PROP=0&lt;br /&gt;
B: EV=7&lt;br /&gt;
B: KEY=70000 0 0 0 0 0 0 0 0&lt;br /&gt;
B: REL=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To start the &amp;lt;code&amp;gt;inputattach&amp;lt;/code&amp;gt; command automatically create a file &amp;lt;code&amp;gt;/etc/local.d/sermouse.start&amp;lt;/code&amp;gt; with the content:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
inputattach --daemon --mouseman /dev/ttyS0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make it executable and add the service &amp;lt;code&amp;gt;local&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; runlevel:&lt;br /&gt;
{{cmd|rc-update add local default}}&lt;br /&gt;
Then the command&lt;br /&gt;
{{cmd|rc}} should start the new service. If you want to stop &amp;lt;code&amp;gt;inputattach&amp;lt;/code&amp;gt; when stopping the &amp;lt;code&amp;gt;local&amp;lt;/code&amp;gt; service, create an executable file &amp;lt;code&amp;gt;/etc/local.d/sermouse.stop&amp;lt;/code&amp;gt; with content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
killall inputattach&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alternatively you can create a script in &amp;lt;code&amp;gt;/etc/init.d&amp;lt;/code&amp;gt; to define a service for the serial mouse.&lt;br /&gt;
&lt;br /&gt;
=Solution: Configure the X.org server=&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a &amp;lt;code&amp;gt;/etc/X11/xorg.conf&amp;lt;/code&amp;gt;, then generate one with the command&lt;br /&gt;
{{cmd|Xorg -configure}}&lt;br /&gt;
and modify (and move) the resulting file &amp;lt;code&amp;gt;/root/xorg.conf.new&amp;lt;/code&amp;gt; to get a running X server. For instance you might have to know the correct driver for the &amp;lt;code&amp;gt;&amp;quot;InputDevice&amp;quot;&amp;lt;/code&amp;gt; section for your graphics card. Include the section&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerFlags&amp;quot;&lt;br /&gt;
 Option &amp;quot;AutoAddDevices&amp;quot; &amp;quot;False&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to disable hotplugging and set the &amp;lt;code&amp;gt;&amp;quot;Device&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;Protocol&amp;quot;&amp;lt;/code&amp;gt; options in the &amp;lt;code&amp;gt;&amp;quot;InputDevice&amp;quot;&amp;lt;/code&amp;gt; section for your mouse. In our case we have:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Option &amp;quot;Protocol&amp;quot; &amp;quot;MouseMan&amp;quot;&lt;br /&gt;
 Option &amp;quot;Device&amp;quot; &amp;quot;/dev/ttyS0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then restart the X server. For instance:&lt;br /&gt;
{{cmd|rc-service lxdm restart}}&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
*[http://wiki.archlinux.org/index.php/serial_input_device_to_kernel_input Serial input device to kernel input - ArchWiki]&lt;br /&gt;
*[http://bugs.alpinelinux.org/issues/2532 Feature #2532: Request for package: linuxconsoletools]&lt;br /&gt;
*[http://lists.alpinelinux.org/alpine-devel/1891.html How to run script at startup (alpine-devel Archives)]&lt;br /&gt;
*[http://wiki.gentoo.org/wiki/Local.d local.d GEntoo Wiki]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Nginx_with_PHP&amp;diff=23602</id>
		<title>Nginx with PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Nginx_with_PHP&amp;diff=23602"/>
		<updated>2023-05-30T07:15:44Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{obsolete|PHP5 was removed in 3.9. PHP7 is not in 3.16 or later repositories.}}&lt;br /&gt;
{{:Nginx}}&lt;br /&gt;
&lt;br /&gt;
== PHP5 Installation ==&lt;br /&gt;
PHP packages is available in the Alpine Linux repositories. To install php5 with modules run:&lt;br /&gt;
{{cmd|apk add php5-fpm php5-mcrypt php5-soap php5-openssl php5-gmp php5-pdo_odbc php5-json php5-dom php5-pdo php5-zip php5-mysql php5-mysqli php5-sqlite3 php5-apcu php5-pdo_pgsql php5-bcmath php5-gd php5-xcache php5-odbc php5-pdo_mysql php5-pdo_sqlite php5-gettext php5-xmlreader php5-xmlrpc php5-bz2 php5-memcache php5-mssql php5-iconv php5-pdo_dblib php5-curl php5-ctype}}&lt;br /&gt;
&lt;br /&gt;
Perhaps you do not need all these PHP modules. Install modules according to your needs.&lt;br /&gt;
&lt;br /&gt;
=== Configuration of PHP5 ===&lt;br /&gt;
&lt;br /&gt;
Defining ENV variables which will be used in configuration. You can do this e.g. in [https://stackoverflow.com/questions/35325856/where-to-set-system-default-environment-variables-in-alpine-linux /etc/profile.d/php5.sh].&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;PHP_FPM_USER=&amp;quot;www&amp;quot;&lt;br /&gt;
PHP_FPM_GROUP=&amp;quot;www&amp;quot;&lt;br /&gt;
PHP_FPM_LISTEN_MODE=&amp;quot;0660&amp;quot;&lt;br /&gt;
PHP_MEMORY_LIMIT=&amp;quot;512M&amp;quot;&lt;br /&gt;
PHP_MAX_UPLOAD=&amp;quot;50M&amp;quot;&lt;br /&gt;
PHP_MAX_FILE_UPLOAD=&amp;quot;200&amp;quot;&lt;br /&gt;
PHP_MAX_POST=&amp;quot;100M&amp;quot;&lt;br /&gt;
PHP_DISPLAY_ERRORS=&amp;quot;On&amp;quot;&lt;br /&gt;
PHP_DISPLAY_STARTUP_ERRORS=&amp;quot;On&amp;quot;&lt;br /&gt;
PHP_ERROR_REPORTING=&amp;quot;E_COMPILE_ERROR\|E_RECOVERABLE_ERROR\|E_ERROR\|E_CORE_ERROR&amp;quot;&lt;br /&gt;
PHP_CGI_FIX_PATHINFO=0&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
Modify variables according to your needs.&lt;br /&gt;
&lt;br /&gt;
Modifying configuration file php-fpm.conf&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;sed -i &amp;quot;s|;listen.owner\s*=\s*nobody|listen.owner = ${PHP_FPM_USER}|g&amp;quot; /etc/php5/php-fpm.conf&lt;br /&gt;
sed -i &amp;quot;s|;listen.group\s*=\s*nobody|listen.group = ${PHP_FPM_GROUP}|g&amp;quot; /etc/php5/php-fpm.conf&lt;br /&gt;
sed -i &amp;quot;s|;listen.mode\s*=\s*0660|listen.mode = ${PHP_FPM_LISTEN_MODE}|g&amp;quot; /etc/php5/php-fpm.conf&lt;br /&gt;
sed -i &amp;quot;s|user\s*=\s*nobody|user = ${PHP_FPM_USER}|g&amp;quot; /etc/php5/php-fpm.conf&lt;br /&gt;
sed -i &amp;quot;s|group\s*=\s*nobody|group = ${PHP_FPM_GROUP}|g&amp;quot; /etc/php5/php-fpm.conf&lt;br /&gt;
sed -i &amp;quot;s|;log_level\s*=\s*notice|log_level = notice|g&amp;quot; /etc/php5/php-fpm.conf #uncommenting line &amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Modifying configuration file php.ini&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;sed -i &amp;quot;s|display_errors\s*=\s*Off|display_errors = ${PHP_DISPLAY_ERRORS}|i&amp;quot; /etc/php5/php.ini&lt;br /&gt;
sed -i &amp;quot;s|display_startup_errors\s*=\s*Off|display_startup_errors = ${PHP_DISPLAY_STARTUP_ERRORS}|i&amp;quot; /etc/php5/php.ini&lt;br /&gt;
sed -i &amp;quot;s|error_reporting\s*=\s*E_ALL &amp;amp; ~E_DEPRECATED &amp;amp; ~E_STRICT|error_reporting = ${PHP_ERROR_REPORTING}|i&amp;quot; /etc/php5/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*memory_limit =.*|memory_limit = ${PHP_MEMORY_LIMIT}|i&amp;quot; /etc/php5/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*upload_max_filesize =.*|upload_max_filesize = ${PHP_MAX_UPLOAD}|i&amp;quot; /etc/php5/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*max_file_uploads =.*|max_file_uploads = ${PHP_MAX_FILE_UPLOAD}|i&amp;quot; /etc/php5/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*post_max_size =.*|post_max_size = ${PHP_MAX_POST}|i&amp;quot; /etc/php5/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= ${PHP_CGI_FIX_PATHINFO}|i&amp;quot; /etc/php5/php.ini&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
To add PHP support to Nginx we should modify Nginx configuration file:&lt;br /&gt;
{{cmd|vi /etc/nginx/nginx.conf}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user                            www;&lt;br /&gt;
worker_processes                1;&lt;br /&gt;
&lt;br /&gt;
error_log                       /var/log/nginx/error.log warn;&lt;br /&gt;
pid                             /var/run/nginx/nginx.pid;&lt;br /&gt;
&lt;br /&gt;
events {&lt;br /&gt;
    worker_connections          1024;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
http {&lt;br /&gt;
    include                     /etc/nginx/mime.types;&lt;br /&gt;
    default_type                application/octet-stream;&lt;br /&gt;
    sendfile                    on;&lt;br /&gt;
    access_log                  /var/log/nginx/access.log;&lt;br /&gt;
    keepalive_timeout           3000;&lt;br /&gt;
    server {&lt;br /&gt;
        listen                  80;&lt;br /&gt;
        root                    /www;&lt;br /&gt;
        index                   index.html index.htm index.php;&lt;br /&gt;
        server_name             localhost;&lt;br /&gt;
        client_max_body_size    32m;&lt;br /&gt;
        error_page              500 502 503 504  /50x.html;&lt;br /&gt;
        location = /50x.html {&lt;br /&gt;
              root              /var/lib/nginx/html;&lt;br /&gt;
        }&lt;br /&gt;
        location ~ \.php$ {&lt;br /&gt;
              fastcgi_pass      127.0.0.1:9000;&lt;br /&gt;
              fastcgi_index     index.php;&lt;br /&gt;
              include           fastcgi.conf;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In our configuration we have line: &amp;quot;fastcgi_pass   127.0.0.1:9000&amp;quot; &amp;lt;br /&amp;gt;&lt;br /&gt;
It should be corresponing to the line &amp;quot;listen = 127.0.0.1:9000&amp;quot; in PHP configuration file /etc/php5/php-fpm.conf&lt;br /&gt;
&lt;br /&gt;
=== Timezone ===&lt;br /&gt;
For configuring Timezone you may use tzdata package which can be installed by running:&lt;br /&gt;
{{cmd|apk add tzdata}}&lt;br /&gt;
&lt;br /&gt;
Timezone configuration&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;TIMEZONE=&amp;quot;Europe/Helsinki&amp;quot;&lt;br /&gt;
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime&lt;br /&gt;
echo &amp;quot;${TIMEZONE}&amp;quot; &amp;gt; /etc/timezone&lt;br /&gt;
sed -i &amp;quot;s|;*date.timezone =.*|date.timezone = ${TIMEZONE}|i&amp;quot; /etc/php5/php.ini&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Sample PHP page ===&lt;br /&gt;
{{cmd|vi /www/phpinfo.php}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Nginx with PHP5 ===&lt;br /&gt;
Nginx should be restarted because we have changed it&#039;s configuration. Restart it by running:&lt;br /&gt;
{{cmd|rc-service nginx restart}}&lt;br /&gt;
&lt;br /&gt;
After the installation PHP is not running. Start it by running:&lt;br /&gt;
{{cmd|rc-service php-fpm start}}&lt;br /&gt;
&lt;br /&gt;
=== Runlevel ===&lt;br /&gt;
Normally you want to start the web server when the system is launching. This is done by adding Nginx and PHP to the needed runlevel.&lt;br /&gt;
{{cmd|rc-update add nginx default&lt;br /&gt;
rc-update add php-fpm default}}&lt;br /&gt;
&lt;br /&gt;
Now they should start automatically when you boot your machine next time. To test that run:&lt;br /&gt;
{{cmd|reboot}}&lt;br /&gt;
&lt;br /&gt;
To make sure that Nginx and PHP are started run command:&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;ps aux | grep &#039;nginx\|php-fpm&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
You should get something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  263 root       0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf&lt;br /&gt;
  264 www        0:00 nginx: worker process&lt;br /&gt;
  291 root       0:00 php-fpm: master process (/etc/php5/php-fpm.conf)&lt;br /&gt;
  302 www        0:00 php-fpm: pool www&lt;br /&gt;
  303 www        0:00 php-fpm: pool www&lt;br /&gt;
  310 root       0:00 grep nginx\|php-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing Nginx with PHP ===&lt;br /&gt;
This section is assuming that nginx is running and sample html page &amp;quot;/www/phpinfo.php&amp;quot; is created. Launch a web browser and point it to &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://X.X.X.X/phpinfo.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where X.X.X.X is IP address of your web server&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
If everything was set up correctly, you should see information about your web server.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If PHP is not started check php-fpm log file&lt;br /&gt;
{{cmd|less /var/log/php-fpm.log}}&lt;br /&gt;
&lt;br /&gt;
Make sure that configuration files do not contain errors&lt;br /&gt;
{{cmd|vi /etc/php5/php-fpm.conf&lt;br /&gt;
vi /etc/php5/php.ini}}&lt;br /&gt;
&lt;br /&gt;
== PHP7 Installation ==&lt;br /&gt;
PHP packages is available in the Alpine Linux repositories. To install php7 with modules run:&lt;br /&gt;
{{cmd|apk add php7-fpm php7-mcrypt php7-soap php7-openssl php7-gmp php7-pdo_odbc php7-json php7-dom php7-pdo php7-zip php7-mysqli php7-sqlite3 php7-apcu php7-pdo_pgsql php7-bcmath php7-gd php7-odbc php7-pdo_mysql php7-pdo_sqlite php7-gettext php7-xmlreader php7-xmlrpc php7-bz2 php7-iconv php7-pdo_dblib php7-curl php7-ctype}}&lt;br /&gt;
&lt;br /&gt;
Perhaps you do not need all these PHP modules. Install modules according to your needs.&lt;br /&gt;
&lt;br /&gt;
=== Configuration of PHP7 ===&lt;br /&gt;
&lt;br /&gt;
Defining ENV variables which will be used in configuration. You can do this e.g. in [https://stackoverflow.com/questions/35325856/where-to-set-system-default-environment-variables-in-alpine-linux /etc/profile.d/php7.sh].&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;PHP_FPM_USER=&amp;quot;www&amp;quot;&lt;br /&gt;
PHP_FPM_GROUP=&amp;quot;www&amp;quot;&lt;br /&gt;
PHP_FPM_LISTEN_MODE=&amp;quot;0660&amp;quot;&lt;br /&gt;
PHP_MEMORY_LIMIT=&amp;quot;512M&amp;quot;&lt;br /&gt;
PHP_MAX_UPLOAD=&amp;quot;50M&amp;quot;&lt;br /&gt;
PHP_MAX_FILE_UPLOAD=&amp;quot;200&amp;quot;&lt;br /&gt;
PHP_MAX_POST=&amp;quot;100M&amp;quot;&lt;br /&gt;
PHP_DISPLAY_ERRORS=&amp;quot;On&amp;quot;&lt;br /&gt;
PHP_DISPLAY_STARTUP_ERRORS=&amp;quot;On&amp;quot;&lt;br /&gt;
PHP_ERROR_REPORTING=&amp;quot;E_COMPILE_ERROR\|E_RECOVERABLE_ERROR\|E_ERROR\|E_CORE_ERROR&amp;quot;&lt;br /&gt;
PHP_CGI_FIX_PATHINFO=0&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
Modify variables according to your needs.&lt;br /&gt;
&lt;br /&gt;
Modifying configuration file www.conf&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;sed -i &amp;quot;s|;listen.owner\s*=\s*nobody|listen.owner = ${PHP_FPM_USER}|g&amp;quot; /etc/php7/php-fpm.d/www.conf&lt;br /&gt;
sed -i &amp;quot;s|;listen.group\s*=\s*nobody|listen.group = ${PHP_FPM_GROUP}|g&amp;quot; /etc/php7/php-fpm.d/www.conf&lt;br /&gt;
sed -i &amp;quot;s|;listen.mode\s*=\s*0660|listen.mode = ${PHP_FPM_LISTEN_MODE}|g&amp;quot; /etc/php7/php-fpm.d/www.conf&lt;br /&gt;
sed -i &amp;quot;s|user\s*=\s*nobody|user = ${PHP_FPM_USER}|g&amp;quot; /etc/php7/php-fpm.d/www.conf&lt;br /&gt;
sed -i &amp;quot;s|group\s*=\s*nobody|group = ${PHP_FPM_GROUP}|g&amp;quot; /etc/php7/php-fpm.d/www.conf&lt;br /&gt;
sed -i &amp;quot;s|;log_level\s*=\s*notice|log_level = notice|g&amp;quot; /etc/php7/php-fpm.d/www.conf #uncommenting line &amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Modifying configuration file php.ini&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;sed -i &amp;quot;s|display_errors\s*=\s*Off|display_errors = ${PHP_DISPLAY_ERRORS}|i&amp;quot; /etc/php7/php.ini&lt;br /&gt;
sed -i &amp;quot;s|display_startup_errors\s*=\s*Off|display_startup_errors = ${PHP_DISPLAY_STARTUP_ERRORS}|i&amp;quot; /etc/php7/php.ini&lt;br /&gt;
sed -i &amp;quot;s|error_reporting\s*=\s*E_ALL &amp;amp; ~E_DEPRECATED &amp;amp; ~E_STRICT|error_reporting = ${PHP_ERROR_REPORTING}|i&amp;quot; /etc/php7/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*memory_limit =.*|memory_limit = ${PHP_MEMORY_LIMIT}|i&amp;quot; /etc/php7/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*upload_max_filesize =.*|upload_max_filesize = ${PHP_MAX_UPLOAD}|i&amp;quot; /etc/php7/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*max_file_uploads =.*|max_file_uploads = ${PHP_MAX_FILE_UPLOAD}|i&amp;quot; /etc/php7/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*post_max_size =.*|post_max_size = ${PHP_MAX_POST}|i&amp;quot; /etc/php7/php.ini&lt;br /&gt;
sed -i &amp;quot;s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= ${PHP_CGI_FIX_PATHINFO}|i&amp;quot; /etc/php7/php.ini&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
To add PHP support to Nginx we should modify Nginx configuration file:&lt;br /&gt;
{{cmd|vi /etc/nginx/nginx.conf}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user                            www;&lt;br /&gt;
worker_processes                1;&lt;br /&gt;
&lt;br /&gt;
error_log                       /var/log/nginx/error.log warn;&lt;br /&gt;
pid                             /var/run/nginx/nginx.pid;&lt;br /&gt;
&lt;br /&gt;
events {&lt;br /&gt;
    worker_connections          1024;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
http {&lt;br /&gt;
    include                     /etc/nginx/mime.types;&lt;br /&gt;
    default_type                application/octet-stream;&lt;br /&gt;
    sendfile                    on;&lt;br /&gt;
    access_log                  /var/log/nginx/access.log;&lt;br /&gt;
    keepalive_timeout           3000;&lt;br /&gt;
    server {&lt;br /&gt;
        listen                  80;&lt;br /&gt;
        root                    /www;&lt;br /&gt;
        index                   index.html index.htm index.php;&lt;br /&gt;
        server_name             localhost;&lt;br /&gt;
        client_max_body_size    32m;&lt;br /&gt;
        error_page              500 502 503 504  /50x.html;&lt;br /&gt;
        location = /50x.html {&lt;br /&gt;
              root              /var/lib/nginx/html;&lt;br /&gt;
        }&lt;br /&gt;
        location ~ \.php$ {&lt;br /&gt;
              fastcgi_pass      127.0.0.1:9000;&lt;br /&gt;
              fastcgi_index     index.php;&lt;br /&gt;
              include           fastcgi.conf;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In our configuration we have line: &amp;quot;fastcgi_pass   127.0.0.1:9000&amp;quot; &amp;lt;br /&amp;gt;&lt;br /&gt;
It should be corresponing to the line &amp;quot;listen = 127.0.0.1:9000&amp;quot; in PHP configuration file /etc/php7/php-fpm.d/www.conf&lt;br /&gt;
&lt;br /&gt;
=== Timezone ===&lt;br /&gt;
For configuring Timezone you may use tzdata package which can be installed by running:&lt;br /&gt;
{{cmd|apk add tzdata}}&lt;br /&gt;
&lt;br /&gt;
Timezone configuration&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;TIMEZONE=&amp;quot;Europe/Helsinki&amp;quot;&lt;br /&gt;
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime&lt;br /&gt;
echo &amp;quot;${TIMEZONE}&amp;quot; &amp;gt; /etc/timezone&lt;br /&gt;
sed -i &amp;quot;s|;*date.timezone =.*|date.timezone = ${TIMEZONE}|i&amp;quot; /etc/php7/php.ini&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Sample PHP page ===&lt;br /&gt;
{{cmd|vi /www/phpinfo.php}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Nginx with PHP7 ===&lt;br /&gt;
Nginx should be restarted because we have changed it&#039;s configuration. Restart it by running:&lt;br /&gt;
{{cmd|rc-service nginx restart}}&lt;br /&gt;
&lt;br /&gt;
After the installation PHP is not running. Start it by running:&lt;br /&gt;
{{cmd|rc-service php-fpm7 start}}&lt;br /&gt;
&lt;br /&gt;
=== Runlevel ===&lt;br /&gt;
Normally you want to start the web server when the system is launching. This is done by adding Nginx and PHP to the needed runlevel.&lt;br /&gt;
{{cmd|rc-update add nginx default&lt;br /&gt;
rc-update add php-fpm7 default}}&lt;br /&gt;
&lt;br /&gt;
Now they should start automatically when you boot your machine next time. To test that run:&lt;br /&gt;
{{cmd|reboot}}&lt;br /&gt;
&lt;br /&gt;
To make sure that Nginx and PHP are started run command:&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;ps aux | grep &#039;nginx\|php-fpm&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
You should get something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  263 root       0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf&lt;br /&gt;
  264 www        0:00 nginx: worker process&lt;br /&gt;
  291 root       0:00 php-fpm: master process (/etc/php7/php-fpm.conf)&lt;br /&gt;
  302 www        0:00 php-fpm: pool www&lt;br /&gt;
  303 www        0:00 php-fpm: pool www&lt;br /&gt;
  310 root       0:00 grep nginx\|php-fpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing Nginx with PHP ===&lt;br /&gt;
This section is assuming that nginx is running and sample html page &amp;quot;/www/phpinfo.php&amp;quot; is created. Launch a web browser and point it to &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://X.X.X.X/phpinfo.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where X.X.X.X is IP address of your web server&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
If everything was set up correctly, you should see information about your web server.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If PHP is not started check php-fpm log file&lt;br /&gt;
{{cmd|less /var/log/php-fpm.log}}&lt;br /&gt;
&lt;br /&gt;
Make sure that configuration files do not contain errors&lt;br /&gt;
{{cmd|vi /etc/php7/php-fpm.conf&lt;br /&gt;
vi /etc/php7/php.ini}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Web Server]]&lt;br /&gt;
[[Category:PHP]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Serial_Mouse&amp;diff=23601</id>
		<title>Serial Mouse</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Serial_Mouse&amp;diff=23601"/>
		<updated>2023-05-30T06:53:19Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Serial Mouse to Serial mouse&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Serial mouse]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Serial_mouse&amp;diff=23600</id>
		<title>Serial mouse</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Serial_mouse&amp;diff=23600"/>
		<updated>2023-05-30T06:53:19Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Serial Mouse to Serial mouse&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Installation]]&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
A mouse connected to the serial port will not be recognized by an X.Org server automatically. In &amp;lt;code&amp;gt;/var/log/Xorg.0.log&amp;lt;/code&amp;gt; there will be a message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(II) The server relies on udev to provide the list of input devices.&lt;br /&gt;
If no devices become available, reconfigure udev or disable AutoAddDevices.&lt;br /&gt;
&amp;lt;/pre&amp;gt;   &lt;br /&gt;
An existing &amp;lt;code&amp;gt;/etc/X11/xorg.conf&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;AutoAddDevices&amp;lt;/code&amp;gt; enabled will result in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(WW) Hotplugging is on, devices using drivers &#039;kbd&#039;, &#039;mouse&#039; or &#039;vmmouse&#039; will be disabled.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will describe two ways of getting an usable serial mouse under X.org. In our example we have a Logitec serial mouse of the model M/N: M-M30 associated to the device &amp;lt;code&amp;gt;/dev/ttyS0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Getting information about the mouse=&lt;br /&gt;
&lt;br /&gt;
If the protocol for the serial mouse is unkown, the command {{cmd|mouse-test /dev/ttyS0}} from the package &amp;lt;code&amp;gt;gpm&amp;lt;/code&amp;gt; can be used to get the necessary information. The program is interactive and will print at the end a message like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Your mouse seems to be a &#039;mman&#039; one  on &amp;quot;/dev/ttyS0&amp;quot; (24 matches)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt; page &amp;lt;code&amp;gt;gpm-types&amp;lt;/code&amp;gt; contain a list of the protocols. In our case the lines&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       mman Mouseman&lt;br /&gt;
              The  protocol  used  by the new Logitech devices with three but-&lt;br /&gt;
              tons.  It is backward compatible with the Microsoft protocol, so&lt;br /&gt;
              if  your mouse has three buttons and works with -t ms or similar&lt;br /&gt;
              decoders you may try -t mman instead to use the  middle  button.&lt;br /&gt;
              This  mouse  decoder  accepts  standard serial options, although&lt;br /&gt;
              they should not be needed.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gives us more information about the protocol. We can test the mouse in a virtual console by running:&lt;br /&gt;
{{cmd|gpm -m /dev/ttyS0 -t mman}}&lt;br /&gt;
&lt;br /&gt;
=Solution: Inform the Linux input subsystem=&lt;br /&gt;
&lt;br /&gt;
The serial port should already be known to udev:&lt;br /&gt;
{{Cmd|udevadm info --name&amp;amp;#61;/dev/ttyS0 --query&amp;amp;#61;path}}&lt;br /&gt;
&amp;lt;pre&amp;gt;/devices/platform/serial8250/tty/ttyS0&amp;lt;/pre&amp;gt;&lt;br /&gt;
But in the output of {{cmd|cat /proc/bus/input/devices}} there is no hint of its existence. Installing the package &amp;lt;code&amp;gt;linuxconsoletools&amp;lt;/code&amp;gt; from the testing repository and executing&lt;br /&gt;
{{cmd|inputattach --mouseman /dev/ttyS0}}&lt;br /&gt;
should give us a working mouse for the X server.&lt;br /&gt;
The command&lt;br /&gt;
{{cmd|inputattach --help}} prints a list of the available protocols. In our case the line&lt;br /&gt;
&amp;lt;pre&amp;gt;  --mouseman       -mman     3-button Logitech / Genius mouse&amp;lt;/pre&amp;gt;&lt;br /&gt;
tells us which one to use. Now the output of {{cmd|cat /proc/bus/input/devices}} should contain a section like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I: Bus=0013 Vendor=0004 Product=0001 Version=0100&lt;br /&gt;
N: Name=&amp;quot;Logitech M+ Mouse&amp;quot;&lt;br /&gt;
P: Phys=ttyS0/serio0/input0&lt;br /&gt;
S: Sysfs=/devices/platform/serial8250/tty/ttyS0/serio8/input/input9&lt;br /&gt;
U: Uniq=&lt;br /&gt;
H: Handlers=event2 mouse0 &lt;br /&gt;
B: PROP=0&lt;br /&gt;
B: EV=7&lt;br /&gt;
B: KEY=70000 0 0 0 0 0 0 0 0&lt;br /&gt;
B: REL=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To start the &amp;lt;code&amp;gt;inputattach&amp;lt;/code&amp;gt; command automatically create a file &amp;lt;code&amp;gt;/etc/local.d/sermouse.start&amp;lt;/code&amp;gt; with the content:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
inputattach --daemon --mouseman /dev/ttyS0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make it executable and add the service &amp;lt;code&amp;gt;local&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; runlevel:&lt;br /&gt;
{{cmd|rc-update add local default}}&lt;br /&gt;
Then the command&lt;br /&gt;
{{cmd|rc}} should start the new service. If you want to stop &amp;lt;code&amp;gt;inputattach&amp;lt;/code&amp;gt; when stopping the &amp;lt;code&amp;gt;local&amp;lt;/code&amp;gt; service, create an executable file &amp;lt;code&amp;gt;/etc/local.d/sermouse.stop&amp;lt;/code&amp;gt; with content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
killall inputattach&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alternatively you can create a script in &amp;lt;code&amp;gt;/etc/init.d&amp;lt;/code&amp;gt; to define a service for the serial mouse.&lt;br /&gt;
&lt;br /&gt;
=Solution: Configure the X.org server=&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a &amp;lt;code&amp;gt;/etc/X11/xorg.conf&amp;lt;/code&amp;gt;, then generate one with the command&lt;br /&gt;
{{cmd|Xorg -configure}}&lt;br /&gt;
and modify (and move) the resulting file &amp;lt;code&amp;gt;/root/xorg.conf.new&amp;lt;/code&amp;gt; to get a running X server. For instance you might have to know the correct driver for the &amp;lt;code&amp;gt;&amp;quot;InputDevice&amp;quot;&amp;lt;/code&amp;gt; section for your graphics card. Include the section&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerFlags&amp;quot;&lt;br /&gt;
 Option &amp;quot;AutoAddDevices&amp;quot; &amp;quot;False&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to disable hotplugging and set the &amp;lt;code&amp;gt;&amp;quot;Device&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;Protocol&amp;quot;&amp;lt;/code&amp;gt; options in the &amp;lt;code&amp;gt;&amp;quot;InputDevice&amp;quot;&amp;lt;/code&amp;gt; section for your mouse. In our case we have:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Option &amp;quot;Protocol&amp;quot; &amp;quot;MouseMan&amp;quot;&lt;br /&gt;
 Option &amp;quot;Device&amp;quot; &amp;quot;/dev/ttyS0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then restart the X server. For instance:&lt;br /&gt;
{{cmd|rc-service lxdm restart}}&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
*[http://wiki.archlinux.org/index.php/serial_input_device_to_kernel_input Serial input device to kernel input - ArchWiki]&lt;br /&gt;
*[http://bugs.alpinelinux.org/issues/2532 Feature #2532: Request for package: linuxconsoletools]&lt;br /&gt;
*[http://lists.alpinelinux.org/alpine-devel/1891.html How to run script at startup (alpine-devel Archives)]&lt;br /&gt;
*[http://wiki.gentoo.org/wiki/Local.d local.d GEntoo Wiki]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Install_to_disk&amp;diff=23599</id>
		<title>Install to disk</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Install_to_disk&amp;diff=23599"/>
		<updated>2023-05-30T06:51:29Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{merge|installation}}&lt;br /&gt;
= If using Alpine Linux 2.2.3 or later =&lt;br /&gt;
&lt;br /&gt;
{{Warning|This will erase &#039;&#039;&#039;everything&#039;&#039;&#039; on your machine&#039;s harddisk. Don&#039;t blame me if someone sues you for this, your cat dies etc. You are warned.}}&lt;br /&gt;
&lt;br /&gt;
The following is meant to be an absolute newbie guide&lt;br /&gt;
&lt;br /&gt;
* [[Burning ISOs|Burn the Alpine ISO image to a CD]]&lt;br /&gt;
* Put the CD into the new computer and turn on the power. Make sure the computer is capable to boot from a CD. Your manual for the computer or the BIOS can help.&lt;br /&gt;
* Wait for the text &#039;&#039;&#039;login:&#039;&#039;&#039; to appear, type &#039;&#039;&#039;root&#039;&#039;&#039; and press enter.&lt;br /&gt;
* Run the &#039;&#039;&#039;setup-alpine&#039;&#039;&#039; script&lt;br /&gt;
** Choose your keyboard layout. If you don&#039;t know your keyboard layout choose &#039;&#039;&#039;us&#039;&#039;&#039;. Here &#039;&#039;&#039;us&#039;&#039;&#039; was chosen.&lt;br /&gt;
*** Then I chose the &#039;&#039;&#039;us&#039;&#039;&#039; variant.&lt;br /&gt;
** Host name, which will be the name of your computer, you can just press enter if you want to use the default name&lt;br /&gt;
** Choose your network card, most people can just go with the default (press enter)&lt;br /&gt;
*** Most people will use DHCP, so press enter again, or you can enter in your static IP address&lt;br /&gt;
*** You will be asked if you want to do any manual network configuration, press enter for no&lt;br /&gt;
** Type in your root password twice.&lt;br /&gt;
** Choose a time zone, you can get a list by pressing &#039;&#039;&#039;?&#039;&#039;&#039;. If you want a sub zone, e.g. Africa, type in Africa and press enter, &#039;&#039;&#039;?&#039;&#039;&#039; will give you a list of sub zones in Africa.&lt;br /&gt;
** Press &#039;&#039;&#039;f&#039;&#039;&#039; to choose the fastest mirror.&lt;br /&gt;
** Choose an SSH server, this allows you to remotely manage your machine. OpenSSH is what the big distro&#039;s use, Dropbear is a tiny SSH replacement. Choose &#039;&#039;&#039;none&#039;&#039;&#039; for best security.&lt;br /&gt;
** Choose an NTP client, this keeps your machine&#039;s time accurate using an Internet time server. Openntpd is what the big distro&#039;s use, while Chrony is a tiny replacement.&lt;br /&gt;
** Choose a disk you want to install Alpine onto, as an example, &#039;&#039;&#039;sda&#039;&#039;&#039; is the first disk in your computer.&lt;br /&gt;
*** Now choose how you would like to use it, for this guide, choose &#039;&#039;&#039;sys&#039;&#039;&#039;, this will install the entire OS onto your hard drive&lt;br /&gt;
*** You are given a final chance to back out, type in &#039;&#039;&#039;Y&#039;&#039;&#039; to continue&lt;br /&gt;
* The installation is now complete and you will be asked to reboot. Type in &#039;&#039;&#039;reboot&#039;&#039;&#039; and press enter&lt;br /&gt;
Take out the CD, and your computer should boot into Alpine using your hard drive.&lt;br /&gt;
&lt;br /&gt;
=== Continue Setting up your Computer ===&lt;br /&gt;
&lt;br /&gt;
* [[Alpine Linux package management]] &#039;&#039;(How to add/remove packages on your Alpine)&#039;&#039;&lt;br /&gt;
* [[OpenRC]] &#039;&#039;(Configure a service to automatically boot at next reboot)&#039;&#039;&lt;br /&gt;
* [[Setting up a SSH server]] &#039;&#039;(Using ssh is a good way to administer your box remotely)&#039;&#039;&lt;br /&gt;
* [[Tutorials and Howtos]] &#039;&#039;(Various tutorials, including how to setup a [[XFCE Setup|XFCE desktop]])&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
&lt;br /&gt;
= If using Alpine Linux 2.2.2 or earlier =&lt;br /&gt;
&lt;br /&gt;
A number of steps are nowadays included in the setup-disk and setup-lbu scripts, which are invoked by setup-alpine. But in these older systems, these steps have to be performed manually.&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; to configure the keyboard, hostname and networking.&lt;br /&gt;
{{Cmd|setup-alpine}}&lt;br /&gt;
&lt;br /&gt;
Now for the manual steps. Install needed programs for the setup:&lt;br /&gt;
{{Cmd|apk add e2fsprogs syslinux mkinitfs}}&lt;br /&gt;
&lt;br /&gt;
Create partitions with &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt;. &lt;br /&gt;
{{Cmd|fdisk /dev/sda}}&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say you have 2 partitions: {{Path|/dev/sda1}} as &amp;quot;Linux&amp;quot; (type 83) and {{Path|/dev/sda2}} as &amp;quot;linux swap&amp;quot; (type 82). The partition containing {{Path|/boot}}---here, {{Path|/dev/sda1}}---must be marked bootable (command &amp;quot;a&amp;quot; within &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Next, create your filesystem(s) and swap:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkfs.ext4 /dev/sda1&lt;br /&gt;
mkswap /dev/sda2}}&lt;br /&gt;
&lt;br /&gt;
Mount the filesystem:&lt;br /&gt;
{{Cmd|mount -t ext4 /dev/sda1 /mnt}}&lt;br /&gt;
&lt;br /&gt;
Clone the current running config created by &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt; (hostname, networking root password):&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;lbu package - | tar -C /mnt -zxf -&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Install base packages on the mounted disk:&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;apk add --root=/mnt --initdb $(cat /etc/apk/world)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Append the / and swap to {{Path|/etc/fstab}}:&lt;br /&gt;
{{Cmd|echo -e &amp;quot;/dev/sda1 /    ext4  defaults 1 1&amp;quot; &amp;amp;gt;&amp;amp;gt; /mnt/etc/fstab&lt;br /&gt;
echo -e &amp;quot;/dev/sda2 none swap  sw       0 0&amp;quot; &amp;amp;gt;&amp;amp;gt; /mnt/etc/fstab}}&lt;br /&gt;
&lt;br /&gt;
Configure the boot loader, &amp;lt;code&amp;gt;extlinux&amp;lt;/code&amp;gt;. We use the provided {{Path|syslinux.cfg}} as base.&lt;br /&gt;
{{Cmd|cp /media/cdrom/syslinux.cfg /mnt/boot/extlinux.conf&lt;br /&gt;
vi /mnt/boot/extlinux.conf}}&lt;br /&gt;
&lt;br /&gt;
It should contain something like:&lt;br /&gt;
 timeout 20&lt;br /&gt;
 prompt 1&lt;br /&gt;
 default grsec&lt;br /&gt;
 label grsec&lt;br /&gt;
     kernel /boot/grsec&lt;br /&gt;
     append initrd=/boot/grsec.gz root=/dev/sda1 modules=ext4 quiet&lt;br /&gt;
&lt;br /&gt;
Install the [[Bootloaders|bootloader]] on your {{Path|/boot}} partition:&lt;br /&gt;
{{Cmd|extlinux -i /mnt/boot}}&lt;br /&gt;
&lt;br /&gt;
Install the early-stage bootloader in the disk&#039;s MBR (note that it&#039;s {{Path|/dev/sda}} not {{Path|/dev/sda1}}!)&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;dd if=/usr/share/syslinux/mbr.bin of=/dev/sda&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
This also works:&lt;br /&gt;
{{Cmd|cat /usr/share/syslinux/mbr.bin &amp;gt; /dev/sda}}&lt;br /&gt;
&lt;br /&gt;
Unmount, remove cdrom, and reboot. (If you can&#039;t eject, just remove it manually as the machine reboots) &lt;br /&gt;
{{Cmd|umount /mnt&lt;br /&gt;
umount /.modloop&lt;br /&gt;
eject &lt;br /&gt;
reboot}}&lt;br /&gt;
&lt;br /&gt;
In recent versions of Alpine, the second line can be accomplished by &amp;lt;code&amp;gt;rc-service modloop stop&amp;lt;/code&amp;gt;. (See [[FAQ#How_do_I_remove_the_CDROM.3F|this FAQ entry]]).&lt;br /&gt;
&lt;br /&gt;
After reboot, you should be able to log in as root with the password you created in &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Create_UEFI_secureboot_USB&amp;diff=23598</id>
		<title>Create UEFI secureboot USB</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Create_UEFI_secureboot_USB&amp;diff=23598"/>
		<updated>2023-05-30T06:48:11Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{merge|Create UEFI boot USB}}This article explains how to create an UEFI boot USB with parted and rEFInd. Unfortunately the version of GRUB that ships with ALpine Linux did not work and Gummiboot only worked on one of two machines I tested. I will submit a PR for a rEFInd package and update these instructions to simplify them given time.&lt;br /&gt;
&lt;br /&gt;
In this example we will use {{Path|/dev/sdX}} and $HOME. This will be different depending on your system. Substitute the paths in the examples below as necessary.&lt;br /&gt;
&lt;br /&gt;
== Create GPT boot partition ==&lt;br /&gt;
&lt;br /&gt;
Install {{Pkg|parted}}&lt;br /&gt;
{{Cmd | apk add parted }}&lt;br /&gt;
&lt;br /&gt;
Create a single UEFI boot partitions.&lt;br /&gt;
{{warning| This will erase all content of your {{Path|/dev/sdX}}. Make sure that you use correct device.}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd | parted --script /dev/sdX mklabel gpt&lt;br /&gt;
 parted --script --align{{=}}optimal /dev/sdX mkpart ESP fat32 1MiB 100%&lt;br /&gt;
 parted --script /dev/sdX set 1 boot on }}&lt;br /&gt;
&lt;br /&gt;
== Create fat32 filesystem ==&lt;br /&gt;
&lt;br /&gt;
Create a fat32 system with the name `Alpine`.&lt;br /&gt;
&lt;br /&gt;
{{Cmd | mkfs.vfat -n ALPINE /dev/sdX1 }}&lt;br /&gt;
&lt;br /&gt;
== Copy content of ISO image to filesystem ==&lt;br /&gt;
&lt;br /&gt;
It is possible to mount the iso image and copy files with {{codeline|cp}} or {{codeline|rsync}} and it is also possible to use {{codeline|7z}} to extract content from the iso. In this example I will use the {{codeline|uniso}} utility from {{Pkg|alpine-conf}} package.&lt;br /&gt;
&lt;br /&gt;
{{Cmd | mount -t vfat /dev/sdX1 /mnt&lt;br /&gt;
 cd /mnt&lt;br /&gt;
 uniso &amp;lt; /path/to/alpine-3.8.2-x86_64.iso }}&lt;br /&gt;
&lt;br /&gt;
== Create MOK Key ==&lt;br /&gt;
{{Cmd | openssl req -new -x509 -newkey rsa:2048 -keyout $HOME/alpine_local.key -out $HOME/alpine_local.crt -nodes -days 3650 -subj &amp;quot;/CN{{=}}Alpine Local CA/&amp;quot;&lt;br /&gt;
 openssl x509 -in $HOME/alpine_local.crt -out $HOME/alpine_local.cer -outform DER}}&lt;br /&gt;
&lt;br /&gt;
== Download and install rEFInd ==&lt;br /&gt;
Download the binary zip file of rEFInd from http://www.rodsbooks.com/refind/getting.html. In this example we will use the current  version of rEFInd, refind-bin-0.11.4.zip. There may be a more recent version of rEFInd available when you download.&lt;br /&gt;
&lt;br /&gt;
{{Cmd | cd /mnt/efi/boot&lt;br /&gt;
 unzip /path/to/refind-bin-0.11.4.zip&lt;br /&gt;
 mv refind-bin-0.11.4/refind/* .&lt;br /&gt;
 rm -rf refind-bin-0.11.4}}&lt;br /&gt;
&lt;br /&gt;
== Copy signed shim ==&lt;br /&gt;
Download Matthew J. Garrett&#039;s signed shim from http://www.codon.org.uk/~mjg59/shim-signed/shim-signed-0.2.tgz{{dead link}}. In this example we  assume it is stored in your users download directory. Substitute the paths in the example below as necessary.&lt;br /&gt;
&lt;br /&gt;
{{Cmd | cd /mnt/efi/boot&lt;br /&gt;
 gunzip -c /path/to/shim-signed-0.2.tgz &amp;amp;#124; tar x --strip-components{{=}}1 --no-same-owner}}&lt;br /&gt;
&lt;br /&gt;
== Install Shim and Certificate ==&lt;br /&gt;
{{Cmd | cp $HOME/alpine_local.cer /mnt/efi/boot&lt;br /&gt;
 cp /mnt/efi/boot/refind_x64.efi /mnt/efi/boot/grubx64.efi&lt;br /&gt;
 cp /mnt/efi/boot/shim.efi /mnt/efi/boot/bootx64.efi }}&lt;br /&gt;
&lt;br /&gt;
== Sign the Bootloader and kernel with your key ==&lt;br /&gt;
{{Cmd | sbsign --key $HOME/alpine_local.key --cert $HOME/alpine_local.crt /mnt/efi/boot/grubx64.efi&lt;br /&gt;
 mv /mnt/efi/boot/grubx64.efi.signed /mnt/efi/boot/grubx64.efi&lt;br /&gt;
 sbsign --key $HOME/alpine_local.key --cert $HOME/alpine_local.crt /mnt/boot/vmlinuz-vanilla&lt;br /&gt;
 mv /mnt/boot/vmlinuz-vanilla.signed /mnt/boot/vmlinuz-vanilla}}&lt;br /&gt;
&lt;br /&gt;
== Unmount the partition ==&lt;br /&gt;
Finally umount the disk&lt;br /&gt;
{{Cmd | cd ~ &amp;amp;&amp;amp; umount /mnt}}&lt;br /&gt;
&lt;br /&gt;
== Install the Keys and Enroll Hash ==&lt;br /&gt;
Insert the USB into the target PC and boot. When prompted select to enroll key, navigate to alpine_local.cer and add it. Then select enroll hash navigate to efi/boot/grubx64.efi select it and add the hash. Now reboot and given a bit of luck it should launch alpine. This step is a bit more complex than it needs to be due to the binary distribution of refind already being signed by the authors key. Once rEFInd is packaged it should simplify this step.&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Mysql&amp;diff=23597</id>
		<title>Mysql</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Mysql&amp;diff=23597"/>
		<updated>2023-05-30T06:45:53Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Mysql to MySQL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[MySQL]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=MySQL&amp;diff=23596</id>
		<title>MySQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=MySQL&amp;diff=23596"/>
		<updated>2023-05-30T06:45:53Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Mysql to MySQL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MySQL is the most popular database manager in free software for two simple reasons (which are not the best technical reasons):&lt;br /&gt;
# It&#039;s simple and very easy to use&lt;br /&gt;
# It is very similar to SQLSERVER and is also used in other systems&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In the world of Linux Alpine there is a software that provides it&#039;&#039;&#039;, it is the [[MariaDB]], here we have a brief of info about compatibility and differences, but in short there&#039;s no great differences, if you have doubts check [[Mysql#MariaDB_vs_MySQL|MariaDB_vs_MySQL section here]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In the wiki there are two approaches for its use&#039;&#039;&#039;, [[Production_DataBases_:_mysql|the professional one]] (for servers and deploys) and the [[MariaDB|fast and simple]] usage (for developers and/or enthusiasts):&lt;br /&gt;
&lt;br /&gt;
= MariaDB - fast and simple use =&lt;br /&gt;
&lt;br /&gt;
{{:MariaDB}}&lt;br /&gt;
&lt;br /&gt;
= MySQL (MariaDB) - Production usage =&lt;br /&gt;
&lt;br /&gt;
{{:Production_DataBases_:_mysql}}&lt;br /&gt;
&lt;br /&gt;
= MariaDB vs MySQL =&lt;br /&gt;
&lt;br /&gt;
It is more a matter of compatibility than of performance and characteristics (with the arrival of MySQL v8) .. and it depends on whether there is a purely business and support approach &amp;quot;zero concern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
MySQL, being from Oracle, establishes limits if a license is not purchased, MariaDB has a large connection pool, more than 200,000 connections, while MySQL has a smaller connection pool if it is not licensed.&lt;br /&gt;
&lt;br /&gt;
However, MariaDB does not support data masking and dynamic column while MySQL supports it, also MariaDB although it has 12 new storage engines while MySQL has less these are very new and MySQL&#039;s are widely known and tested.&lt;br /&gt;
&lt;br /&gt;
In terms of performance, MariaDB is only a little faster than MySQL, this is because MySQL implements more business features, but this is only noticeable using these many features.&lt;br /&gt;
&lt;br /&gt;
Which is more optimal this is not clear .. in general MySQL should be less, and MariaDB faster, there is a third option which is Percona which is the same MySQL service but with special aggressive optimization patches for servers. Percona mysql code must be compiled in Alpine linux.&lt;br /&gt;
&lt;br /&gt;
== Comparison table ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Characteristic !! MariaDB !! MySQL&lt;br /&gt;
|-&lt;br /&gt;
| Storage Engines || up to 12 but many in development stage || less but well tested&lt;br /&gt;
|-&lt;br /&gt;
| Performance || just a little faster || less, there is almost no difference&lt;br /&gt;
|-&lt;br /&gt;
| Initial version  || 2009 (5.3) || 1995 (3.0)&lt;br /&gt;
|-&lt;br /&gt;
| Data masking || no || yes&lt;br /&gt;
|-&lt;br /&gt;
| dynamic columns || no || yes&lt;br /&gt;
|-&lt;br /&gt;
| Monitoring || SQLyog || MySQLworkbench&lt;br /&gt;
|-&lt;br /&gt;
| Routing || MariaDB MaxScale || Mysql Router&lt;br /&gt;
|-&lt;br /&gt;
| Analytics || MariaDB ColumnStore || not have&lt;br /&gt;
|-&lt;br /&gt;
| Git starred times (github)|| [https://github.com/MariaDB/server around 3.6k] || [https://github.com/mysql/mysql-server around 6k]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For more info check a review here: http://qgqlochekone.blogspot.com/2020/04/mariadb-mysql-and-mysqlworkbench.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Newbie]]&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Database]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Talk:Setting_up_a_samba-server&amp;diff=23595</id>
		<title>Talk:Setting up a samba-server</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Talk:Setting_up_a_samba-server&amp;diff=23595"/>
		<updated>2023-05-30T06:45:03Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Talk:Setting up a samba-server to Talk:Setting up a Samba server&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Talk:Setting up a Samba server]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Talk:Setting_up_a_Samba_server&amp;diff=23594</id>
		<title>Talk:Setting up a Samba server</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Talk:Setting_up_a_Samba_server&amp;diff=23594"/>
		<updated>2023-05-30T06:45:03Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Talk:Setting up a samba-server to Talk:Setting up a Samba server&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;updated to reflect the smb.conf created on install in 3.8. Also formatting.	--[[User:Astrawso|Astrawso]] ([[User talk:Astrawso|talk]]) 20:59, 7 December 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
== smb passwords ==&lt;br /&gt;
&lt;br /&gt;
When running from RAM, samba passwords db should be added to lbu, right ?&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;lbu inc /var/lib/samba/private/passdb.tdb&#039;&#039;&lt;br /&gt;
::&#039;&#039;lbu inc /var/lib/samba/private/secrets.tdb&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Are there other files that could be needed across reboots, out of /etc ?&lt;br /&gt;
&lt;br /&gt;
See last paragraph in this section here: &lt;br /&gt;
::&#039;&#039;&#039;&#039;&#039;[https://wiki.samba.org/index.php/Frequently_Asked_Questions#What_are_tdb_files.3F What_are_tdb_files on samba.org Wiki]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Quote:&lt;br /&gt;
::&#039;&#039;&#039;&#039;&#039;“The following tdb&#039;s should be backed up IMO:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;&#039;&#039;&#039;nt*.tdb   account_policy.tdb   group_mapping.tdb   share_info.tdb   winbindd_idmap.tdb   secrets.tdb   passdb.tdb“&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_a_samba-server&amp;diff=23593</id>
		<title>Setting up a samba-server</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_a_samba-server&amp;diff=23593"/>
		<updated>2023-05-30T06:45:03Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Setting up a samba-server to Setting up a Samba server&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Setting up a Samba server]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_a_Samba_server&amp;diff=23592</id>
		<title>Setting up a Samba server</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_a_Samba_server&amp;diff=23592"/>
		<updated>2023-05-30T06:45:03Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Setting up a samba-server to Setting up a Samba server&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installation =&lt;br /&gt;
Install packages:&lt;br /&gt;
{{Cmd|# apk add samba}}&lt;br /&gt;
&lt;br /&gt;
= Create a share directory =&lt;br /&gt;
This will be the directory that&#039;s shared to clients. You can create as many of these as you wish.&lt;br /&gt;
{{Cmd|# mkdir /media/storage}}&lt;br /&gt;
{{Cmd|# chmod 0777 /media/storage}}&lt;br /&gt;
&lt;br /&gt;
= Create smb.conf =&lt;br /&gt;
Alpine provides an example configuration file located at /etc/samba/smb.conf. The following is a simple example to get you up and running.&lt;br /&gt;
{{cat|/etc/samba/smb.conf|# /etc/samba/smb.conf&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[global]&lt;br /&gt;
#to allow symlinks from everywhere&lt;br /&gt;
allow insecure wide links = yes &lt;br /&gt;
workgroup = WORKGROUP&lt;br /&gt;
dos charset = cp866&lt;br /&gt;
unix charset = utf-8&lt;br /&gt;
force user = username&lt;br /&gt;
&lt;br /&gt;
[storage]&lt;br /&gt;
# to follow symlinks&lt;br /&gt;
follow symlinks = yes  &lt;br /&gt;
# to allow symlinks from outside&lt;br /&gt;
wide links = yes       &lt;br /&gt;
browseable = yes&lt;br /&gt;
writeable = yes&lt;br /&gt;
path = /media/storage&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{note|For each directory share, you&#039;ll need to add a subsection to &#039;&#039;&#039;smb.conf&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
= Create a system user and Samba user =&lt;br /&gt;
Create a user on the system. Create a Samba user. Give both users the same password.&lt;br /&gt;
{{Cmd|# adduser username}}&lt;br /&gt;
{{Cmd|# smbpasswd -a username}}&lt;br /&gt;
&lt;br /&gt;
= Configure the Samba service =&lt;br /&gt;
Run these two commands to start the service on boot and to start the service right now.&lt;br /&gt;
{{Cmd|# rc-update add samba}}&lt;br /&gt;
{{Cmd|# rc-service samba start}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Printers]]&lt;br /&gt;
[[Category:Authentication]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_a_nfs-server&amp;diff=23591</id>
		<title>Setting up a nfs-server</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_a_nfs-server&amp;diff=23591"/>
		<updated>2023-05-30T06:44:15Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Setting up a nfs-server to Setting up an NFS server: spelling/grammar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Setting up an NFS server]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_an_NFS_server&amp;diff=23590</id>
		<title>Setting up an NFS server</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_an_NFS_server&amp;diff=23590"/>
		<updated>2023-05-30T06:44:15Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Setting up a nfs-server to Setting up an NFS server: spelling/grammar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installation =&lt;br /&gt;
Install package:&lt;br /&gt;
{{Cmd|apk add nfs-utils}}&lt;br /&gt;
&lt;br /&gt;
= Make it autostart =&lt;br /&gt;
Export dirs in /etc/exports, then &lt;br /&gt;
{{Cmd|rc-update add nfs}}&lt;br /&gt;
&lt;br /&gt;
If you need just to mount nfs share from fstab file at booting of the system&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-update add nfsmount}}&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
{{Cmd|rc-update add netmount}}&lt;br /&gt;
&lt;br /&gt;
You can check your boot services:&lt;br /&gt;
{{Cmd|rc-status}}&lt;br /&gt;
&lt;br /&gt;
= Start it up now =&lt;br /&gt;
{{Cmd|rc-service nfs start}}&lt;br /&gt;
&lt;br /&gt;
or if you need to mount nfs share from fstab file now&lt;br /&gt;
{{Cmd|rc-service nfsmount start}}&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service netmount start}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Mini_httpd_with_Haserl_and_Lua&amp;diff=23589</id>
		<title>Mini httpd with Haserl and Lua</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Mini_httpd_with_Haserl_and_Lua&amp;diff=23589"/>
		<updated>2023-05-30T06:43:24Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:mini_httpd with Haserl and Lua}}&lt;br /&gt;
[http://acme.com/software/mini_httpd/ mini_httpd] is a small HTTP server. Its performance is not great, but for low or medium traffic sites it&#039;s quite adequate. It implements all the basic features of an HTTP server.&lt;br /&gt;
&lt;br /&gt;
[http://haserl.sourceforge.net/ Haserl] is a small program that uses shell or Lua script to create cgi web scripts. It is intended for environments where PHP or ruby are too big.&lt;br /&gt;
&lt;br /&gt;
[https://www.lua.org Lua] is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.&lt;br /&gt;
&lt;br /&gt;
= mini_httpd setup =&lt;br /&gt;
For setting up mini_httpd please see article [[mini_httpd]]&lt;br /&gt;
&lt;br /&gt;
= Haserl and Lua setup =&lt;br /&gt;
Haserl and Lua packages are available in the Alpine Linux repositories. To install them run:&lt;br /&gt;
{{cmd|apk add haserl lua}}&lt;br /&gt;
&lt;br /&gt;
You need to modify mini_httpd.conf (to add cgipat)&lt;br /&gt;
{{cmd|vi /etc/mini_httpd/mini_httpd.conf}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## do not leave empty lines in here!&lt;br /&gt;
#host=www.example.org&lt;br /&gt;
port=80&lt;br /&gt;
user=minihttpd&lt;br /&gt;
dir=/www&lt;br /&gt;
cgipat=**.sh|**.cgi|**.lua&lt;br /&gt;
nochroot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mini_httpd service should be restarted because we have changed it&#039;s configuration&lt;br /&gt;
{{cmd|rc-service mini_httpd restart}}&lt;br /&gt;
&lt;br /&gt;
Creating sample Lua script&lt;br /&gt;
{{cmd|vi /www/test.lua}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/haserl --shell=lua&lt;br /&gt;
Content-type: text/html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;% &lt;br /&gt;
	t = {&#039;Red&#039;, &#039;Blue&#039;, &#039;Yellow&#039;, &#039;Cyan&#039;}&lt;br /&gt;
	for k,v in ipairs(t) do&lt;br /&gt;
		io.write(&#039;&amp;lt;td bgcolor=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&#039;..v..&#039;&amp;lt;/td&amp;gt;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting execution permission&lt;br /&gt;
{{cmd|chmod +x /www/*.lua}}&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
For troubleshooting you can try running commands:&lt;br /&gt;
{{cmd|lua /www/test.lua}}&lt;br /&gt;
{{cmd|/www/test.lua}}&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;/usr/bin/haserl --shell=lua /www/test.lua&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{cmd|apk add sudo&lt;br /&gt;
sudo -u minihttpd /usr/bin/haserl /www/test.lua}}&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;apk add curl&lt;br /&gt;
curl http://localhost/test.lua&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Web Server]]&lt;br /&gt;
[[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Mini_httpd_with_Haserl&amp;diff=23588</id>
		<title>Mini httpd with Haserl</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Mini_httpd_with_Haserl&amp;diff=23588"/>
		<updated>2023-05-30T06:43:02Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:mini_httpd with Haserl}}&lt;br /&gt;
[http://acme.com/software/mini_httpd/ mini_httpd] is a small HTTP server. Its performance is not great, but for low or medium traffic sites it&#039;s quite adequate. It implements all the basic features of an HTTP server.&lt;br /&gt;
&lt;br /&gt;
[http://haserl.sourceforge.net/ Haserl] is a small program that uses shell or Lua script to create cgi web scripts. It is intended for environments where PHP or ruby are too big.&lt;br /&gt;
&lt;br /&gt;
= mini_httpd setup =&lt;br /&gt;
For setting up mini_httpd please see article [[mini_httpd]]&lt;br /&gt;
&lt;br /&gt;
= Haserl setup =&lt;br /&gt;
Haserl package is available in the Alpine Linux repositories. To install it run:&lt;br /&gt;
{{cmd|apk add haserl}}&lt;br /&gt;
&lt;br /&gt;
You need to modify mini_httpd.conf (to add cgipat)&lt;br /&gt;
{{cmd|vi /etc/mini_httpd/mini_httpd.conf}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## do not leave empty lines in here!&lt;br /&gt;
#host=www.example.org&lt;br /&gt;
port=80&lt;br /&gt;
user=minihttpd&lt;br /&gt;
dir=/www&lt;br /&gt;
cgipat=**.sh|**.cgi&lt;br /&gt;
nochroot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mini_httpd service should be restarted because we have changed it&#039;s configuration&lt;br /&gt;
{{cmd|rc-service mini_httpd restart}}&lt;br /&gt;
&lt;br /&gt;
Creating sample bash script&lt;br /&gt;
{{cmd|vi /www/test.sh}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/haserl&lt;br /&gt;
content-type: text/plain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%# This is a sample &amp;quot;env&amp;quot; script %&amp;gt;&lt;br /&gt;
&amp;lt;% env %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting execution permission&lt;br /&gt;
{{cmd|chmod +x /www/*.sh}}&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
For troubleshooting you can try running commands:&lt;br /&gt;
{{cmd|/www/test.sh}}&lt;br /&gt;
{{cmd|/usr/bin/haserl /www/test.sh}}&lt;br /&gt;
{{cmd|apk add sudo&lt;br /&gt;
sudo -u minihttpd /usr/bin/haserl /www/test.sh}}&lt;br /&gt;
{{cmd|apk add curl&lt;br /&gt;
curl &amp;lt;nowiki&amp;gt;http://localhost/test.sh&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
= mini_httpd with Haserl and Lua =&lt;br /&gt;
&lt;br /&gt;
[https://www.lua.org Lua] is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.&lt;br /&gt;
&lt;br /&gt;
For setting up mini_httpd with Haserl and Lua, please, see arcticle&lt;br /&gt;
[[Mini_httpd_with_Haserl_and_Lua|mini_httpd with Haserl and Lua]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Web Server]]&lt;br /&gt;
[[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Mini_httpd&amp;diff=23587</id>
		<title>Mini httpd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Mini_httpd&amp;diff=23587"/>
		<updated>2023-05-30T06:42:21Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:mini_httpd}}&lt;br /&gt;
[http://acme.com/software/mini_httpd/ mini_httpd] is a small HTTP server. Its performance is not great, but for low or medium traffic sites it&#039;s quite adequate. It implements all the basic features of an HTTP server.&lt;br /&gt;
&lt;br /&gt;
= Setup =&lt;br /&gt;
&lt;br /&gt;
mini_httpd package is available in the Alpine Linux repositories. To install it run:&lt;br /&gt;
{{cmd|apk add mini_httpd}}&lt;br /&gt;
&lt;br /&gt;
Preparing home directory&lt;br /&gt;
{{cmd|mkdir /www&lt;br /&gt;
chown minihttpd /www}}&lt;br /&gt;
&lt;br /&gt;
Before writing your configuration perhaps you may wish to backup original configuration file&lt;br /&gt;
{{cmd|mv /etc/mini_httpd/mini_httpd.conf /etc/mini_httpd/mini_httpd.conf.orig}}&lt;br /&gt;
&lt;br /&gt;
Creating mini_httpd configuration file&lt;br /&gt;
{{cmd|vi /etc/mini_httpd/mini_httpd.conf}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## do not leave empty lines in here!&lt;br /&gt;
#host=www.example.org&lt;br /&gt;
port=80&lt;br /&gt;
user=minihttpd&lt;br /&gt;
dir=/www&lt;br /&gt;
nochroot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating sample .html file&lt;br /&gt;
{{cmd|vi /www/index.html}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&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;title&amp;gt;HTML5&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    Server is online&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting mini_httpd&lt;br /&gt;
{{cmd|rc-service mini_httpd start}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 * Starting mini_httpd ...                                               [ ok ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
This section is assuming that mini_httpd is running and sample html page &amp;quot;/www/index.html&amp;quot; is created. Launch a web browser and point it to your web server. You should get:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Server is online&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also test web server with curl&lt;br /&gt;
{{cmd|apk add curl&lt;br /&gt;
curl http://localhost}}&lt;br /&gt;
&lt;br /&gt;
== Adding to runlevel ==&lt;br /&gt;
Normally you want to start the web server when the system is launching. This is done by adding mini_httpd to the needed runlevel.&lt;br /&gt;
{{Cmd|rc-update add mini_httpd default}}&lt;br /&gt;
&lt;br /&gt;
Now mini_httpd should start automatically when you launch your system next time. To test that run:&lt;br /&gt;
{{cmd|reboot}}&lt;br /&gt;
&lt;br /&gt;
To make sure that mini_httpd is started run:&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;ps aux | grep mini_httpd&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
You should get something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  580 minihttp   0:00 /usr/sbin/mini_httpd -i /var/run/mini_httpd/mini_httpd.pid -C /etc/mini_httpd/mini_httpd.conf -l /var/log/mini_httpd/mini_httpd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= mini_httpd with Haserl =&lt;br /&gt;
[http://haserl.sourceforge.net/ Haserl] is a small program that uses shell or Lua script to create cgi web scripts. It is intended for environments where PHP or ruby are too big.&lt;br /&gt;
&lt;br /&gt;
For setting up mini_httpd with Haserl, please see article [[Mini_httpd_with_Haserl|mini_httpd with Haserl]]&lt;br /&gt;
&lt;br /&gt;
= mini_httpd with Haserl and Lua =&lt;br /&gt;
[http://haserl.sourceforge.net/ Haserl] is a small program that uses shell or Lua script to create cgi web scripts. It is intended for environments where PHP or ruby are too big.&lt;br /&gt;
&lt;br /&gt;
[https://www.lua.org Lua] Lua is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.&lt;br /&gt;
&lt;br /&gt;
For setting up mini_httpd with Haserl and Lua, please see article [[Mini_httpd_with_Haserl_and_Lua|mini_httpd with Haserl and Lua]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Web Server]]&lt;br /&gt;
[[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Lighttpd_Advanced_security&amp;diff=23586</id>
		<title>Lighttpd Advanced security</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Lighttpd_Advanced_security&amp;diff=23586"/>
		<updated>2023-05-30T06:41:30Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Access Control List ==&lt;br /&gt;
&lt;br /&gt;
This is a way you can define a directory and only allow clients coming from the specified ip&#039;s to have access. This might be nice to allow internal LAN clients access to the status pages or employee contact information and deny other clients.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #### access control list for hidden_dir (not for use behind proxies) CAUTION REMOVE &amp;quot;#&amp;quot; to work&lt;br /&gt;
$HTTP[&amp;quot;remoteip&amp;quot;] !~ &amp;quot;127.0.0.1|10.10.10.2|20.10.20.30&amp;quot; {&lt;br /&gt;
   $HTTP[&amp;quot;url&amp;quot;] =~ &amp;quot;^/hidden_dir/&amp;quot; {&lt;br /&gt;
     url.access-deny = ( &amp;quot;&amp;quot; )&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;remoteip&amp;lt;/code&amp;gt; will be compared again single ip only, in that example again 3 ip&#039;s. The &amp;lt;nowiki&amp;gt;!~&amp;lt;/nowiki&amp;gt; are only used for those ip&#039;s that ar allowed, the rest will be denied (negative comparison).&lt;br /&gt;
* &amp;lt;code&amp;gt;hidden_dir&amp;lt;/code&amp;gt; are the name of the relative path under your root htdocs webserver place, or absolute path where are the files that are served.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HTTP[&amp;quot;url&amp;quot;] =~ &amp;quot;^/hidden_dir/&amp;quot; {&lt;br /&gt;
    $HTTP[&amp;quot;remoteip&amp;quot;] == &amp;quot;33.222.0.0/16&amp;quot; {&lt;br /&gt;
    }&lt;br /&gt;
    else $HTTP[&amp;quot;remoteip&amp;quot;] == &amp;quot;75.209.116.4&amp;quot; {&lt;br /&gt;
    }&lt;br /&gt;
    else $HTTP[&amp;quot;remoteip&amp;quot;] == &amp;quot;79.31.34.79&amp;quot; {&lt;br /&gt;
    }&lt;br /&gt;
    else $HTTP[&amp;quot;remoteip&amp;quot;] != &amp;quot;&amp;quot; {  # (dummy match everything)&lt;br /&gt;
        url.access-deny = ( &amp;quot;&amp;quot; )&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;33.222.0.0/16&amp;lt;/nowiki&amp;gt; in this case, we first match the denied entry to, then check the ip that access to that entry and for each network range at the last will be the acces deny rule.&lt;br /&gt;
&lt;br /&gt;
===== See also =====&lt;br /&gt;
&lt;br /&gt;
* https://redmine.lighttpd.net/boards/2/topics/1279&lt;br /&gt;
* https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModAccess&lt;br /&gt;
&lt;br /&gt;
== stop image hijacking ==&lt;br /&gt;
&lt;br /&gt;
Image hijacking is when someone makes a link to your site to one of your pictures or videos, but displays it on their site as their own content. The reason this is done is to send a browser to your server to use your bandwidth and make the content look like part of the hijacker&#039;s site. This is most common as people make links to pictures and add them to a public forum or blog listing. They get to use your picture in their content and not have to use their bandwidth or server to host the file. In order to keep your bandwidth usage low you should block access to images from those clients who are not requesting the connection from your site. Note, this function can be used for any kind on content. Just add the file types to the url.access-deny list. If would like more ideas on lowering bandwidth usage check out our Saving Webserver Bandwidth (Tips).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #### stop image hijacking (anti-hotlinking) CAUTION REMOVE &amp;quot;#&amp;quot; to work&lt;br /&gt;
 # $HTTP[&amp;quot;referer&amp;quot;] !~ &amp;quot;^(http://midominio\.org|http://www\.midominio\.org)&amp;quot; {&lt;br /&gt;
 #     url.access-deny = ( &amp;quot;.jpg&amp;quot;, &amp;quot;.jpeg&amp;quot;, &amp;quot;.png&amp;quot;, &amp;quot;.avi&amp;quot;, &amp;quot;.mov&amp;quot; )&lt;br /&gt;
 # }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== virtual host limits ==&lt;br /&gt;
&lt;br /&gt;
A virtual host is the hostname of your web server. For example this site is called calomel.org. Some bots and scanners will try to access your site using the ip address or no hostname header at all to bypass virtual host limitations. We can block this type of behavior by requiring all clients who want to access our server to reference us by our official host name. This will block anyone who is scanning ip addresses or trying to be mischievous, but allow normal clients like browsers and bots like Google.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #### virtual host limits CAUTION REMOVE &amp;quot;#&amp;quot; to work&lt;br /&gt;
 # $HTTP[&amp;quot;host&amp;quot;] !~ &amp;quot;^(midominio\.org|www\.midominio\.org)&amp;quot; {&lt;br /&gt;
 #     url.access-deny = ( &amp;quot;&amp;quot; )&lt;br /&gt;
 #  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== stop referer spam ==   &lt;br /&gt;
&lt;br /&gt;
Referer spam is more of an annoyance than a problem. A web site will connect to your server with the referer field referencing their web site. The idea is that if you publish your web logs or statistics then their hostname will show up on your page. When a search bot like Google comes by it will see the link from your site to theirs and give them more PageRank credit. First, never make your weblogs public. Second, block access to referer spammers with these lines.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #### stop referer spam CAUTION REMOVE &amp;quot;#&amp;quot; to work&lt;br /&gt;
 # $HTTP[&amp;quot;referer&amp;quot;] =~ &amp;quot;(tarotathome|casinospam)&amp;quot; {&lt;br /&gt;
 #     url.access-deny = ( &amp;quot;&amp;quot; )&lt;br /&gt;
 #  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Perfect Forward Secrecy (PFS) ==&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Perfect_forward_secrecy Perfect Forward Secrecy] isn&#039;t perfect, but what it does mean is that an adversary who gains the private key of a server does not have the ability to decrypt every encrypted SSL/TLS session.  Without it, an adversary can simply obtain the private key of a server and decrypt and and all SSL/TLS sessions using that key.  This is a major security and privacy concern and so using PFS is probably a good idea long term. It means that every session would have to be decrypted individually, regardless of the state (whether obtained by the adversary or otherwise).&lt;br /&gt;
&lt;br /&gt;
Ultimately when choosing SSL/TLS ciphers it is the usual chose of security or usability?  Increasing one usually decreases the other.  Nonetheless, an example to prevent the BEAST attack and offer PFS is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssl.cipher-list = &amp;quot;ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mitigation of well know-ed attacks ==&lt;br /&gt;
&lt;br /&gt;
=== BEAST attack, CVE-2011-3389 ===&lt;br /&gt;
&lt;br /&gt;
To help mitigate the BEAST attack add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #### Mitigate BEAST attack:&lt;br /&gt;
 &lt;br /&gt;
 # A stricter base cipher suite. For details see:&lt;br /&gt;
 # http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-3389&lt;br /&gt;
 # or&lt;br /&gt;
 # http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3389&lt;br /&gt;
 &lt;br /&gt;
 ssl.cipher-list = &amp;quot;ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4-SHA:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Make the server prefer the order of the server side cipher suite instead of the client suite.&lt;br /&gt;
 # This is necessary to mitigate the BEAST attack (unless you disable all non RC4 algorithms).&lt;br /&gt;
 # This option is enabled by default, but only used if ssl.cipher-list is set.&lt;br /&gt;
 ssl.honor-cipher-order = &amp;quot;enable&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Mitigate CVE-2009-3555 by disabling client triggered renegotiation&lt;br /&gt;
 # This option is enabled by default.&lt;br /&gt;
 #&lt;br /&gt;
 ssl.disable-client-renegotiation = &amp;quot;enable&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== POODLE attack (CVE-2014-3566) ===&lt;br /&gt;
&lt;br /&gt;
In light of the recent [https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3566 POODLE] findings, it&#039;s advisable to wherever possible turn off support for SSLv3.  This is quite simple, you can just append the following to your cipher list to explicitly disable SSLv3 support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
:!SSLv3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FREAK attack (CVE-2015-0204) ===&lt;br /&gt;
&lt;br /&gt;
To prevent the so called [https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-0204 FREAK] attack, keep your SSL library up to date, and do not offer support for export grade ciphers.&lt;br /&gt;
&lt;br /&gt;
There&#039;s multiple ways to do this, like turning off export cipher support in the cipher list:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
:!EXPORT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although now might be a good time to review the cipher list in use, and use a stronger, explicit set like the one from the Perfect Forward Secrecy section, or another example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssl.cipher-list = &amp;quot;ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also see https://freakattack.com/&lt;br /&gt;
&lt;br /&gt;
== Https access ==&lt;br /&gt;
&lt;br /&gt;
For higher security [[Lighttpd]] can be configured to allow https access. &lt;br /&gt;
&lt;br /&gt;
The configuration of lighttpd needs to be modified.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|nano /etc/lighttpd/lighttpd.conf}}&lt;br /&gt;
&lt;br /&gt;
Uncomment this section and adjust the path so &#039;ssl.pemfile&#039; points to where our cert/key pair is stored. Or copy the example below into your configuration file if you saved it to /etc/lighttpd/server.pem.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssl.engine    = &amp;quot;enable&amp;quot;&lt;br /&gt;
ssl.pemfile   = &amp;quot;/etc/lighttpd/server.pem&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;ll also want to set the server to listen on port 443. Replace this:&lt;br /&gt;
 &amp;lt;pre&amp;gt;server.port		= 80&amp;lt;/pre&amp;gt;&lt;br /&gt;
with this:&lt;br /&gt;
 &amp;lt;pre&amp;gt;server.port		= 443&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart lighttpd &lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service lighttpd restart}}&lt;br /&gt;
&lt;br /&gt;
===Generate Certificate and Keys===&lt;br /&gt;
Either generate the public key and certificate and private key using {{Pkg|openssl}}, or by using the ones generated by installing [[Alpine_Configuration_Framework_Design| ACF]].  You don&#039;t need to do both, just do one or the other.  The former method, with OpenSSL, is preferred since it gives greater control.&lt;br /&gt;
&lt;br /&gt;
====Generate self-signed certificates with openssl ====&lt;br /&gt;
&lt;br /&gt;
To generate certificates, openssl is needed.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add openssl}}&lt;br /&gt;
&lt;br /&gt;
Change to the lighttpd configuration directory&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd /etc/lighttpd}}&lt;br /&gt;
&lt;br /&gt;
With the command below the self-signed certificate and key pair are generated. A 2048 bit key is the minimum recommended at the time of writing, so we use &#039;-newkey rsa:2048&#039; in the command.  Change to suit your needs. Answer all questions.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|openssl req -newkey rsa:2048 -x509 -keyout server.pem -out server.pem -days 365 -nodes}}&lt;br /&gt;
&lt;br /&gt;
Adjust the permissions&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chmod 400 /etc/lighttpd/server.pem}}&lt;br /&gt;
&lt;br /&gt;
==== Generate self-signed certificates with acf ====&lt;br /&gt;
&lt;br /&gt;
Install the [[Alpine_Configuration_Framework_Design| ACF]]&lt;br /&gt;
&lt;br /&gt;
{{Cmd|setup-acf}}&lt;br /&gt;
&lt;br /&gt;
Copy the generated certificate to the lighttpd configuration directory.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mv /etc/ssl/mini_httpd/server.pem /etc/lighttpd/server.pem}}&lt;br /&gt;
&lt;br /&gt;
Adjust the permissions&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown root:root /etc/lighttpd/server.pem}}&lt;br /&gt;
{{Cmd|chmod 400 /etc/lighttpd/server.pem}}&lt;br /&gt;
&lt;br /&gt;
mini_http is no longer needed. &lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/mini_httpd stop &amp;amp;&amp;amp; rc-update del mini_httpd}}&lt;br /&gt;
&lt;br /&gt;
Removing the mini_http package&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk del mini_httpd}}&lt;br /&gt;
&lt;br /&gt;
=== redirecting HTTP to HTTPS ===&lt;br /&gt;
&lt;br /&gt;
Any requests to the server via HTTP (TCP port 80 by default) will be redirected to HTTPS (port 443):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## Ensure mod_redirect is enabled!&lt;br /&gt;
server.modules              = (&lt;br /&gt;
                                &amp;quot;mod_redirect&amp;quot;,                                    &lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
$SERVER[&amp;quot;socket&amp;quot;] == &amp;quot;:80&amp;quot; {&lt;br /&gt;
  $HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;(.*)&amp;quot; {&lt;br /&gt;
    url.redirect = ( &amp;quot;^/(.*)&amp;quot; =&amp;gt; &amp;quot;https://%1/$1&amp;quot; )&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== More details ==&lt;br /&gt;
&lt;br /&gt;
* [http://redmine.lighttpd.net/wiki/1/Docs:SSL Lighttpd documentation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Web Server]]&lt;br /&gt;
[[Category:Security]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Lighttpd&amp;diff=23585</id>
		<title>Lighttpd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Lighttpd&amp;diff=23585"/>
		<updated>2023-05-30T06:41:07Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Its name is a portmanteau of &amp;quot;light&amp;quot; and &amp;quot;httpd&amp;quot;: [http://www.lighttpd.net/ lighttpd] is a simple, standards-compliant, secure, and flexible web server. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lighttpd is a powerful server, made long ago to handle upwards of 10,000 connections in parallel on one server&#039;&#039;&#039;. It was used in wikipedia server a log time ago and also some google services.&lt;br /&gt;
&lt;br /&gt;
{{Note|As for minimal sites and quick-start purposes, it is recommended due to its easy configuration process and excellent performance without much configuration. Check https://w3techs.com/technologies/details/ws-lighttpd and note that it is used in high traffic and important sites like postgresql.org}}&lt;br /&gt;
&lt;br /&gt;
== General information ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature/Artifact !! Value/Name !! Observations&lt;br /&gt;
|-&lt;br /&gt;
| Main package name || lighttpd || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;apk add lighttpd&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Manpages and DOCs packages || lighttpd-doc || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;apk add lighttpd-doc&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Configuration file || {{Path|/etc/lighttpd/lighttpd.conf}} || A vanilla default configuration&lt;br /&gt;
|-&lt;br /&gt;
| Html place for system pages || {{Path|/var/www/localhost/htdocs/}} || Each web server in alpine has own path for that&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic files (cache, extra) || {{Path|/var/lib/lighttpd/}} || Created dynamically, each server in alpine has own path for that&lt;br /&gt;
|-&lt;br /&gt;
| Log files (error, access, etc) || {{Path|/var/log/lighttpd/}} || Each web server in alpine has own path for that&lt;br /&gt;
|-&lt;br /&gt;
| User running the webserver || lighttpd || Others Linux used &amp;quot;www-data&amp;quot; alpine has as a group&lt;br /&gt;
|-&lt;br /&gt;
| Group to common to webserver || www-data || Used to share things amont others daemons or services, like redis or apache files&lt;br /&gt;
|-&lt;br /&gt;
| Programed on || C and lua || Main engine code in C, modules and config in Lua variants&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Important Limitations ====&lt;br /&gt;
&lt;br /&gt;
Some common hosting panels do not handle {{Pkg|lighttpd}} configuration management.&lt;br /&gt;
&lt;br /&gt;
No HTTP/3 support.&lt;br /&gt;
&lt;br /&gt;
As we read previously.. main purpose was handle several request on one server, so are focused on high load. &lt;br /&gt;
&lt;br /&gt;
As main front end web server are perfect and it&#039;s &#039;&#039;&#039;recommended as reverse proxy server for {{Pkg|apache2}} or {{Pkg|nginx}}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Install Lighttpd ==&lt;br /&gt;
&lt;br /&gt;
The installation works just out of the box for only static pages, just with install you can see webserver in action by put any file inside the  {{Path|/var/www/localhost/htdocs/}} directory.&lt;br /&gt;
&lt;br /&gt;
Per user web files are supported by default in  {{Path|/home/&amp;lt;user&amp;gt;/public_html}} directory by default if we enable it (process are described below in further section &amp;quot;Lighttpd configuration&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Pkg|lighttpd}} is available in the Alpine Linux repositories. To install, simple launch the commands below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
apk add lighttpd&lt;br /&gt;
&lt;br /&gt;
rc-update add lighttpd default&lt;br /&gt;
&lt;br /&gt;
rc-service lighttpd restart&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing Lighttpd ==&lt;br /&gt;
&lt;br /&gt;
This section is assuming that lighttpd is running. If you now launch a web browser from a remote system and point it to your web server, you will see a page that says &amp;quot;404 - Not Found&amp;quot;. Well, at the moment there is no content available but the server is up and running.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s add a simple test page to get rid of the &amp;quot;404 - Not Found page&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|echo &amp;quot;Lighttpd is running...&amp;quot; &amp;gt; /var/www/localhost/htdocs/index.html}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For testing open a browser and go to &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://127.0.0.1/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and you will see &amp;quot;Lighttpd is running...&amp;quot;&#039;&#039;&#039;. Note that we used &amp;quot;127.0.0.1&amp;quot; if you are using alpine as the only machine for all as your main desktop/pc/machine.&lt;br /&gt;
&lt;br /&gt;
If you are using alpine remotelly as web server and just install it the package, &#039;&#039;&#039;open a browser in your desktop machine, and go to &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://&amp;lt;webserveripaddres&amp;gt;/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. The &amp;quot;webserveripaddres&amp;quot; are the ip address of your setup/server machine.&lt;br /&gt;
&lt;br /&gt;
== Lighttpd Configuration ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you just want to serve simple HTML pages lighttpd can be used out-of-box. No further configuration needed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For production purposes the [[Production LAMP system: Lighttpd + PHP + MySQL]] wiki page will explain in details all the needs, there&#039;s the [[Production Lets Encrypt: dehydrated]] wiki page with futher information to use HTTPS and lets encrypt certificates.&lt;br /&gt;
&lt;br /&gt;
Due to the minimalism of alpine linux, &#039;&#039;&#039;unfortunately the lighttpd packaging only provided vanilla configurations not close to alpine or easy admin maintenance&#039;&#039;&#039;, see the [[Production LAMP system: Lighttpd + PHP + MySQL]] wiki page to goin in deep about configuring lighttpd web server.&lt;br /&gt;
&lt;br /&gt;
==== Controlling Lighttpd ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Start lighttpd&#039;&#039;&#039;&#039;&#039;: After the installation {{Pkg|lighttpd}} is not running. As we made in first section was started already but if you want to start {{Pkg|lighttpd}} manually use:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service lighttpd start}}&lt;br /&gt;
&lt;br /&gt;
You will get a feedback about the status.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 * Caching service dependencies                                 [ ok ]&lt;br /&gt;
 * Starting lighttpd...                                         [ ok ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Stop lighttpd&#039;&#039;&#039;&#039;&#039;: If you want to stop the web server use &#039;&#039;stop&#039;&#039; in the same way of previous command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service lighttpd stop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Restart lighttpd&#039;&#039;&#039;&#039;&#039;: After changing the configuration file lighttpd needs to be restarted.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service lighttpd restart}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Proper Runlevel&#039;&#039;&#039;&#039;&#039;: By default no services are added to start process, sysadmin must know what we want and what will services do, also other main reason are due in dockers there&#039;s no runlevels per se and Alpine linux are mostly used in dockers containers. You must added the servide only to the default runlevel, not to boot, because need networking activated&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-update add lighttpd default}}&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
In production web, LAMP means &#039;&#039;&#039;L&#039;&#039;&#039;inux + &#039;&#039;&#039;A&#039;&#039;&#039;pache + &#039;&#039;&#039;M&#039;&#039;&#039;ysql + &#039;&#039;&#039;P&#039;&#039;&#039;hp installed and integrated, but today the &amp;quot;A&amp;quot; of apache are more used as Nginx or Lighttpd, and the &amp;quot;M&amp;quot; of MySQL are more used as Mariadb, the LAMP focused documents are:&lt;br /&gt;
&lt;br /&gt;
* [[Setting_Up_Lighttpd_with_PHP|Setting Up Lighttpd with PHP]] &lt;br /&gt;
* [[Lighttpd Advanced security]] &lt;br /&gt;
&lt;br /&gt;
[[Category:Web_Server]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Nginx&amp;diff=23584</id>
		<title>Nginx</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Nginx&amp;diff=23584"/>
		<updated>2023-05-30T06:38:43Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://nginx.org/en/ Nginx] (engine x) is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Nginx package is available in the Alpine Linux repositories. To install it run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk update&lt;br /&gt;
apk add nginx}}&lt;br /&gt;
&lt;br /&gt;
Creating new user and group &#039;www&#039; for nginx&lt;br /&gt;
{{Cmd|adduser -D -g &#039;www&#039; www}}&lt;br /&gt;
&lt;br /&gt;
Create a directory for html files&lt;br /&gt;
{{Cmd|mkdir /www&lt;br /&gt;
chown -R www:www /var/lib/nginx&lt;br /&gt;
chown -R www:www /www&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
You may want to make backup of original nginx.conf file before writting your own&lt;br /&gt;
{{Cmd|mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig}}&lt;br /&gt;
&lt;br /&gt;
Configuring Nginx to listen to port 80 and process .html or .htm files&lt;br /&gt;
{{Cmd|vi /etc/nginx/nginx.conf}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user                            www;&lt;br /&gt;
worker_processes                auto; # it will be determinate automatically by the number of core&lt;br /&gt;
&lt;br /&gt;
error_log                       /var/log/nginx/error.log warn;&lt;br /&gt;
#pid                             /var/run/nginx/nginx.pid; # it permit you to use /etc/init.d/nginx reload|restart|stop|start&lt;br /&gt;
&lt;br /&gt;
events {&lt;br /&gt;
    worker_connections          1024;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
http {&lt;br /&gt;
    include                     /etc/nginx/mime.types;&lt;br /&gt;
    default_type                application/octet-stream;&lt;br /&gt;
    sendfile                    on;&lt;br /&gt;
    access_log                  /var/log/nginx/access.log;&lt;br /&gt;
    keepalive_timeout           3000;&lt;br /&gt;
    server {&lt;br /&gt;
        listen                  80;&lt;br /&gt;
        root                    /www;&lt;br /&gt;
        index                   index.html index.htm;&lt;br /&gt;
        server_name             localhost;&lt;br /&gt;
        client_max_body_size    32m;&lt;br /&gt;
        error_page              500 502 503 504  /50x.html;&lt;br /&gt;
        location = /50x.html {&lt;br /&gt;
              root              /var/lib/nginx/html;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sample page ==&lt;br /&gt;
{{Cmd|vi /www/index.html}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&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;title&amp;gt;HTML5&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    Server is online&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Controlling nginx ==&lt;br /&gt;
&lt;br /&gt;
=== Start Nginx ===&lt;br /&gt;
After the installation Nginx is not running. To start Nginx, use &#039;&#039;start&#039;&#039;.&lt;br /&gt;
{{Cmd|rc-service nginx start}}&lt;br /&gt;
&lt;br /&gt;
You will get a feedback about the status.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 * Caching service dependencies ...                     [ ok ]&lt;br /&gt;
 * /run/nginx: creating directory&lt;br /&gt;
 * /run/nginx: correcting owner                         &lt;br /&gt;
 * Starting nginx ...                                   [ ok ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test configuration ===&lt;br /&gt;
When you&#039;ve made any changes to your nginx configuration files, you should check it for errors before restarting/reloading nginx.&amp;lt;br&amp;gt;&lt;br /&gt;
This will check for any duplicate configuration, syntax errors etc. To do this, run:&lt;br /&gt;
{{Cmd|nginx -t}}&lt;br /&gt;
&lt;br /&gt;
You will get a feedback if it failed or not. If everything is fine, you&#039;ll see the following and can then move ahead to reload the nginx server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok&lt;br /&gt;
nginx: configuration file /etc/nginx/nginx.conf test is successful&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reload and Restart Nginx ===&lt;br /&gt;
Changes made in the configuration file will not be applied until the command to reload configuration is sent to nginx or it is restarted.&amp;lt;br&amp;gt;&lt;br /&gt;
Reloading will do a &amp;quot;hot reload&amp;quot; of the configuration without server downtime. It will start the new worker processes with a new configuration and gracefully shutdown the old worker processes. If you have pending requests, then these will be handled by the old worker processes before it dies, so it&#039;s an extremely graceful way to reload configs.&lt;br /&gt;
If you want to reload the web server, use &#039;&#039;reload&#039;&#039;.&lt;br /&gt;
{{Cmd|rc-service nginx reload}}&lt;br /&gt;
If you want to restart the web server, use &#039;&#039;restart&#039;&#039;.&lt;br /&gt;
{{Cmd|rc-service nginx restart}}&lt;br /&gt;
&lt;br /&gt;
=== Stop Nginx ===&lt;br /&gt;
If you want to stop the web server, use &#039;&#039;stop&#039;&#039;.&lt;br /&gt;
{{Cmd|rc-service nginx stop}}&lt;br /&gt;
&lt;br /&gt;
=== Runlevel ===&lt;br /&gt;
Normally you want to start the web server when the system is launching. This is done by adding Nginx to the needed runlevel.&lt;br /&gt;
{{Cmd|rc-update add nginx default}}&lt;br /&gt;
&lt;br /&gt;
Now Nginx should start automatically when you boot your machine next time. To test that run:&lt;br /&gt;
{{cmd|reboot}}&lt;br /&gt;
&lt;br /&gt;
To make sure that Nginx is started run:&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;ps aux | grep nginx&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
You should get something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  263 root       0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf&lt;br /&gt;
  264 www        0:00 nginx: worker process&lt;br /&gt;
  310 root       0:00 grep nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing Nginx ==&lt;br /&gt;
This section is assuming that nginx is running and sample html page &amp;quot;/www/index.html&amp;quot; is created. Launch a web browser and point it to your web server.&lt;br /&gt;
You should get:&lt;br /&gt;
&amp;lt;pre&amp;gt;Server is online&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
If Nginx is not started check Nginx log file&lt;br /&gt;
{{cmd|less /var/log/nginx/error.log}}&lt;br /&gt;
&lt;br /&gt;
Make sure that configuration file does not contain errors. Edit the file in case there are any errors.&lt;br /&gt;
{{cmd|nginx -t&lt;br /&gt;
vi /etc/nginx/nginx.conf}}&lt;br /&gt;
&lt;br /&gt;
== Nginx with PHP ==&lt;br /&gt;
&lt;br /&gt;
[[Nginx_with_PHP#Configuration_of_PHP5|Setting Up Nginx with PHP5]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nginx_with_PHP#Configuration_of_PHP7|Setting Up Nginx with PHP7]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nginx_as_reverse_proxy_with_acme_(letsencrypt)|Setting Up Nginx as Reverse Proxy with acme (Let&#039;s Encrypt)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Web Server]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Darkhttpd&amp;diff=23583</id>
		<title>Darkhttpd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Darkhttpd&amp;diff=23583"/>
		<updated>2023-05-30T06:37:31Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Darkhttpd is a simple, fast HTTP 1.1 web server for static content.  It does not support PHP or CGI etc but is designed to serve static content, which it does very well.  Darkhttpd would be an excellent alternative to [[Lighttpd]] for [[How to setup a Alpine Linux mirror|running an Alpine mirror]]&lt;br /&gt;
    &lt;br /&gt;
For a full list of features see the [http://unix4lyfe.org/darkhttpd/ darkhttpd homepage]&lt;br /&gt;
&lt;br /&gt;
= Install =&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add darkhttpd}}&lt;br /&gt;
&lt;br /&gt;
= Configure =&lt;br /&gt;
&lt;br /&gt;
Default location of files to serve: {{Path|/var/www/localhost/htdocs}}&lt;br /&gt;
&lt;br /&gt;
Default log path: {{Path|/var/log/darkhttpd/access.log}}&lt;br /&gt;
&lt;br /&gt;
There&#039;s no configuration file for {{Pkg|darkhttpd}}, everything is controlled from the command line or in our case the OpenRC init file, which is stored in {{Path|/etc/init.d/darkhttpd}} and by default looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /sbin/runscript&lt;br /&gt;
&lt;br /&gt;
description=&amp;quot;darkhttpd web server&amp;quot;&lt;br /&gt;
command=&amp;quot;/usr/bin/darkhttpd&amp;quot;&lt;br /&gt;
command_args=&amp;quot;${document_root:-/var/www/localhost/htdocs} --chroot --daemon --uid darkhttpd --gid www-data --log /var/log/darkhttpd/access.log&amp;quot;&lt;br /&gt;
procname=&amp;quot;darkhttpd&amp;quot;&lt;br /&gt;
pidfile=&amp;quot;&amp;quot;&lt;br /&gt;
stopsig=&amp;quot;SIGTERM&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So by default we will serve pages from {{Path|/var/www/localhost/htdocs}} and darkhttpd will run as a background daemon, [https://en.wikipedia.org/wiki/Chroot chrooted] to {{Path|/var/www/localhost/htdocs}} with a user of &amp;lt;code&amp;gt;darkhttpd&amp;lt;/code&amp;gt; and group of &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;.&lt;br /&gt;
Logs will go to {{Path|/var/log/darkhttpd/access.log}}.&lt;br /&gt;
The default values have been chosen to provide sane, secure settings. &lt;br /&gt;
&lt;br /&gt;
Change any of these values as you see fit, but it&#039;s a good idea to backup the file before making changes.&lt;br /&gt;
&lt;br /&gt;
For a full list of available options, run: {{Cmd|darkhttpd}}&lt;br /&gt;
&lt;br /&gt;
and amend the &amp;lt;code&amp;gt;command_args&amp;lt;/code&amp;gt; line as you see fit.  &lt;br /&gt;
For example, you might wish to serve files from {{Path|/var/files}} instead, so you can edit the {{Path|/etc/init.d/darkhttpd}} file with an editor of your choice (vi, nano, vim or whatever) and make it like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /sbin/runscript&lt;br /&gt;
&lt;br /&gt;
description=&amp;quot;darkhttpd web server&amp;quot;&lt;br /&gt;
command=&amp;quot;/usr/bin/darkhttpd&amp;quot;&lt;br /&gt;
command_args=&amp;quot;/var/files --chroot --daemon --uid darkhttpd --gid www-data --log /var/log/darkhttpd/access.log&amp;quot;&lt;br /&gt;
procname=&amp;quot;darkhttpd&amp;quot;&lt;br /&gt;
pidfile=&amp;quot;&amp;quot;&lt;br /&gt;
stopsig=&amp;quot;SIGTERM&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Use =&lt;br /&gt;
&lt;br /&gt;
Filesharing is made easy; simply add your files under the server root, by default {{Path|/var/www/localhost/htdocs}}&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
Create a test page under the server root, by default {{Path|/var/www/localhost/htdocs}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|echo &amp;quot;this is a test page&amp;quot; &amp;gt; /var/www/localhost/htdocs/index.html}}&lt;br /&gt;
&lt;br /&gt;
{{Note| You don&#039;t have to create a test page; in a working environment darkhttpd will generate a directory listing if no index page is found.}}&lt;br /&gt;
&lt;br /&gt;
Start the daemon: {{Cmd|rc-service darkhttpd start}}&lt;br /&gt;
&lt;br /&gt;
Output should be something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 * Starting darkhttpd ...&lt;br /&gt;
darkhttpd/1.9, copyright (c) 2003-2013 Emil Mikulic.&lt;br /&gt;
listening on: http://0.0.0.0:80/&lt;br /&gt;
chrooted to `/var/www/localhost/htdocs&#039;&lt;br /&gt;
set gid to 82&lt;br /&gt;
set uid to 100                                &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now point a browser to your darkhttpd server and you should get the index page, or a directory listing if you didn&#039;t create an index page.&lt;br /&gt;
&lt;br /&gt;
Check the logfile: {{Cmd|tail /var/log/darkhttpd/access.log}}&lt;br /&gt;
&lt;br /&gt;
== Controlling darkhttpd status ==&lt;br /&gt;
&lt;br /&gt;
Stop, start and restart the daemon in the usual fashion:&lt;br /&gt;
{{Cmd|rc-service darkhttpd start}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service darkhttpd stop}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service darkhttpd restart}}&lt;br /&gt;
&lt;br /&gt;
== Auto-start darkhttpd at boot ==&lt;br /&gt;
&lt;br /&gt;
To add the daemon to the default runlevel so it auto-starts at boot, do: {{Cmd|rc-update add darkhttpd}}&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
* When restarting the daemon you may see an error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stopping darkhttpd ...&lt;br /&gt;
/lib/rc/sh/runscript.sh: line 202: can&#039;t create /sys/fs/cgroup/openrc/darkhttpd/tasks: nonexistent directory&lt;br /&gt;
Starting darkhttpd ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This error message appears to be benign and of no consequence so can be ignored.  I can only replicate this error on a VMWare vSphere client.&lt;br /&gt;
&lt;br /&gt;
* If the daemon will not start, ensure you haven&#039;t made a syntax error in the init script.&lt;br /&gt;
&lt;br /&gt;
* Ensure the daemon is running with {{Cmd|rc-status}}&lt;br /&gt;
&lt;br /&gt;
* Make use of the logs to check it is receiving requests.  To do this, run {{Cmd|tail -f /var/log/darkhttpd/access.log}} and then send requests to the web server.  If darkhttpd is receiving the requests, lines will be logged. If you don&#039;t see these lines, perhaps a firewall rule is blocking access to the server or there is a routing issue somewhere?&lt;br /&gt;
Use &#039;Ctrl C&#039; to exit back to the prompt when finished testing.&lt;br /&gt;
&lt;br /&gt;
= man darkhttpd =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
darkhttpd/1.12, copyright (c) 2003-2016 Emil Mikulic.&lt;br /&gt;
usage:	darkhttpd /path/to/wwwroot [flags]&lt;br /&gt;
&lt;br /&gt;
flags:	--port number (default: 8080, or 80 if running as root)&lt;br /&gt;
		Specifies which port to listen on for connections.&lt;br /&gt;
		Pass 0 to let the system choose any free port for you.&lt;br /&gt;
&lt;br /&gt;
	--addr ip (default: all)&lt;br /&gt;
		If multiple interfaces are present, specifies&lt;br /&gt;
		which one to bind the listening port to.&lt;br /&gt;
&lt;br /&gt;
	--maxconn number (default: system maximum)&lt;br /&gt;
		Specifies how many concurrent connections to accept.&lt;br /&gt;
&lt;br /&gt;
	--log filename (default: stdout)&lt;br /&gt;
		Specifies which file to append the request log to.&lt;br /&gt;
&lt;br /&gt;
	--chroot (default: don&#039;t chroot)&lt;br /&gt;
		Locks server into wwwroot directory for added security.&lt;br /&gt;
&lt;br /&gt;
	--daemon (default: don&#039;t daemonize)&lt;br /&gt;
		Detach from the controlling terminal and run in the background.&lt;br /&gt;
&lt;br /&gt;
	--index filename (default: index.html)&lt;br /&gt;
		Default file to serve when a directory is requested.&lt;br /&gt;
&lt;br /&gt;
	--no-listing&lt;br /&gt;
		Do not serve listing if directory is requested.&lt;br /&gt;
&lt;br /&gt;
	--mimetypes filename (optional)&lt;br /&gt;
		Parses specified file for extension-MIME associations.&lt;br /&gt;
&lt;br /&gt;
	--default-mimetype string (optional, default: application/octet-stream)&lt;br /&gt;
		Files with unknown extensions are served as this mimetype.&lt;br /&gt;
&lt;br /&gt;
	--uid uid/uname, --gid gid/gname (default: don&#039;t privdrop)&lt;br /&gt;
		Drops privileges to given uid:gid after initialization.&lt;br /&gt;
&lt;br /&gt;
	--pidfile filename (default: no pidfile)&lt;br /&gt;
		Write PID to the specified file.  Note that if you are&lt;br /&gt;
		using --chroot, then the pidfile must be relative to,&lt;br /&gt;
		and inside the wwwroot.&lt;br /&gt;
&lt;br /&gt;
	--no-keepalive&lt;br /&gt;
		Disables HTTP Keep-Alive functionality.&lt;br /&gt;
&lt;br /&gt;
	--forward host url (default: don&#039;t forward)&lt;br /&gt;
		Web forward (301 redirect).&lt;br /&gt;
		Requests to the host are redirected to the corresponding url.&lt;br /&gt;
		The option may be specified multiple times, in which case&lt;br /&gt;
		the host is matched in order of appearance.&lt;br /&gt;
&lt;br /&gt;
	--forward-all url (default: don&#039;t forward)&lt;br /&gt;
		Web forward (301 redirect).&lt;br /&gt;
		All requests are redirected to the corresponding url.&lt;br /&gt;
&lt;br /&gt;
	--no-server-id&lt;br /&gt;
		Don&#039;t identify the server type in headers&lt;br /&gt;
		or directory listings.&lt;br /&gt;
&lt;br /&gt;
	--ipv6&lt;br /&gt;
		Listen on IPv6 address.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Web Server]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Template_talk:Delete&amp;diff=23581</id>
		<title>Template talk:Delete</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Template_talk:Delete&amp;diff=23581"/>
		<updated>2023-05-30T06:05:06Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It might help admins to delete pages better (or others to fix the articles / contest their deletion) if this template included a category. &amp;lt;nowiki&amp;gt;&amp;lt;includeonly&amp;gt;[[Category:Articles for deletion]]&amp;lt;/includeonly&amp;gt;&amp;lt;/nowiki&amp;gt;, for example. I&#039;d add it myself, but for some reason it&#039;s been made admin-only.[[User:Arrogance|Arrogance]] ([[User talk:Arrogance|talk]]) 04:04, 30 May 2023 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Like this? https://wiki.alpinelinux.org/wiki/Special:WhatLinksHere/Template:Delete [[User:Bbbhltz|bbbhltz]] ([[User talk:Bbbhltz|talk]]) 05:25, 30 May 2023 (UTC)&lt;br /&gt;
::No. Lots of pages can potentially link to a template without using it, or needing to be deleted. It also makes it easier to parse with tools. [[User:Arrogance|Arrogance]] ([[User talk:Arrogance|talk]]) 06:03, 30 May 2023 (UTC)&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Template_talk:Delete&amp;diff=23580</id>
		<title>Template talk:Delete</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Template_talk:Delete&amp;diff=23580"/>
		<updated>2023-05-30T06:03:28Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It might help admins to delete pages better (or others to fix the articles / contest their deletion) if this template included a category. &amp;lt;nowiki&amp;gt;&amp;lt;includeonly&amp;gt;[[Category:Articles for deletion]]&amp;lt;/includeonly&amp;gt;&amp;lt;/nowiki&amp;gt;, for example. I&#039;d add it myself, but for some reason it&#039;s been made admin-only.[[User:Arrogance|Arrogance]] ([[User talk:Arrogance|talk]]) 04:04, 30 May 2023 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Like this? https://wiki.alpinelinux.org/wiki/Special:WhatLinksHere/Template:Delete [[User:Bbbhltz|bbbhltz]] ([[User talk:Bbbhltz|talk]]) 05:25, 30 May 2023 (UTC)&lt;br /&gt;
::No. Lots of pages can potentially link to a template without using it, or needing to be deleted. [[User:Arrogance|Arrogance]] ([[User talk:Arrogance|talk]]) 06:03, 30 May 2023 (UTC)&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=GNOME&amp;diff=23576</id>
		<title>GNOME</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=GNOME&amp;diff=23576"/>
		<updated>2023-05-30T05:05:58Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
* [[Installation|Install]] AlpineLinux&lt;br /&gt;
* [[Setting_up_a_new_user#Creating_a_new_user|Create a user account]] (optional but recommended)&lt;br /&gt;
* [[Repositories#Enabling_the_community_repository|Enable the Community repository]]&lt;br /&gt;
* [[Alpine_setup_scripts#setup-xorg-base|Install Xorg]] (no longer needed if installing GNOME through &amp;quot;setup-desktop&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
{{Note|[[Wayland]] can be used but may be less stable and GNOME may still require Xorg}}&lt;br /&gt;
&lt;br /&gt;
= Installing packages =&lt;br /&gt;
&lt;br /&gt;
Install basic desktop system and gnome packages.&lt;br /&gt;
{{Cmd|# setup-desktop gnome}}&lt;br /&gt;
&lt;br /&gt;
It will take care of installing the basic packages and setting up the display manager. &lt;br /&gt;
&lt;br /&gt;
If you want, you can install additional GNOME apps for a more complete GNOME experience with:&lt;br /&gt;
{{Cmd|# apk add gnome-apps-extra}}&lt;br /&gt;
&lt;br /&gt;
And even all of GNOME games with:&lt;br /&gt;
{{Cmd|# apk add gnome-games-collection}}&lt;br /&gt;
&lt;br /&gt;
= Enabling terminal apps =&lt;br /&gt;
If you want to use the gnome-terminal/other terminal applications you will need to install bash. If you want a typical bash setup also enable bash completion:&lt;br /&gt;
{{cmd|# apk add bash}}&lt;br /&gt;
{{cmd|# apk add bash-completion}}&lt;br /&gt;
&lt;br /&gt;
= Enabling GNOME Shell screen recording =&lt;br /&gt;
For the embedded screen recording in GNOME Shell to work, you will need some additional packages: {{cmd|# apk add pipewire wireplumber gst-plugin-pipewire}}&lt;br /&gt;
&lt;br /&gt;
= Enabling GNOME Software =&lt;br /&gt;
For GNOME Software to be able to manage APK packages, it needs the &amp;lt;code&amp;gt;apk-polkit-server&amp;lt;/code&amp;gt; service working. To enable it and start it up:&lt;br /&gt;
{{cmd|# rc-update add apk-polkit-server default &amp;amp;&amp;amp; rc-service apk-polkit-server start}}&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
If GDM does not start with no logs generated at /var/log/gdm, try setting up udev: {{cmd|# setup-devd udev}}&lt;br /&gt;
&lt;br /&gt;
If you are unable to log in, check /var/log/gdm/greeter.log, there may be info there from X that indicates failed modules, etc.&lt;br /&gt;
&lt;br /&gt;
If logging in from GDM kicks you back to the login screen, try {{cmd|# apk add bash}} (bug report: #10953 sorry cannot link yet)&lt;br /&gt;
&lt;br /&gt;
If GNOME Terminal doesn&#039;t start, add the following to /etc/locale.conf: LANG=en_US.UTF-8 and reboot.&lt;br /&gt;
&lt;br /&gt;
If the on-screen keyboard shows up in GDM after installing other UIs such as Phosh, you need to disable it by opening the Accessibility menu (top right) when you are in the GDM login screen. You can disable the on-screen keyboard there. Or set &amp;lt;code&amp;gt;org.gnome.desktop.a11y.applications screen-keyboard-enabled&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; for the &amp;lt;code&amp;gt;gdm&amp;lt;/code&amp;gt; user with &amp;lt;code&amp;gt;dconf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Desktop Environments]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Gnome&amp;diff=23575</id>
		<title>Gnome</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Gnome&amp;diff=23575"/>
		<updated>2023-05-30T05:04:20Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Gnome to GNOME: The proper name is ALLCAPS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[GNOME]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=GNOME&amp;diff=23574</id>
		<title>GNOME</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=GNOME&amp;diff=23574"/>
		<updated>2023-05-30T05:04:20Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Arrogance moved page Gnome to GNOME: The proper name is ALLCAPS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
* [[Installation|Install]] AlpineLinux&lt;br /&gt;
* [[Setting_up_a_new_user#Creating_a_new_user|Create a user account]] (optional but recommended)&lt;br /&gt;
* [[Repositories#Enabling_the_community_repository|Enable the Community repository]]&lt;br /&gt;
* [[Alpine_setup_scripts#setup-xorg-base|Install Xorg]] (no longer needed if installing GNOME through &amp;quot;setup-desktop&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
{{Note|[[Wayland]] can be used but may be less stable and Gnome may still require Xorg}}&lt;br /&gt;
&lt;br /&gt;
= Installing packages =&lt;br /&gt;
&lt;br /&gt;
Install basic desktop system and gnome packages.&lt;br /&gt;
{{Cmd|# setup-desktop gnome}}&lt;br /&gt;
&lt;br /&gt;
It will take care of installing the basic packages and setting up the display manager. &lt;br /&gt;
&lt;br /&gt;
If you want, you can install additional GNOME apps for a more complete GNOME experience with:&lt;br /&gt;
{{Cmd|# apk add gnome-apps-extra}}&lt;br /&gt;
&lt;br /&gt;
And even all of GNOME games with:&lt;br /&gt;
{{Cmd|# apk add gnome-games-collection}}&lt;br /&gt;
&lt;br /&gt;
= Enabling terminal apps =&lt;br /&gt;
If you want to use the gnome-terminal/other terminal applications you will need to install bash. If you want a typical bash setup also enable bash completion:&lt;br /&gt;
{{cmd|# apk add bash}}&lt;br /&gt;
{{cmd|# apk add bash-completion}}&lt;br /&gt;
&lt;br /&gt;
= Enabling GNOME Shell screen recording =&lt;br /&gt;
For the embedded screen recording in GNOME Shell to work, you will need some additional packages: {{cmd|# apk add pipewire wireplumber gst-plugin-pipewire}}&lt;br /&gt;
&lt;br /&gt;
= Enabling GNOME Software =&lt;br /&gt;
For GNOME Software to be able to manage APK packages, it needs the &amp;lt;code&amp;gt;apk-polkit-server&amp;lt;/code&amp;gt; service working. To enable it and start it up:&lt;br /&gt;
{{cmd|# rc-update add apk-polkit-server default &amp;amp;&amp;amp; rc-service apk-polkit-server start}}&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
If GDM does not start with no logs generated at /var/log/gdm, try setting up udev: {{cmd|# setup-devd udev}}&lt;br /&gt;
&lt;br /&gt;
If you are unable to log in, check /var/log/gdm/greeter.log, there may be info there from X that indicates failed modules, etc.&lt;br /&gt;
&lt;br /&gt;
If logging in from GDM kicks you back to the login screen, try {{cmd|# apk add bash}} (bug report: #10953 sorry cannot link yet)&lt;br /&gt;
&lt;br /&gt;
If GNOME Terminal doesn&#039;t start, add the following to /etc/locale.conf: LANG=en_US.UTF-8 and reboot.&lt;br /&gt;
&lt;br /&gt;
If the on-screen keyboard shows up in GDM after installing other UIs such as Phosh, you need to disable it by opening the Accessibility menu (top right) when you are in the GDM login screen. You can disable the on-screen keyboard there. Or set &amp;lt;code&amp;gt;org.gnome.desktop.a11y.applications screen-keyboard-enabled&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; for the &amp;lt;code&amp;gt;gdm&amp;lt;/code&amp;gt; user with &amp;lt;code&amp;gt;dconf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop]]&lt;br /&gt;
[[Category:Desktop Environments]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Dynamic_Multipoint_VPN_(DMVPN)_Phase_3_with_Quagga_NHRPd&amp;diff=23573</id>
		<title>Dynamic Multipoint VPN (DMVPN) Phase 3 with Quagga NHRPd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Dynamic_Multipoint_VPN_(DMVPN)_Phase_3_with_Quagga_NHRPd&amp;diff=23573"/>
		<updated>2023-05-30T05:01:47Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{merge|Dynamic Multipoint VPN (DMVPN)}}&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
= THIS DOC IS STILL A DRAFT =&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
This is a follow-up of the most famous document [http://wiki.alpinelinux.org/wiki/Dynamic_Multipoint_VPN_(DMVPN)],&lt;br /&gt;
since opennhrp has been rewritten as quagga plugin [1], supporting interoperability with new Cisco&#039;s FlexVPN and Strongswan.&lt;br /&gt;
&lt;br /&gt;
This NHRP implementation has some limits yet (Multicast is not ready, so you need to use BGP rather than OSPF), though is usable in a production environment.&lt;br /&gt;
&lt;br /&gt;
{{Note|This document assumes that all Alpine installations are run in [[Installation#Basics|diskless mode]] and that the configuration is saved on USB key}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This How-To will show you how to configure a DMVPN solution with this key items:&lt;br /&gt;
&lt;br /&gt;
.1 VPN setup with Strongswan with PSK for the authentication (same PSK between all of the spokes and hub)&lt;br /&gt;
&lt;br /&gt;
.2 DMVPN setup with quagga.nhrpd; &lt;br /&gt;
&lt;br /&gt;
.3 iBGP used for announce LAN subnet&lt;br /&gt;
&lt;br /&gt;
.4 Awall rules to allow NHRP shortcuts between spokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The goal is making private network of spoke&#039;s nodes and hub to communicate each other over VPN created dynamically.&lt;br /&gt;
Routes are learned via BGP, and hte IPSEC VPN is authenticated via PSK.&lt;br /&gt;
&lt;br /&gt;
The logical setup is configured as shown:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Terminology =&lt;br /&gt;
;NBMA: &#039;&#039;Non-Broadcast Multi-Access&#039;&#039; network as described in [http://tools.ietf.org/html/rfc2332 RFC 2332]&lt;br /&gt;
&lt;br /&gt;
;Hub: the &#039;&#039;Next Hop Server&#039;&#039; (NHS) performing the Next Hop Resolution Protocol service within the NBMA cloud.&lt;br /&gt;
&lt;br /&gt;
;Spoke: the &#039;&#039;Next Hop Resolution Protocol Client&#039;&#039; (NHC) which initiates NHRP requests of various types in order to obtain access to the NHRP service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
For supporting VIA Padlock engine enable its modules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|echo -e &amp;quot;padlock_aes\npadlock-sha&amp;quot; &amp;gt;&amp;gt; /etc/modules}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Alpine Installation =&lt;br /&gt;
&lt;br /&gt;
Follow the instructions on  http://wiki.alpinelinux.org/wiki/Create_a_Bootable_USB about how to create a bootable USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Spoke Nodes =&lt;br /&gt;
&lt;br /&gt;
== Spoke Node 1 ==&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to setup the spoke node 1 as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Host&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Interface&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Subnet&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 1&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|DHCP&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.10.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.1.1 &lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 2&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|DHCP&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.20.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.2.1 &lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 3&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|90.100.150.200&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.30.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.3.1 &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add interfaces:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet dhcp&lt;br /&gt;
        &lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 192.168.10.1&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SSH ==&lt;br /&gt;
Remove password authentication and DNS reverse lookup:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sed -i &amp;quot;s/.PasswordAuthentication yes/PasswordAuthentication no/&amp;quot; /etc/ssh/sshd_config&lt;br /&gt;
sed -i &amp;quot;s/.UseDNS yes/UseDNS no/&amp;quot; /etc/ssh/sshd_config}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Restart ssh:&lt;br /&gt;
{{Cmd|/etc/init.d/sshd restart}}&lt;br /&gt;
&lt;br /&gt;
== GRE Tunnel ==&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add the following:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
auto gre1&lt;br /&gt;
iface gre1 inet static&lt;br /&gt;
        pre-up ip tunnel add gre1 mode gre key 42 ttl 64 dev eth0 || true&lt;br /&gt;
        address 172.16.1.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        post-down ip tunnel del $IFACE || true&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Bring up the new &amp;lt;code&amp;gt;gre1&amp;lt;/code&amp;gt; interface:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ifup gre1}}&lt;br /&gt;
&lt;br /&gt;
== IPSEC ==&lt;br /&gt;
Install package(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add strongswan&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/swanctl/swanctl.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
connections {&lt;br /&gt;
        dmvpn {&lt;br /&gt;
                version = 2&lt;br /&gt;
                pull = no&lt;br /&gt;
                mobike = no&lt;br /&gt;
                dpd_delay = 15&lt;br /&gt;
                dpd_timeout = 30&lt;br /&gt;
                fragmentation = yes&lt;br /&gt;
                unique = replace&lt;br /&gt;
                rekey_time = 4h&lt;br /&gt;
                reauth_time = 13h&lt;br /&gt;
                proposals = aes256-sha512-ecp384&lt;br /&gt;
                local {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                        id = spoke1&lt;br /&gt;
                }&lt;br /&gt;
                remote {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                }&lt;br /&gt;
                children {&lt;br /&gt;
                        dmvpn {&lt;br /&gt;
                                esp_proposals = aes256-sha512-ecp384&lt;br /&gt;
                                local_ts = dynamic[gre]&lt;br /&gt;
                                remote_ts = dynamic[gre]&lt;br /&gt;
                                inactivity = 90m&lt;br /&gt;
                                rekey_time = 100m&lt;br /&gt;
                                mode = transport&lt;br /&gt;
                                dpd_action = clear&lt;br /&gt;
                                reqid = 1&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/ipsec.secrets|&lt;br /&gt;
# /etc/ipsec.secrets - strongSwan IPsec secrets file&lt;br /&gt;
&lt;br /&gt;
%any : PSK &amp;quot;cisco12345678987654321&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Start service(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/charon start&lt;br /&gt;
rc-update add charon}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
This section will configure the routing protocol suite quagga patched with NHRP support.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add quagga-nhrp&lt;br /&gt;
touch /etc/quagga/zebra.conf /etc/quagga/bgpd.conf /etc/quagga/nhrpd.conf}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fix permissions:&lt;br /&gt;
{{Cmd|chown -R quagga:quagga /etc/quagga}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start all the daemons:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/zebra start&lt;br /&gt;
/etc/init.d/bgpd start&lt;br /&gt;
/etc/init.d/nhrpd start&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Configure it to start from boot:&lt;br /&gt;
{{Cmd|rc-update add zebra nhrpd bgpd}}&lt;br /&gt;
&lt;br /&gt;
Now  we&#039;re going to configure it with &amp;lt;code&amp;gt;vtysh&amp;lt;/code&amp;gt; cli:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
&lt;br /&gt;
configure terminal&lt;br /&gt;
log syslog&lt;br /&gt;
debug nhrp common&lt;br /&gt;
&lt;br /&gt;
router bgp 65000&lt;br /&gt;
 bgp router-id 172.16.1.1&lt;br /&gt;
 network 192.168.10.0/24&lt;br /&gt;
 neighbor spokes-ibgp peer-group&lt;br /&gt;
 neighbor spokes-ibgp remote-as 65000&lt;br /&gt;
 neighbor spokes-ibgp ebgp-multihop 1&lt;br /&gt;
 neighbor spokes-ibgp disable-connected-check&lt;br /&gt;
 neighbor spokes-ibgp advertisement-interval 1&lt;br /&gt;
 neighbor spokes-ibgp next-hop-self&lt;br /&gt;
 neighbor spokes-ibgp soft-reconfiguration inbound&lt;br /&gt;
 neighbor 172.16.0.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
nhrp nflog-group 1&lt;br /&gt;
interface gre1&lt;br /&gt;
 ip nhrp network-id 1&lt;br /&gt;
 ip nhrp nhs dynamic nbma 50.60.70.80&lt;br /&gt;
 ip nhrp registration no-unique&lt;br /&gt;
 ip nhrp shortcut&lt;br /&gt;
 ipv6 nd suppress-ra&lt;br /&gt;
 no link-detect&lt;br /&gt;
 tunnel protection vici profile dmvpn&lt;br /&gt;
 tunnel source eth0&lt;br /&gt;
 exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hub Node =&lt;br /&gt;
&lt;br /&gt;
We will document only what changes from the Spoke node setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
The NHS (Hub) has the following settings:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Host&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Interface&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Subnet&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Hub&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|50.60.70.80&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.1.0/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add interfaces:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
    address 50.60.70.80&lt;br /&gt;
    netmask 255.255.255.0&lt;br /&gt;
    gateway 50.60.70.1&lt;br /&gt;
        &lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 192.168.1.1&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GRE Tunnel ==&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add the following:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
auto gre1&lt;br /&gt;
iface gre1 inet static&lt;br /&gt;
        pre-up ip tunnel add gre1 mode gre key 42 ttl 64 dev eth0 || true&lt;br /&gt;
        address 172.16.0.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        post-down ip tunnel del $IFACE || true&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Bring up the new gre1 interface:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ifup gre1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
Again, routing is configured directly with &amp;lt;code&amp;gt;vtysh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
&lt;br /&gt;
configure terminal&lt;br /&gt;
log syslog&lt;br /&gt;
debug nhrp common&lt;br /&gt;
&lt;br /&gt;
router bgp 65000&lt;br /&gt;
 bgp router-id 172.16.0.1&lt;br /&gt;
 bgp deterministic-med&lt;br /&gt;
 network 172.16.0.0/16&lt;br /&gt;
 redistribute nhrp&lt;br /&gt;
 neighbor spokes-ibgp peer-group&lt;br /&gt;
 neighbor spokes-ibgp remote-as 65000&lt;br /&gt;
 neighbor spokes-ibgp ebgp-multihop 1&lt;br /&gt;
 neighbor spokes-ibgp disable-connected-check&lt;br /&gt;
 neighbor spokes-ibgp route-reflector-client&lt;br /&gt;
 neighbor spokes-ibgp next-hop-self all&lt;br /&gt;
 neighbor spokes-ibgp advertisement-interval 1&lt;br /&gt;
 neighbor spokes-ibgp soft-reconfiguration inbound&lt;br /&gt;
 neighbor 172.16.1.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
interface gre1&lt;br /&gt;
 ip nhrp network-id 1&lt;br /&gt;
 ip nhrp nhs dynamic nbma 50.60.70.80&lt;br /&gt;
 ip nhrp registration no-unique&lt;br /&gt;
 ip nhrp shortcut&lt;br /&gt;
 ipv6 nd suppress-ra&lt;br /&gt;
 no link-detect&lt;br /&gt;
 tunnel protection vici profile dmvpn&lt;br /&gt;
 tunnel source eth0&lt;br /&gt;
 exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Add the lines &amp;lt;code&amp;gt;neighbor %Spoke1_GRE_IP%...&amp;lt;/code&amp;gt; for each spoke node you have.&lt;br /&gt;
For instance, if you want to add spoke node with gre1 address 172.16.3.1: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
conf t&lt;br /&gt;
router bgp 65000&lt;br /&gt;
neighbor 172.16.3.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Awall ==&lt;br /&gt;
&lt;br /&gt;
Differently from DMVPN Phase 2, in the Phase 3 DMVPN the HUB is the default gateway for all the spokes, then the spokes are able to communicate directly each other by means of NHRP redirects.&lt;br /&gt;
&lt;br /&gt;
(For a good explanation of the differences between Phase 1, Phase 2 and Phase 3 DMVPN, see http://blog.ine.com/2008/12/23/dmvpn-phase-3/).&lt;br /&gt;
&lt;br /&gt;
This is implemented by sending traffic indication notifications with iptables nflog.&lt;br /&gt;
&lt;br /&gt;
This is the  complete firewall configuration for the HUB, using Alpine Firewall Framework, Awall [http://wiki.alpinelinux.org/wiki/Alpine_Wall].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/awall/optional/zones.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/zones.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Zones - zone definition for management&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;variable&amp;quot;: {&lt;br /&gt;
        &amp;quot;SUBNETS&amp;quot;: [ &amp;quot;192.168.0.0/16&amp;quot;, &amp;quot;172.16.0.0/16&amp;quot; ]&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;DMVPN&amp;quot;: { &amp;quot;addr&amp;quot;: &amp;quot;$SUBNETS&amp;quot; }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, create &amp;lt;code&amp;gt;/etc/awall/optional/inet.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/inet.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Internet - Host Management (rate limited)&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;INET&amp;quot;: { &amp;quot;iface&amp;quot;: &amp;quot;eth0&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;drop&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ping&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;,&lt;br /&gt;
      &amp;quot;flow-limit&amp;quot;: { &amp;quot;count&amp;quot;: 10, &amp;quot;interval&amp;quot;: 6 }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ssh&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;,&lt;br /&gt;
      &amp;quot;conn-limit&amp;quot;: { &amp;quot;count&amp;quot;: 3, &amp;quot;interval&amp;quot;: 60 }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;dns&amp;quot;, &amp;quot;http&amp;quot;, &amp;quot;ntp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Now, the DMVPN rule:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/dmvpn.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;DMVPN specific rules&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;import&amp;quot;: [ &amp;quot;inet&amp;quot;, &amp;quot;zones&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;variable&amp;quot;: {&lt;br /&gt;
    &amp;quot;HUB&amp;quot;: true&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;DMVPN&amp;quot;: { &amp;quot;iface&amp;quot;: &amp;quot;gre1&amp;quot;, &amp;quot;addr&amp;quot;: &amp;quot;$SUBNETS&amp;quot;, &amp;quot;route-back&amp;quot;: &amp;quot;$HUB&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;ipsec&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;ipsec&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;ipsec&amp;quot;: &amp;quot;in&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;gre&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;ipsec&amp;quot;: &amp;quot;out&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;gre&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;bgp&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;bgp&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;},&lt;br /&gt;
    { &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;dest&amp;quot;: &amp;quot;$SUBNETS&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;reject&amp;quot; }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Management interface allowed traffic:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/management.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Host Management (ssh, https, ping)&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;import&amp;quot;: [ &amp;quot;zones&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;reject&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot;, &amp;quot;https&amp;quot;, &amp;quot;bgp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot;, &amp;quot;http&amp;quot;, &amp;quot;http-alt&amp;quot;, &amp;quot;https&amp;quot;, &amp;quot;dns&amp;quot;, &amp;quot;ntp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
NHRP redirects rule:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/vpnredirect.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;NHRP Traffic Indication Probe&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;log&amp;quot;: {&lt;br /&gt;
    &amp;quot;dmvpn&amp;quot;: {&lt;br /&gt;
       &amp;quot;mode&amp;quot;: &amp;quot;nflog&amp;quot;,&lt;br /&gt;
       &amp;quot;group&amp;quot;: 1,&lt;br /&gt;
       &amp;quot;range&amp;quot;: 128,&lt;br /&gt;
       &amp;quot;limit&amp;quot;: {&lt;br /&gt;
          &amp;quot;count&amp;quot;: 6,&lt;br /&gt;
          &amp;quot;interval&amp;quot;: 60,&lt;br /&gt;
          &amp;quot;mask&amp;quot;: {&lt;br /&gt;
             &amp;quot;inet&amp;quot;: { &amp;quot;src&amp;quot;: 16, &amp;quot;dest&amp;quot;: 16 },&lt;br /&gt;
             &amp;quot;inet6&amp;quot;: { &amp;quot;src&amp;quot;: 48, &amp;quot;dest&amp;quot;: 48 }&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;packet-log&amp;quot;: [ { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;log&amp;quot;: &amp;quot;dmvpn&amp;quot; } ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enable awall rules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|awall enable zones&lt;br /&gt;
awall enable inet&lt;br /&gt;
awall enable dmvpn&lt;br /&gt;
awall enable vpnredirect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Apply awall rules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|awall activate -f &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IPSEC ==&lt;br /&gt;
Install package(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add strongswan&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/swanctl/swanctl.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
connections {&lt;br /&gt;
        dmvpn {&lt;br /&gt;
                version = 2&lt;br /&gt;
                pull = no&lt;br /&gt;
                mobike = no&lt;br /&gt;
                dpd_delay = 15&lt;br /&gt;
                dpd_timeout = 30&lt;br /&gt;
                fragmentation = yes&lt;br /&gt;
                unique = replace&lt;br /&gt;
                rekey_time = 4h&lt;br /&gt;
                reauth_time = 13h&lt;br /&gt;
                proposals = aes256-sha512-ecp384&lt;br /&gt;
                local {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                        id = hub&lt;br /&gt;
                }&lt;br /&gt;
                remote {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                }&lt;br /&gt;
                children {&lt;br /&gt;
                        dmvpn {&lt;br /&gt;
                                esp_proposals = aes256-sha512-ecp384&lt;br /&gt;
                                local_ts = dynamic[gre]&lt;br /&gt;
                                remote_ts = dynamic[gre]&lt;br /&gt;
                                inactivity = 90m&lt;br /&gt;
                                rekey_time = 100m&lt;br /&gt;
                                mode = transport&lt;br /&gt;
                                dpd_action = clear&lt;br /&gt;
                                reqid = 1&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/ipsec.secrets|&lt;br /&gt;
# /etc/ipsec.secrets - strongSwan IPsec secrets file&lt;br /&gt;
&lt;br /&gt;
%any : PSK &amp;quot;cisco12345678987654321&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Start service(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/charon start&lt;br /&gt;
rc-update add charon}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, test if it works.&lt;br /&gt;
In this example, spoke 1 tries to connect to spoke 3, who announces his subnet 192.168.30.0/24 via iBGP, the gre1 address is 172.16.3.1 and the public ip address is 90.100.150.200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first traffic goes from through the HUB.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|spoke1:~/root# traceroute -n 192.168.30.1&lt;br /&gt;
traceroute to 192.168.30.1 (192.168.30.1), 30 hops max, 38 byte packets&lt;br /&gt;
 1  172.16.0.1  0.664 ms  0.461 ms  0.457 ms&lt;br /&gt;
 2  192.168.30.1  0.907 ms  0.776 ms  0.771 ms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Then, once the VPN is created, the traffic goes directly to the spoke node.&lt;br /&gt;
 &lt;br /&gt;
{{Cmd|spoke1:~/root# traceroute -n 192.168.30.1&lt;br /&gt;
traceroute to 192.168.30.1 (192.168.30.1), 30 hops max, 38 byte packets&lt;br /&gt;
 1  192.168.30.1  0.456 ms  0.385 ms  0.357 ms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;code&amp;gt;ipsec --status-all&amp;lt;/code&amp;gt; you can see alle the VPNs created:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|spoke1:~/root# ipsec statusall&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Status of IKE charon daemon (strongSwan 5.3.2, Linux 3.18.20-1-grsec, i686):&lt;br /&gt;
  uptime: 9 days, since Aug 28 14:22:27 2015&lt;br /&gt;
  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 28&lt;br /&gt;
  loaded plugins: charon random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp xcbc cmac curl sqlite attr kernel-netlink resolve socket-default farp stroke vici updown eap-identity eap-sim eap-aka eap-aka-3gpp2 eap-simaka-pseudonym eap-simaka-reauth eap-md5 eap-mschapv2 eap-radius eap-tls xauth-generic xauth-eap dhcp unity&lt;br /&gt;
Listening IP addresses:&lt;br /&gt;
  192.168.10.1&lt;br /&gt;
  172.17.50.1&lt;br /&gt;
  172.16.1.1&lt;br /&gt;
Connections:&lt;br /&gt;
       dmvpn:  %any...%any  IKEv2, dpddelay=15s&lt;br /&gt;
       dmvpn:   local:  [spoke1] uses pre-shared key authentication&lt;br /&gt;
       dmvpn:   remote: uses pre-shared key authentication&lt;br /&gt;
       dmvpn:   child:  dynamic[gre] === dynamic[gre] TRANSPORT, dpdaction=clear&lt;br /&gt;
Security Associations (3 up, 0 connecting):&lt;br /&gt;
       dmvpn[121]: ESTABLISHED 4 seconds ago, 172.17.50.1[spoke1]...90.100.150.200[spoke3]&lt;br /&gt;
       dmvpn[121]: IKEv2 SPIs: c770729967ea636c_i 0de8ffedbe32f21c_r*, rekeying in 3 hours, pre-shared key reauthentication in 12 hours&lt;br /&gt;
       dmvpn[121]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{187}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c132e6c3_i c49ae122_o&lt;br /&gt;
       dmvpn{187}:  AES_CBC_256/HMAC_SHA2_512_256, 469 bytes_i (6 pkts, 2s ago), 326 bytes_o (6 pkts, 2s ago), rekeying in 90 minutes&lt;br /&gt;
       dmvpn{187}:   172.17.50.1/32[gre] === 90.100.150.200/32[gre] &lt;br /&gt;
       dmvpn[120]: ESTABLISHED 8 seconds ago, 172.17.50.1[spoke1]...90.100.150.200[spoke3]&lt;br /&gt;
       dmvpn[120]: IKEv2 SPIs: 46f81c8ec9a4b753_i* f768298b31ebe4da_r, rekeying in 3 hours, pre-shared key reauthentication in 11 hours&lt;br /&gt;
       dmvpn[120]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{186}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: cad2c1c9_i cd5a287c_o&lt;br /&gt;
       dmvpn{186}:  AES_CBC_256/HMAC_SHA2_512_256, 74 bytes_i (1 pkt, 2s ago), 46 bytes_o (1 pkt, 2s ago), rekeying in 91 minutes&lt;br /&gt;
       dmvpn{186}:   172.17.50.1/32[gre] === 90.100.150.200/32[gre] &lt;br /&gt;
       dmvpn[119]: ESTABLISHED 2 hours ago, 172.17.50.1[spoke1]...50.60.70.80[hub]&lt;br /&gt;
       dmvpn[119]: IKEv2 SPIs: 0e999ad802ced9cc_i* 6eaa469463601437_r, rekeying in 84 minutes, pre-shared key reauthentication in 8 hours&lt;br /&gt;
       dmvpn[119]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{185}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c84d6035_i cb72cd30_o&lt;br /&gt;
       dmvpn{185}:  AES_CBC_256/HMAC_SHA2_512_256, 35764 bytes_i (473 pkts, 0s ago), 38266 bytes_o (384 pkts, 0s ago), rekeying in 46 minutes&lt;br /&gt;
       dmvpn{185}:   172.17.50.1/32[gre] === 50.60.70.80/32[gre] &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Dynamic Multipoint VPN (DMVPN)]]&lt;br /&gt;
* [[Setup of DMVPN on Alpine linux]]&lt;br /&gt;
&lt;br /&gt;
[[category: VPN]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_mini&amp;diff=23571</id>
		<title>Alpine mini</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_mini&amp;diff=23571"/>
		<updated>2023-05-30T04:42:04Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{obsolete|See notice on [[Alpine Security and Rescue]]}}&lt;br /&gt;
Alpine Mini contains only a very limited set of packages.&lt;br /&gt;
&lt;br /&gt;
== Basics ==&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;
! Description&lt;br /&gt;
! URL&lt;br /&gt;
|-&lt;br /&gt;
| alpine-base&lt;br /&gt;
| Alpine base package&lt;br /&gt;
| http://alpinelinux.org&lt;br /&gt;
|-&lt;br /&gt;
| alpine-mirrors&lt;br /&gt;
| Alpine base package&lt;br /&gt;
| http://alpinelinux.org&lt;br /&gt;
|-&lt;br /&gt;
| bkeymaps&lt;br /&gt;
| Binary keymaps for busybox&lt;br /&gt;
| http://dev.alpinelinux.org/alpine/bkeymaps&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&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;
! Description&lt;br /&gt;
! URL&lt;br /&gt;
|-&lt;br /&gt;
| network-extras&lt;br /&gt;
| Meta package to pull in vlan, bonding, bridge and wifi support&lt;br /&gt;
| http://alpinelinux.org&lt;br /&gt;
|-&lt;br /&gt;
| openssl&lt;br /&gt;
| Toolkit for SSL v2/v3 and TLS v1&lt;br /&gt;
| http://openssl.org/&lt;br /&gt;
|-&lt;br /&gt;
| tzdata&lt;br /&gt;
| Timezone data&lt;br /&gt;
| http://www.twinsun.com/tz/tz-link.htm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:ISO]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Arrogance&amp;diff=23570</id>
		<title>User:Arrogance</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Arrogance&amp;diff=23570"/>
		<updated>2023-05-30T04:39:42Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Useful links:&lt;br /&gt;
&lt;br /&gt;
* [[Special:RandomPage]]&lt;br /&gt;
* [[Special:AllPages]]&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Template_talk:Delete&amp;diff=23569</id>
		<title>Template talk:Delete</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Template_talk:Delete&amp;diff=23569"/>
		<updated>2023-05-30T04:04:29Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: Created page with &amp;quot;It might help admins to delete pages better (or others to fix the articles / contest their deletion) if this template included a category. &amp;lt;nowiki&amp;gt;&amp;lt;includeonly&amp;gt;Category:Articles for deletion&amp;lt;/includeonly&amp;gt;&amp;lt;/nowiki&amp;gt;, for example. I&amp;#039;d add it myself, but for some reason it&amp;#039;s been made admin-only.~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It might help admins to delete pages better (or others to fix the articles / contest their deletion) if this template included a category. &amp;lt;nowiki&amp;gt;&amp;lt;includeonly&amp;gt;[[Category:Articles for deletion]]&amp;lt;/includeonly&amp;gt;&amp;lt;/nowiki&amp;gt;, for example. I&#039;d add it myself, but for some reason it&#039;s been made admin-only.[[User:Arrogance|Arrogance]] ([[User talk:Arrogance|talk]]) 04:04, 30 May 2023 (UTC)&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Abuild_and_Helpers&amp;diff=23567</id>
		<title>Abuild and Helpers</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Abuild_and_Helpers&amp;diff=23567"/>
		<updated>2023-05-30T03:49:19Z</updated>

		<summary type="html">&lt;p&gt;Arrogance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The abuild package provides scripts you need when creating packages for Alpine Linux. The abuild package and its friends are installed automatically along with the &amp;lt;tt&amp;gt;alpine-sdk&amp;lt;/tt&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add alpine-sdk}}&lt;br /&gt;
&lt;br /&gt;
The [https://git.alpinelinux.org/cgit/abuild/tree/ git repository] always contains the latest version of the scripts, example-files, and makefiles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building and maintaining packages ==&lt;br /&gt;
&lt;br /&gt;
=== abuild ===&lt;br /&gt;
{{:Include:Abuild}}&lt;br /&gt;
&lt;br /&gt;
=== abuild-rootbld ===&lt;br /&gt;
{{:Include:AbuildRootBld}}&lt;br /&gt;
&lt;br /&gt;
=== abump ===&lt;br /&gt;
{{:Include:Abump}}&lt;br /&gt;
&lt;br /&gt;
=== apkgrel ===&lt;br /&gt;
&amp;lt;!-- Shouldn&#039;t this be apkrel? None of the other packaging tools use &amp;quot;apkg...&amp;quot;. Or perhaps it should be unified with abump? --&amp;gt;&lt;br /&gt;
If you want to bump or reset the pkgrel value of your APKBUILD or test your APKBUILD files, &amp;lt;tt&amp;gt;apkgrel&amp;lt;/tt&amp;gt; can assist you.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;apkgrel -a|-h|-s NUM|-t|-z [-f] FILE...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apkgrel options&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;-a&#039;&#039;&#039;  Add 1 to current pkgrel&lt;br /&gt;
* &#039;&#039;&#039;-f&#039;&#039;&#039;  Force, even if given files are not in proper format&lt;br /&gt;
* &#039;&#039;&#039;-h&#039;&#039;&#039;  Show this help&lt;br /&gt;
* &#039;&#039;&#039;-s&#039;&#039;&#039;  Set pkgrel to NUM&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039;  Only verify that files are in proper format&lt;br /&gt;
* &#039;&#039;&#039;-z&#039;&#039;&#039;  Set pkgrel to 0&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generating new APKBUILDs ==&lt;br /&gt;
&lt;br /&gt;
=== newapkbuild ===&lt;br /&gt;
To create the actual APKBUILD file {{Pkg|newapkbuild}} can serve you a template to start with. It will create a directory with the given package name, place an example/template APKBUILD file in the given directory, and fill some variables if those are provided.&lt;br /&gt;
&lt;br /&gt;
{{:Include:Newapkbuild}}&lt;br /&gt;
&lt;br /&gt;
=== apkbuild-cpan ===&lt;br /&gt;
The [http://www.cpan.org/ Comprehensive Perl Archive Network] (CPAN) provides a large collection of perl software and documentation. &amp;lt;tt&amp;gt;apkbuild-cpan&amp;lt;/tt&amp;gt; helps with the creation of APKBUILD for perl modules from CPAN.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apkbuild-cpan [create &amp;lt;Module::Name&amp;gt; &amp;lt;nowiki&amp;gt;| check | recreate | update | upgrade]&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== apkbuild-pypi ===&lt;br /&gt;
{{:Include:Apkbuild-pypi}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Signing packages and indexes ==&lt;br /&gt;
&lt;br /&gt;
=== abuild-sign ===&lt;br /&gt;
{{:Include:Abuild-sign}}&lt;br /&gt;
&lt;br /&gt;
=== abuild-tar ===&lt;br /&gt;
{{:Include:Abuild-tar}}&lt;br /&gt;
&lt;br /&gt;
=== buildrepo ===&lt;br /&gt;
{{:Include:Buildrepo}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting up the build environment ==&lt;br /&gt;
&lt;br /&gt;
=== abuild-keygen ===&lt;br /&gt;
{{:Include:Abuild-keygen}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ToDo&lt;br /&gt;
=== cmp-apks-iso ===&lt;br /&gt;
&lt;br /&gt;
=== devbuild ===&lt;br /&gt;
&lt;br /&gt;
=== initramfs-init ===&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arrogance</name></author>
	</entry>
</feed>