aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2022-10-22-alpine-linux.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/blog/2022-10-22-alpine-linux.md')
-rw-r--r--content/blog/2022-10-22-alpine-linux.md206
1 files changed, 96 insertions, 110 deletions
diff --git a/content/blog/2022-10-22-alpine-linux.md b/content/blog/2022-10-22-alpine-linux.md
index 2bc43cd..073d584 100644
--- a/content/blog/2022-10-22-alpine-linux.md
+++ b/content/blog/2022-10-22-alpine-linux.md
@@ -7,80 +7,73 @@ draft = false
# Alpine Linux
-[Alpine Linux](https://alpinelinux.org) is a very small distro, built on
-musl libc and busybox. It uses ash as the default shell, OpenRC as the
-init system, and apk as the package manager. According to their website,
-an Alpine container \"requires no more than 8 MB and a minimal
-installation to disk requires around 130 MB of storage.\" An actual bare
-metal machine is recommended to have 100 MB of RAM and 0-700 MB of
-storage space.
-
-Historically, I\'ve used Ubuntu\'s minimal installation image as my
-server OS for the last five years. Ubuntu worked well and helped as my
-original server contained an nVidia GPU and no onboard graphics, so
-quite a few distros won\'t boot or install without a lot of tinkering.
-
-Alpine has given me a huge increase in performance across my Docker apps
-and Nginx websites. CPU load for the new server I\'m using to test
-Alpine hovers around 0-5% on average with an Intel(R) Core(TM) i3-6100
-CPU @ 3.70GHz.
-
-The only services I haven\'t moved over to Alpine are Plex Media Server
-and Syncthing, which may increase CPU load quite a bit depending on how
-many streams are running.
+[Alpine Linux](https://alpinelinux.org) is a very small distro, built on musl
+libc and busybox. It uses ash as the default shell, OpenRC as the init system,
+and apk as the package manager. According to their website, an Alpine container
+"requires no more than 8 MB and a minimal installation to disk requires around
+130 MB of storage." An actual bare metal machine is recommended to have 100 MB
+of RAM and 0-700 MB of storage space.
+
+Historically, I've used Ubuntu's minimal installation image as my server OS
+for the last five years. Ubuntu worked well and helped as my original server
+contained an nVidia GPU and no onboard graphics, so quite a few distros won't
+boot or install without a lot of tinkering.
+
+Alpine has given me a huge increase in performance across my Docker apps and
+Nginx websites. CPU load for the new server I'm using to test Alpine hovers
+around 0-5% on average with an Intel(R) Core(TM) i3-6100 CPU @ 3.70GHz.
+
+The only services I haven't moved over to Alpine are Plex Media Server and
+Syncthing, which may increase CPU load quite a bit depending on how many streams
+are running.
## Installation
In terms of installation, Alpine has an incredibly useful
-[wiki](https://wiki.alpinelinux.org/wiki/Installation) that will guide a
-user throughout the installation and post-installation processes, as
-well as various other articles and guides.
+[wiki](https://wiki.alpinelinux.org/wiki/Installation) that will guide a user
+throughout the installation and post-installation processes, as well as various
+other articles and guides.
To install Alpine, find an appropriate [image to
-download](https://alpinelinux.org/downloads/) and flash it to a USB
-using software such as Rufus or Etcher. I opted to use the Standard
-image for my x86~64~ architecture.
+download](https://alpinelinux.org/downloads/) and flash it to a USB using
+software such as Rufus or Etcher. I opted to use the Standard image for my
+x86~64~ architecture.
-Once the USB is ready, plug it into the machine and reboot. Note that
-you may have to use a key such as `Esc` or `F1-12`
-to access the boot menu. The Alpine Linux terminal will load quickly and
-for a login.
+Once the USB is ready, plug it into the machine and reboot. Note that you may
+have to use a key such as `Esc` or `F1-12` to access the boot menu. The Alpine
+Linux terminal will load quickly and for a login.
-To log in to the installation image, use the `root` account;
-there is no password. Once logged-in, execute the setup command:
+To log in to the installation image, use the `root` account; there is no
+password. Once logged-in, execute the setup command:
```sh
setup-alpine
```
-The setup script will ask a series of questions to configure the system.
-Be sure to answer carefully or else you may have to re-configure the
-system after boot.
-
-- Keyboard Layout (Local keyboard language and usage mode, e.g., us
- and variant of us-nodeadkeys.)
-- Hostname (The name for the computer.)
-- Network (For example, automatic IP address discovery with the
- \"DHCP\" protocol.)
-- DNS Servers (Domain Name Servers to query. For privacy reasons, it
- is NOT recommended to route every local request to servers like
- Google\'s 8.8.8.8 .)
-- Timezone
-- Proxy (Proxy server to use for accessing the web. Use \"none\" for
- direct connections to the internet.)
-- Mirror (From where to download packages. Choose the organization you
- trust giving your usage patterns to.)
-- SSH (Secure SHell remote access server. \"Openssh\" is part of the
- default install image. Use \"none\" to disable remote login, e.g. on
- laptops.)
-- NTP (Network Time Protocol client used for keeping the system clock
- in sync with a time-server. Package \"chrony\" is part of the
- default install image.)
-- Disk Mode (Select between diskless (disk=\"none\"), \"data\" or
- \"sys\", as described above.)
-
-Once the setup script is finished, be sure to reboot the machine and
-remove the USB device.
+The setup script will ask a series of questions to configure the system. Be sure
+to answer carefully or else you may have to re-configure the system after boot.
+
+- Keyboard Layout (Local keyboard language and usage mode, e.g., us and variant
+ of us-nodeadkeys.)
+- Hostname (The name for the computer.)
+- Network (For example, automatic IP address discovery with the "DHCP"
+ protocol.)
+- DNS Servers (Domain Name Servers to query. For privacy reasons, it is NOT
+ recommended to route every local request to servers like Google's 8.8.8.8.)
+- Timezone
+- Proxy (Proxy server to use for accessing the web. Use "none" for direct
+ connections to the internet.)
+- Mirror (From where to download packages. Choose the organization you trust
+ giving your usage patterns to.)
+- SSH (Secure SHell remote access server. "Openssh" is part of the default
+ install image. Use "none" to disable remote login, e.g. on laptops.)
+- NTP (Network Time Protocol client used for keeping the system clock in sync
+ with a time-server. Package "chrony" is part of the default install image.)
+- Disk Mode (Select between diskless (disk="none"), "data" or "sys", as
+ described above.)
+
+Once the setup script is finished, be sure to reboot the machine and remove the
+USB device.
```sh
reboot
@@ -89,14 +82,12 @@ reboot
## Post-Installation
There are many things you can do once your Alpine Linux system is up and
-running, and it largely depends on what you\'ll use the machine for.
-I\'m going to walk through my personal post-installation setup for my
-web server.
+running, and it largely depends on what you'll use the machine for. I'm going
+to walk through my personal post-installation setup for my web server.
1. Upgrade the System
- First, login as `root` in order to update and upgrade the
- system:
+ First, login as `root` in order to update and upgrade the system:
```sh
apk -U upgrade
@@ -104,9 +95,9 @@ web server.
2. Adding a User
- I needed to add a user so that I don\'t need to log in as root. Note
- that if you\'re used to using the `sudo` command, you
- will now need to use the `doas` command on Alpine Linux.
+ I needed to add a user so that I don't need to log in as root. Note that if
+ you're used to using the `sudo` command, you will now need to use the
+ `doas` command on Alpine Linux.
```sh
apk add doas
@@ -122,15 +113,14 @@ web server.
3. Enable Community Packages
- In order to install more common packages that aren\'t found in the
- `main` repository, you will need to enable the
- `community` repository:
+ In order to install more common packages that aren't found in the `main`
+ repository, you will need to enable the `community` repository:
```sh
doas nano /etc/apk/repositories
```
- Uncomment the community line for whichever version of Alpine you\'re
+ Uncomment the community line for whichever version of Alpine you're
running:
```sh
@@ -144,9 +134,9 @@ web server.
4. Install Required Packages
- Now that the community packages are available, you can install any
- packages you need. In my case, I installed the web server packages I
- need for my services:
+ Now that the community packages are available, you can install any packages
+ you need. In my case, I installed the web server packages I need for my
+ services:
```sh
doas apk add nano nginx docker docker-compose ufw
@@ -154,15 +144,15 @@ web server.
5. SSH
- If you didn\'t install OpenSSH as part of the installation, you can
- do so now:
+ If you didn't install OpenSSH as part of the installation, you can do so
+ now:
```sh
doas apk add openssh
```
- Next, either create a new key or copy your SSH key to the server
- from your current machines:
+ Next, either create a new key or copy your SSH key to the server from your
+ current machines:
```sh
# Create a new key
@@ -178,9 +168,9 @@ web server.
6. Firewall
- Lastly, I installed `ufw` above as my firewall. To set
- up, default to deny incoming and allow outgoing connections. Then
- selectively allow other ports or apps as needed.
+ Lastly, I installed `ufw` above as my firewall. To set up, default to deny
+ incoming and allow outgoing connections. Then selectively allow other ports
+ or apps as needed.
```sh
doas ufw default deny incoming
@@ -192,8 +182,8 @@ web server.
7. Change Hostname
- If you don\'t like the hostname set during installation, you just
- need to edit two files. First, edit the simple hostname file:
+ If you don't like the hostname set during installation, you just need to
+ edit two files. First, edit the simple hostname file:
```sh
doas nano /etc/hostname
@@ -216,8 +206,8 @@ web server.
# Nginx Web Server
-To set up my web server, I simply created the `www` user and
-created the necessary files.
+To set up my web server, I simply created the `www` user and created the
+necessary files.
```sh
doas adduser -D -g 'www' www
@@ -227,17 +217,17 @@ doas chown -R www:www /var/lib/nginx/
doas chown -R www:www /www
```
-If you\'re running a simple webroot, you can alter the main
-`nginx.conf` file. Otherwise, you can drop configuration
-files in the following directory. You don\'t need to enable or symlink
-the configuration file like you do in other systems.
+If you're running a simple webroot, you can alter the main `nginx.conf` file.
+Otherwise, you can drop configuration files in the following directory. You
+don't need to enable or symlink the configuration file like you do in other
+systems.
```sh
doas nano /etc/nginx/http.d/example_website.conf
```
-Once the configuration is set and pointed at the `/www`
-directory to serve files, enable the Nginx service:
+Once the configuration is set and pointed at the `/www` directory to serve
+files, enable the Nginx service:
```sh
# Note that 'default' must be included or Nginx will not start on boot
@@ -246,19 +236,16 @@ doas rc-update add nginx default
# Docker Containers
-Docker works exactly the same as other systems. Either execute a
-`docker run` command or create a
-`docker-compose.yml` file and do
-`docker-compose up -d`.
+Docker works exactly the same as other systems. Either execute a `docker run`
+command or create a `docker-compose.yml` file and do `docker-compose up -d`.
# Git Server
-I went in-depth on how to self-host a git server in another post:
-[Self-Hosting a Personal Git Server](../git-server/).
+I went in-depth on how to self-host a git server in another post: [Self-Hosting
+a Personal Git Server](../git-server/).
-However, there are a few differences with Alpine. First note that in
-order to change the `git` user\'s shell, you must do a few
-things a little different:
+However, there are a few differences with Alpine. First note that in order to
+change the `git` user's shell, you must do a few things a little different:
```sh
doas apk add libuser
@@ -270,12 +257,11 @@ doas lchsh git
# Thoughts on Alpine
-So far, I love Alpine Linux. I have no complaints about anything at this
-point, but I\'m not completely finished with the migration yet. Once
-I\'m able to upgrade my hardware to a rack-mounted server, I will
-migrate Plex and Syncthing over to Alpine as well - possibly putting
-Plex into a container or VM.
+So far, I love Alpine Linux. I have no complaints about anything at this point,
+but I'm not completely finished with the migration yet. Once I'm able to
+upgrade my hardware to a rack-mounted server, I will migrate Plex and Syncthing
+over to Alpine as well - possibly putting Plex into a container or VM.
-The performance is stellar, the `apk` package manager is
-seamless, and system administration tasks are effortless. My only regret
-is that I didn\'t install Alpine sooner.
+The performance is stellar, the `apk` package manager is seamless, and system
+administration tasks are effortless. My only regret is that I didn't install
+Alpine sooner.