25 Commits

Author SHA1 Message Date
86c4b1ea18 a 2023-04-03 14:35:49 -05:00
3be325b34d Merge the other swapfile post into References section 2023-04-03 12:42:35 -05:00
ea27c632b5 Add a comment before the sudo command 2023-04-02 17:54:49 -05:00
9e4e72c711 Rename the guide 2023-04-02 17:54:49 -05:00
80ecf66cbe Add instructions for how to delete swapfile 2023-04-02 17:54:48 -05:00
3d69f686d5 Update guide 2023-04-02 17:54:48 -05:00
7315daf89c Add series and tag pages 2023-04-02 17:54:48 -05:00
e942d3ca4f Change bashsession include to an info 2023-04-02 17:54:48 -05:00
a899d617be Remove tutorial heading 2023-04-02 17:54:48 -05:00
5d8afcca7e Add swapfile guide article drafts 2023-04-02 17:54:48 -05:00
5f44c05e57 Hide discord sex hack from home page 2023-04-02 17:51:10 -05:00
0e67adf41c Update bobatheme - CSS cleanup 2023-03-24 08:51:09 -05:00
b4c695aeb4 Update bobatheme
- Remove credit.html partial
- Reorganize summary template files
- Fix margin around post-title
- Remove series position indicator
- :3
2023-03-18 21:39:27 -05:00
cdfcf3c372 Add procursus.social <link> 2023-02-24 22:47:43 -06:00
6d7dfa6c5d Fix <code> font size in comments 2023-02-22 16:41:16 -06:00
ef8dda9657 Replace deprecated set-output with $GITHUB_OUTPUT 2023-02-01 08:29:46 -06:00
f6b27235f3 Use actions/checkout v3 2023-01-31 20:47:00 -06:00
1ce61b8260 Update bobatheme
- Prevent page breaking in some elements when printing
- Use RenderString instead of markdownify in some places
2023-01-27 16:42:58 -06:00
f719cadd1e Update lastmod params that were outdated 2023-01-26 17:12:41 -06:00
43d4f47e29 Update bobatheme
- Add aria labels to share buttons
- Fix table borders between th and td in same line
- Add `link-1` color to light theme too
2023-01-26 16:54:29 -06:00
510e3e9bf9 Fix code block text size for mobile safari 2023-01-24 01:54:42 -06:00
685a9ed8f4 Use relative URL for font files 2023-01-24 01:34:47 -06:00
66fac8058f Make sure to audit drafts as well 2023-01-23 20:33:51 -06:00
e93871c923 Build drafts on pull requests [skip ci] 2023-01-23 20:28:23 -06:00
07f586e5b0 Add a markdown snippet to explain bashsession [skip ci]
Will be used by a future post
2023-01-23 20:25:04 -06:00
18 changed files with 366 additions and 24 deletions

View File

@ -2,8 +2,6 @@ name: Audit
on:
push:
branches:
- master
pull_request:
jobs:
@ -18,7 +16,7 @@ jobs:
- name: Checkout (pull_request)
if: github.event.pull_request
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
@ -26,7 +24,7 @@ jobs:
- name: Checkout (push)
if: github.event_name == 'push'
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
@ -34,10 +32,10 @@ jobs:
- name: Build previous commit
run: |
hugo --printI18nWarnings --printPathWarnings --baseURL https://localhost -d old/
hugo --buildDrafts --printI18nWarnings --printPathWarnings --baseURL https://localhost -d old/
- name: Checkout current commit
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
@ -45,7 +43,7 @@ jobs:
- name: Build current commit
run: |
hugo --printI18nWarnings --printPathWarnings --baseURL https://localhost
hugo --buildDrafts --printI18nWarnings --printPathWarnings --baseURL https://localhost
cp -r public/ new/
# copy, so that public/ stays, it will be needed for Caddy to serve
@ -65,10 +63,10 @@ jobs:
DOMAIN: localhost
run: |
urls="$(./changed-urls.sh)"
urls="${urls//'%'/'%25'}"
urls="${urls//$'\n'/'%0A'}"
urls="${urls//$'\r'/'%0D'}"
echo "::set-output name=urls::$urls"
echo "urls<<EOM" >> $GITHUB_OUTPUT
echo "$urls" >> $GITHUB_OUTPUT
echo "EOM" >> $GITHUB_OUTPUT
echo -e "CHANGED:\n$urls"
- name: Install Caddy
if: "${{ steps.changed_urls.outputs.urls != '' }}"
@ -101,7 +99,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
@ -116,7 +114,7 @@ jobs:
- name: Build
run: |
HUGO_MINIFY_TDEWOLFF_HTML_KEEPCOMMENTS=true HUGO_ENABLEMISSINGTRANSLATIONPLACEHOLDERS=true hugo --printI18nWarnings --printPathWarnings
HUGO_MINIFY_TDEWOLFF_HTML_KEEPCOMMENTS=true HUGO_ENABLEMISSINGTRANSLATIONPLACEHOLDERS=true hugo --buildDrafts --printI18nWarnings --printPathWarnings
# For the following steps, see
# https://discourse.gohugo.io/t/audit-your-published-site-for-problems/35184

View File

@ -14,7 +14,7 @@ jobs:
url: https://bbaovanc.com
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0

View File

@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
@ -36,7 +36,7 @@ jobs:
extended: true
- name: Build
run: hugo --printI18nWarnings --printPathWarnings --baseURL "https://demo.bbaovanc.com/pull_request/${{ github.event.number }}"
run: hugo --printI18nWarnings --printPathWarnings --baseURL "https://demo.bbaovanc.com/pull_request/${{ github.event.number }}" --buildDrafts
- name: Compress
run: |

View File

@ -46,7 +46,8 @@ a.isso-author:hover,
border: none;
padding: 2px 4px;
border-radius: 5px;
font-size: 100%;
/* thanks isso.css for setting this to 85% for whatever reason */
font-size: 0.75em;
}
.isso-input-wrapper input,

View File

@ -2,7 +2,7 @@
title: Using GitHub Actions to audit my website with Google Chrome Lighthouse
date: 2022-05-07T00:54:11-05:00
lastmod: 2022-05-07T00:54:11-05:00
lastmod: 2022-05-08T16:16:02-05:00
toc: true
comments: true

View File

@ -2,7 +2,7 @@
title: Newsletter for my blog posts
date: 2022-04-30T01:00:14-05:00
lastmod: 2022-04-30T01:00:14-05:00
lastmod: 2022-05-23T02:17:47-05:00
toc: true
comments: true

View File

@ -2,7 +2,7 @@
title: Caddy is literally the best webserver
date: 2021-11-13T00:43:35-06:00
lastmod: 2022-05-02T00:54:43-05:00
lastmod: 2023-01-16T20:57:00-06:00
toc: true
comments: true

View File

@ -2,7 +2,7 @@
title: How the "Discord sex" (`s/e/x`) hack works
date: 2022-05-11T21:11:17-05:00
lastmod: 2022-05-11T21:11:17-05:00
lastmod: 2022-09-24T14:56:05-05:00
toc: true
comments: true
@ -17,6 +17,10 @@ tags:
- discord-tricks
- sed
_build:
# won't appear on main Home page, but will in Blog
list: local
# this will be shown for the article in list pages and in the page metadata
# it can be either an image or video (this might change in the future, however)
resources:

View File

@ -2,7 +2,7 @@
title: How to put `(edited)` in the middle of a message in Discord
date: 2021-03-25T18:48:34-05:00
lastmod: 2022-04-08T23:29:41-05:00
lastmod: 2022-12-06T19:59:22-06:00
toc: true
comments: true

View File

@ -0,0 +1,270 @@
---
title: How to create (or remove) a swapfile on Linux
date: 2023-01-23T20:26:18-06:00
lastmod: 2023-01-23T20:26:18-06:00
toc: true
comments: true
draft: true
authors:
- bbaovanc
categories:
- guides
- linux
- tips-and-tricks
tags:
- linux-swap
- swapfile
series:
- swapfile-guide
# this will be shown for the article in list pages and in the page metadata
# it can be either an image or video (this might change in the future, however)
resources:
- name: feature
src: something.webp
title: Some image (image format can be anything; webp is just an example)
---
This is a step-by-step tutorial on how to create or remove a swapfile on a Linux
machine, and whether you should create swap space in the first place.
Also included is the most correct `fstab` entry: most articles get this "wrong"
(but it doesn't actually matter).
<!--more-->
## Should you use swap?
A common misconception is that adding swap to your system can reduce
performance. However, even if you aren't running out of RAM, it can still be
beneficial to add swap.
See these points according to [an article by Hayden James][always-add-swap]:
> - Even if there is still available RAM, the Linux Kernel will **move memory
> pages that are hardly ever used** into swap space.
>
> - Its better to swap out memory pages that have been inactive for a while,
> **keeping often-used data in cache**, and this should happen when the server
> is most idle, which is the aim of the Kernel.
>
> - Avoid setting your swap space too large if it will result in prolonging
> performance issues, outages, or your response time (without proper
> monitoring/alerts).
[always-add-swap]: https://haydenjames.io/linux-performance-almost-always-add-swap-space/
### Should you use a swap file or partition?
Swap partitions should be preferred because swapfiles tend to be slower and
slightly more complex to set up, especially if hibernating. A swapfile might be
preferred due to its flexibility (ease to resize), but if you use
[LVM][lvm-archwiki] then you can easily resize the swap partition anyways.
[lvm-archwiki]: https://wiki.archlinux.org/title/LVM
## Tutorial
{{< include path="include/bashsession.md" markdown=true >}}
### Step 1: Create the file
The first step is to allocate the file.
```bashsession
# dd if=/dev/zero of=/swapfile bs=1M count=[size in MiB] status=progress
```
Replace `[size in MiB]` with the size of your swapfile in Mebibytes (MiB). You
can use [this online converter](https://www.convertunits.com/from/GiB/to/MiB) to
convert from Gibibytes (GiB, often confused with Gigabytes, but that's a
misconception for another time) to MiB, which you can put in the command.
Or you can look at this table for common sizes:
{{< table >}}
| GiB | MiB |
|-----|-------------|
| 1 | count=1024 |
| 2 | count=2048 |
| 3 | count=3072 |
| 4 | count=4096 |
| 8 | count=8192 |
| 16 | count=16384 |
{{< /table >}}
If you aren't sure how big your swapfile should be, take a look at [Table 15.1
on this Red Hat documentation page][redhat-swap-table]. Remember that if your
first swapfile isn't large enough, you can create another one.
[redhat-swap-table]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-swapspace#tb-recommended-system-swap-space
On my computer I have 32 GiB of RAM and a 16 GiB swap partition, rather than
swapfile, because I can flexibly expand the swap partition using
[LVM][lvm-archwiki].
{{< aside example >}}
To create a swapfile 4 GiB in size, you would run:
```bashsession
# dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 0.960183 s, 4.5 GB/s
```
{{< /aside >}}
### Step 2: Change swapfile permissions
The swapfile should only be readable by the system (`root` user). Run this
command to change it:
```bashsession
# chmod 600 /swapfile
```
### Step 3: Format the swapfile
Use the `mkswap` command to format the file to be used as swap (basically just
add a header to identify it):
```bashsession
# mkswap /swapfile
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=a0b87eca-b951-4344-be2d-020d77cdef48
```
### Step 4: Create an entry in `/etc/fstab`
An entry needs to be added to `/etc/fstab` for the swapfile to be enabled during
bootup. Open `/etc/fstab` in a text editor, and add this line to the end (add
spaces to line up with other entries if you want, whitespace is ignored):
```text
/swapfile none swap sw 0 0
```
{{< aside note >}}
Above, I have filled the "options" field with `sw`. This is actually a result of
[cargo culting](https://en.wiktionary.org/wiki/cargo_culting). On Linux, the
`sw` option (and the [options specified by the commonly used
`defaults`][fstab-defaults-man]) [isn't valid for `swapon` and is
ignored][swapon-options-source]. However, the field does need to be filled out
with something, so feel free to put something funny (do let me know in the
comments if this somehow breaks something though).
[fstab-defaults-man]: https://man.archlinux.org/man/fstab.5#The_fourth_field_(%3Ci%3Efs_mntops%3C/i%3E).
[swapon-options-source]: https://github.com/util-linux/util-linux/blob/2ea397239683270a0fc8cd3b72ed5457f52dbda8/sys-utils/swapon.c#L699
If you're curious, this is my `fstab` entry (`UUID` is because I use a swap
partition, rather than swapfile):
```text
# /dev/mapper/bobavg0-swap
UUID=4f7c3ae8-839b-4474-b8a5-96bd78db06f8 none swap bobaswap 0 0
```
{{< /aside >}}
### Step 5: Enable the swapfile
Adding the `fstab` entry won't enable the swapfile until a reboot. To enable it
now, use the `swapon` command.
```bashsession
# swapon /swapfile
```
### Finally: check the swap status
Use `swapon` and `free` to verify that your new swapfile has been added:
```bashsession
$ swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 4G 0B -2
$ free -h
total used free shared buff/cache available
Mem: 31Gi 3.6Gi 20Gi 233Mi 6.9Gi 26Gi
Swap: 4.0Gi 0B 4.0Gi
```
{{< aside note >}}
If you get an error saying that the `swapon` command was not found, try running
it as `root` (using `sudo`). On Debian-based distributions the `swapon` command
is not available to regular users.
```bashsession
$ swapon --show
bash: swapon: command not found
# swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 4G 0B -2
```
{{< /aside >}}
## Removing a swapfile
{{< aside warning >}}
Be careful that the swapfile isn't being highly used because once you run
`swapoff`, it will dump the entire contents back into RAM and may cause you to
run out of memory.
{{< /aside >}}
### Step 1: Disable/unload the swapfile
```bashsession
$ swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 4G 0B -2
$ # the path to the swapfile I want to remove is `/swapfile`
# swapoff /swapfile
```
### Step 2: Remove the entry from `fstab`
Open `/etc/fstab` in a text editor and find the line matching the swapfile you
want to remove, and delete it. For example:
```text
/swapfile none swap sw 0 0
```
### Step 3: Delete the actual file
```bashsession
# rm /swapfile
```
## References
### Use `dd` instead of `fallocate`
See ["Files with holes" under the man page][swapon-holes-man].
[swapon-holes-man]: https://man.archlinux.org/man/core/util-linux/swapon.8.en#Files_with_holes
### The options field in fstab
On Linux, `sw` doesn't mean anything for `swapon`, so it gets ignored. See:
- [StackExchange answer 1](https://unix.stackexchange.com/a/365961/525130)
- [StackExchange answer 2](https://unix.stackexchange.com/a/365954/525130)
- [`parse_options` in the `swapon` source code](https://github.com/util-linux/util-linux/blob/2ea397239683270a0fc8cd3b72ed5457f52dbda8/sys-utils/swapon.c#L699)

View File

@ -2,6 +2,7 @@
title: Text substitution in Discord using `sed`
date: 2021-03-25T18:48:15-05:00
lastmod: 2021-10-19T14:02:08-05:00
toc: false
comments: true

View File

@ -2,7 +2,7 @@
title: Youtube URL structures you should know
date: 2021-10-30T21:20:38-05:00
lastmod: 2022-05-02T00:59:25-05:00
lastmod: 2023-01-16T21:04:09-06:00
toc: true
comments: true

View File

@ -0,0 +1,10 @@
---
title: Swapfile Guide
---
A tutorial on how to set up a swapfile on Linux, but with some more depth than
just a step-by-step.
<!--more-->

View File

@ -0,0 +1,13 @@
---
title: Swap (Linux)
---
Swap space is storage on your drive that can be used as virtual memory when the
system is running low on physical memory (RAM). It is also used when hibernating
(suspend to disk).
More information: https://haydenjames.io/linux-performance-almost-always-add-swap-space/
<!--more-->

View File

@ -0,0 +1,11 @@
---
title: swapfile
---
A swapfile is a file that gives your system more [swap]({{< relref
"../linux-swap" >}}) space, which is used when the system is running low on RAM,
or when hibernating.
<!--more-->

32
include/bashsession.md Normal file
View File

@ -0,0 +1,32 @@
{{< aside info >}}
Commands in this article are prefixed them with a prompt symbol (either `$` or
`#`) which is not part of the command. Lines with no prompt symbol are output
from the command.
The `#` means to run it as `root` (usually using `sudo`):
```bashsession
$ ls /var/lib/docker
ls: cannot open directory '/var/lib/docker': Permission denied
$ # this is a comment
$ # regular users aren't allowed to view /var/lib/docker, we need root
# ls /var/lib/docker
builder containerd image overlay2 runtimes tmp volumes
buildkit containers network plugins swarm trust
$ # we can do the same thing using sudo
$ sudo ls /var/lib/docker
[sudo] password for bbaovanc:
builder containerd image overlay2 runtimes tmp volumes
buildkit containers network plugins swarm trust
```
If you want to copy just the commands (for example: pasting them into your own
terminal to run them all), press the [Copy](javascript:void(0)) button in the top right of the code
block.
{{< /aside >}}

View File

@ -2,3 +2,5 @@
<script defer data-domain="bbaovanc.com" src="https://plausible.bbaovanc.com/js/bobalytics.outbound-links.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
{{ end }}
<link rel="me" href="https://procursus.social/@bbaovanc" />