From dac703dda941e1fd4ad0f6c0934a1f937fe5d45f Mon Sep 17 00:00:00 2001 From: Steven Baltakatei Sandoval <baltakatei@gmail.com> Date: Tue, 30 Jun 2020 19:46:30 +0000 Subject: [PATCH 1/1] doc(loc/README): Show how to disable swap file Disabling swap file is important for reducing probability that unencrypted data is written to disk. --- doc/location/README.html | 182 ++++++++++++++++++++++----------------- doc/location/README.odt | Bin 16124 -> 16345 bytes doc/location/README.org | 45 ++++++---- 3 files changed, 132 insertions(+), 95 deletions(-) diff --git a/doc/location/README.html b/doc/location/README.html index 11a6516..69a4789 100644 --- a/doc/location/README.html +++ b/doc/location/README.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> -<!-- 2020-06-30 Tue 17:14 --> +<!-- 2020-06-30 Tue 19:45 --> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Ninfacyzga-01 Manual</title> @@ -234,24 +234,24 @@ for the JavaScript code in this tag. <h2>Table of Contents</h2> <div id="text-table-of-contents"> <ul> -<li><a href="#org9fe5754">1. Location Logging</a> +<li><a href="#org4ab28d5">1. Location Logging</a> <ul> -<li><a href="#org6b1a17d">1.1. Narrative</a></li> -<li><a href="#org57c152a">1.2. Description</a> +<li><a href="#org3a44301">1.1. Narrative</a></li> +<li><a href="#orgeb3a61f">1.2. Description</a> <ul> -<li><a href="#orge971d48">1.2.1. Hardware</a></li> -<li><a href="#orgd6ea21a">1.2.2. Software</a></li> -<li><a href="#org2c5d288">1.2.3. Output</a></li> +<li><a href="#org68434d8">1.2.1. Hardware</a></li> +<li><a href="#org6bf1f28">1.2.2. Software</a></li> +<li><a href="#orga640ec2">1.2.3. Output</a></li> </ul> </li> -<li><a href="#org2c59433">1.3. Operating Procedures</a> +<li><a href="#org78712e3">1.3. Operating Procedures</a> <ul> -<li><a href="#org6fcdbad">1.3.1. Initial Startup</a></li> -<li><a href="#org15d1661">1.3.2. Normal Startup</a></li> -<li><a href="#org989e70e">1.3.3. Normal Operation</a></li> -<li><a href="#orged87647">1.3.4. Normal Shutdown</a></li> -<li><a href="#org5d4c9cd">1.3.5. Unscheduled Shutdown</a></li> -<li><a href="#org00f1b85">1.3.6. End of Life Disposal</a></li> +<li><a href="#orgcc76a4c">1.3.1. Initial Startup</a></li> +<li><a href="#org8fbf566">1.3.2. Normal Startup</a></li> +<li><a href="#orgbc8af37">1.3.3. Normal Operation</a></li> +<li><a href="#org46c0af5">1.3.4. Normal Shutdown</a></li> +<li><a href="#org662e1e8">1.3.5. Unscheduled Shutdown</a></li> +<li><a href="#org70e088c">1.3.6. End of Life Disposal</a></li> </ul> </li> </ul> @@ -259,17 +259,17 @@ for the JavaScript code in this tag. </ul> </div> </div> -<div id="outline-container-org9fe5754" class="outline-2"> -<h2 id="org9fe5754"><span class="section-number-2">1</span> Location Logging</h2> +<div id="outline-container-org4ab28d5" class="outline-2"> +<h2 id="org4ab28d5"><span class="section-number-2">1</span> Location Logging</h2> <div class="outline-text-2" id="text-1"> <p> This document was created by Steven Baltakatei Sandoval on <code>2020-06-29T12:14Z</code> under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons BY-SA 4.0 license</a>. It -was updated by Steven Baltakatei Sandoval on <code>2020-06-30T17:13Z</code> +was updated by Steven Baltakatei Sandoval on <code>2020-06-30T19:44Z</code> </p> </div> -<div id="outline-container-org6b1a17d" class="outline-3"> -<h3 id="org6b1a17d"><span class="section-number-3">1.1</span> Narrative</h3> +<div id="outline-container-org3a44301" class="outline-3"> +<h3 id="org3a44301"><span class="section-number-3">1.1</span> Narrative</h3> <div class="outline-text-3" id="text-1-1"> <p> Ninfacyzga-01 records (logs) its position in time and space using a @@ -282,23 +282,23 @@ before being processed and written to disk. </p> </div> </div> -<div id="outline-container-org57c152a" class="outline-3"> -<h3 id="org57c152a"><span class="section-number-3">1.2</span> Description</h3> +<div id="outline-container-orgeb3a61f" class="outline-3"> +<h3 id="orgeb3a61f"><span class="section-number-3">1.2</span> Description</h3> <div class="outline-text-3" id="text-1-2"> </div> -<div id="outline-container-orge971d48" class="outline-4"> -<h4 id="orge971d48"><span class="section-number-4">1.2.1</span> Hardware</h4> +<div id="outline-container-org68434d8" class="outline-4"> +<h4 id="org68434d8"><span class="section-number-4">1.2.1</span> Hardware</h4> <div class="outline-text-4" id="text-1-2-1"> </div> <ol class="org-ol"> -<li><a id="org21a0c6c"></a>Raspberry Pi Zero W<br /> +<li><a id="org3fcab7d"></a>Raspberry Pi Zero W<br /> <div class="outline-text-5" id="text-1-2-1-1"> <p> See the <a href="https://www.raspberrypi.org/pi-zero-w/">OEM</a> webpage for this product. </p> </div> </li> -<li><a id="org002698e"></a>PiZ UpTime 2.0<br /> +<li><a id="org4a38c06"></a>PiZ UpTime 2.0<br /> <div class="outline-text-5" id="text-1-2-1-2"> <p> See the <a href="https://alchemy-power.com/piz-uptime-2-0/">OEM</a> webpage for this product. @@ -307,8 +307,8 @@ See the <a href="https://alchemy-power.com/piz-uptime-2-0/">OEM</a> webpage for </li> </ol> </div> -<div id="outline-container-orgd6ea21a" class="outline-4"> -<h4 id="orgd6ea21a"><span class="section-number-4">1.2.2</span> Software</h4> +<div id="outline-container-org6bf1f28" class="outline-4"> +<h4 id="org6bf1f28"><span class="section-number-4">1.2.2</span> Software</h4> <div class="outline-text-4" id="text-1-2-2"> <p> <code>bkgpslog</code> : The bash script that performs the location data @@ -349,7 +349,7 @@ should be copied to <code>$HOME/.local/bin</code>. </div> <ol class="org-ol"> -<li><a id="org3d64ae8"></a>Narrative<br /> +<li><a id="org33a99e7"></a>Narrative<br /> <div class="outline-text-5" id="text-1-2-2-1"> <p> <code>bkgpslog</code> populates a 60-second buffer with NMEA data from <code>gpsd</code> via @@ -362,28 +362,28 @@ encrypted with <code>age</code>, and then written to disk. </ol> </div> -<div id="outline-container-org2c5d288" class="outline-4"> -<h4 id="org2c5d288"><span class="section-number-4">1.2.3</span> Output</h4> +<div id="outline-container-orga640ec2" class="outline-4"> +<h4 id="orga640ec2"><span class="section-number-4">1.2.3</span> Output</h4> <div class="outline-text-4" id="text-1-2-3"> </div> <ol class="org-ol"> -<li><a id="orgaf12e62"></a>File Formats<br /> +<li><a id="orgbe90ee3"></a>File Formats<br /> <ol class="org-ol"> -<li><a id="org8576f09"></a>NMEA<br /> +<li><a id="orga69e180"></a>NMEA<br /> <div class="outline-text-6" id="text-1-2-3-1-1"> <p> See the <a href="https://en.wikipedia.org/wiki/NMEA_0183">Wikipedia page</a> for this. </p> </div> </li> -<li><a id="orge0c91b6"></a>GPX<br /> +<li><a id="org03fca13"></a>GPX<br /> <div class="outline-text-6" id="text-1-2-3-1-2"> <p> See the <a href="https://en.wikipedia.org/wiki/GPS_Exchange_Format">Wikipedia page</a> for this. <a href="http://wiki.gis.com/wiki/index.php/WGS84">WGS84</a> is the datum used. </p> </div> </li> -<li><a id="org25abef8"></a>KML<br /> +<li><a id="org9469dda"></a>KML<br /> <div class="outline-text-6" id="text-1-2-3-1-3"> <p> See the <a href="https://en.wikipedia.org/wiki/Keyhole_Markup_Language">Wikipedia page</a> for this. <a href="http://wiki.gis.com/wiki/index.php/WGS84">WGS84</a> is the datum used. @@ -392,7 +392,7 @@ See the <a href="https://en.wikipedia.org/wiki/Keyhole_Markup_Language">Wikipedi </li> </ol> </li> -<li><a id="org67f375b"></a>Encryption Method<br /> +<li><a id="org4923cfc"></a>Encryption Method<br /> <div class="outline-text-5" id="text-1-2-3-2"> <p> Files produced by the bkgpslog script are encrypted against a set of @@ -421,7 +421,7 @@ Help information for <code>age</code> is available by running <code>$ age --help </p> </div> <ol class="org-ol"> -<li><a id="org4ff51de"></a>Encryption Commands<br /> +<li><a id="org5f006f6"></a>Encryption Commands<br /> <div class="outline-text-6" id="text-1-2-3-2-1"> <p> Files may be encrypted to several recipients using a command similar to: @@ -442,7 +442,7 @@ bech32-formatted public key strings. </li> -<li><a id="org4a3cc4d"></a>Decryption Commands<br /> +<li><a id="orgd0d1b14"></a>Decryption Commands<br /> <div class="outline-text-6" id="text-1-2-3-2-2"> <p> Files may be decrypted using a command similar to: @@ -462,12 +462,12 @@ The version of <code>age</code> used to perform the encryption </ol> </div> </div> -<div id="outline-container-org2c59433" class="outline-3"> -<h3 id="org2c59433"><span class="section-number-3">1.3</span> Operating Procedures</h3> +<div id="outline-container-org78712e3" class="outline-3"> +<h3 id="org78712e3"><span class="section-number-3">1.3</span> Operating Procedures</h3> <div class="outline-text-3" id="text-1-3"> </div> -<div id="outline-container-org6fcdbad" class="outline-4"> -<h4 id="org6fcdbad"><span class="section-number-4">1.3.1</span> Initial Startup</h4> +<div id="outline-container-orgcc76a4c" class="outline-4"> +<h4 id="orgcc76a4c"><span class="section-number-4">1.3.1</span> Initial Startup</h4> <div class="outline-text-4" id="text-1-3-1"> <p> See OEM (Ozzmaker) <a href="https://ozzmaker.com/berrygps-berrygps-imu-quick-start-guide/">quickstart guide for the BerryGPS-IMU</a>. @@ -475,7 +475,7 @@ See OEM (Ozzmaker) <a href="https://ozzmaker.com/berrygps-berrygps-imu-quick-sta </div> <ol class="org-ol"> -<li><a id="org407a2c4"></a>Physical Setup<br /> +<li><a id="orgae43b4b"></a>Physical Setup<br /> <div class="outline-text-5" id="text-1-3-1-1"> <p> BerryGPS-IMU must be electrically connected to the correct pins on the @@ -490,9 +490,9 @@ possible. </div> </li> -<li><a id="org5d08a29"></a>Software Setup<br /> +<li><a id="orgb3c2fc2"></a>Software Setup<br /> <ol class="org-ol"> -<li><a id="org444d2f8"></a>Install Executables<br /> +<li><a id="org651214a"></a>Install Executables<br /> <div class="outline-text-6" id="text-1-3-1-2-1"> <p> Install Raspbian 10 Buster onto an SD card image. See the Raspberry Pi @@ -523,44 +523,53 @@ Linux) in <code>$HOME/.local/bin</code>. </div> </li> -<li><a id="org629d57e"></a>Disable Swap File<br /> +<li><a id="org1cc0c53"></a>Disable Swap File<br /> <div class="outline-text-6" id="text-1-3-1-2-2"> <p> -Since standard Raspbian 10 install involves copying unencrypted file -system image to SD card which is mounted by the Raspberry Pi, system -memory may be written to disk in the form of a Swap file as described -<a href="https://ideaheap.com/2013/07/stopping-sd-card-corruption-on-a-raspberry-pi/">here</a>. In order to reduce the chance that location log data is ever -written to disk, swap file functionality must be disabled. +Since standard Raspbian 10 (Buster) install involves copying +unencrypted file system image to SD card which is mounted by the +Raspberry Pi, system memory may be written to disk in the form of a +Swap file as described <a href="https://ideaheap.com/2013/07/stopping-sd-card-corruption-on-a-raspberry-pi/">here</a>. In order to reduce the chance that +location log data is ever written to disk, swap file functionality +must be disabled<sup><a id="fnr.1" class="footref" href="#fn.1">1</a></sup>. </p> +<p> +Raspbian 10 uses dphys-swapfile to manage a swap file. It may be +disabled persistently<sup><a id="fnr.2" class="footref" href="#fn.2">2</a></sup> by running +the following command: +</p> + +<pre class="example"> +sudo systemctl disable dphys-swapfile.service + +</pre> + <p> To view the status of the swap file in Raspbian 10, run <code>free -m</code>: </p> <pre class="example"> pi@ninfacyzga-01:~$ free -m - total used free shared buff/cache available -Mem: 432 86 36 21 309 268 -Swap: 99 0 99 + total used free shared buff/cache available +Mem: 432 86 36 21 309 268 +Swap: 99 0 99 </pre> <p> -The swap file may be disabled by: +After disabling the swap file and rebooting: </p> <pre class="example"> -pi@ninfacyzga-01:~$ sudo dphys-swapfile swapoff -pi@ninfacyzga-01:~$ sudo dphys-swapfile uninstall -pi@ninfacyzga-01:~$ sudo update-rc.d dphys-swapfile remove pi@ninfacyzga-01:~$ free -m - total used free shared buff/cache available -Mem: 432 96 33 22 302 258 -Swap: 0 0 0 + total used free shared buff/cache available +Mem: 432 89 214 3 128 289 +Swap: 0 0 0 </pre> </div> </li> -<li><a id="orgd9b9b30"></a>Automatic Start Configuration<br /> +<li><a id="orgfdbf7d1"></a>Automatic Start Configuration<br /> <div class="outline-text-6" id="text-1-3-1-2-3"> <p> Edit the user cron job list with <code>$ crontab -e</code> to add the following @@ -600,7 +609,7 @@ may resemble: <p> The <code>age1z2...qkv6p</code> is an <code>age</code> public key string. Please see the -<a href="#org82f0a69">Key Generation</a> section for an explanation. +<a href="#org4647532">Key Generation</a> section for an explanation. </p> <p> @@ -618,7 +627,7 @@ The options are: </div> </li> -<li><a id="orgce1df03"></a>Log Transfer Configuration<br /> +<li><a id="org2de2dd5"></a>Log Transfer Configuration<br /> <div class="outline-text-6" id="text-1-3-1-2-4"> <p> Log files may be shared to other machines via <code>syncthing</code>. See <a href="https://docs.syncthing.net/">this</a> @@ -635,7 +644,7 @@ of this document. </div> </li> -<li><a id="org82f0a69"></a>Key Generation<br /> +<li><a id="org4647532"></a>Key Generation<br /> <div class="outline-text-6" id="text-1-3-1-2-5"> <p> An <code>age</code> encryption key may be generated like so: @@ -643,7 +652,7 @@ An <code>age</code> encryption key may be generated like so: <pre class="example"> $ umask # Gets current umask 0022 # Note: This is the default umask for Raspbian 10 -$ umask 066 # Sets umask so key.txt will have no permissions except for owner (you) +$ umask 066 # So key.txt will have no perms except for owner (you) $ umask # Confirm umask set to 066 0066 $ age-keygen > key.txt @@ -679,8 +688,8 @@ be readable, writeable, or executable to anyone except the owner </ol> </div> -<div id="outline-container-org15d1661" class="outline-4"> -<h4 id="org15d1661"><span class="section-number-4">1.3.2</span> Normal Startup</h4> +<div id="outline-container-org8fbf566" class="outline-4"> +<h4 id="org8fbf566"><span class="section-number-4">1.3.2</span> Normal Startup</h4> <div class="outline-text-4" id="text-1-3-2"> <p> Turn on Ninfacyzga-01 by supplying 5VDC power to the Raspberry Pi. No @@ -688,8 +697,8 @@ further interaction should be required. </p> </div> </div> -<div id="outline-container-org989e70e" class="outline-4"> -<h4 id="org989e70e"><span class="section-number-4">1.3.3</span> Normal Operation</h4> +<div id="outline-container-orgbc8af37" class="outline-4"> +<h4 id="orgbc8af37"><span class="section-number-4">1.3.3</span> Normal Operation</h4> <div class="outline-text-4" id="text-1-3-3"> <p> No interaction beyond continually supplying approximately 100mA of @@ -698,14 +707,14 @@ is required. </p> </div> <ol class="org-ol"> -<li><a id="org87c8f03"></a>Log Transfer<br /> +<li><a id="orgeaa5887"></a>Log Transfer<br /> <div class="outline-text-5" id="text-1-3-3-1"> <p> Log files may be transferred by use of <code>syncthing</code> shared folders. </p> </div> </li> -<li><a id="org203d027"></a>Automatic Updates<br /> +<li><a id="org51a37e4"></a>Automatic Updates<br /> <div class="outline-text-5" id="text-1-3-3-2"> <p> The <code>automatic-upgrades</code> package, if installed, should automatically @@ -715,8 +724,8 @@ install security patches to packages installed via <code>apt</code>. </li> </ol> </div> -<div id="outline-container-orged87647" class="outline-4"> -<h4 id="orged87647"><span class="section-number-4">1.3.4</span> Normal Shutdown</h4> +<div id="outline-container-org46c0af5" class="outline-4"> +<h4 id="org46c0af5"><span class="section-number-4">1.3.4</span> Normal Shutdown</h4> <div class="outline-text-4" id="text-1-3-4"> <p> The system may be shutdown via SSH by running: @@ -729,8 +738,8 @@ $ sudo shutdown -r 0 </div> </div> -<div id="outline-container-org5d4c9cd" class="outline-4"> -<h4 id="org5d4c9cd"><span class="section-number-4">1.3.5</span> Unscheduled Shutdown</h4> +<div id="outline-container-org662e1e8" class="outline-4"> +<h4 id="org662e1e8"><span class="section-number-4">1.3.5</span> Unscheduled Shutdown</h4> <div class="outline-text-4" id="text-1-3-5"> <p> Ninfacyzga-01 as described and setup should tolerate unscheduled power @@ -739,8 +748,8 @@ seconds worth of location data may be lost. </p> </div> </div> -<div id="outline-container-org00f1b85" class="outline-4"> -<h4 id="org00f1b85"><span class="section-number-4">1.3.6</span> End of Life Disposal</h4> +<div id="outline-container-org70e088c" class="outline-4"> +<h4 id="org70e088c"><span class="section-number-4">1.3.6</span> End of Life Disposal</h4> <div class="outline-text-4" id="text-1-3-6"> <p> LiPo batteries used by the PiZ Uptime 2.0 module should be disposed of @@ -763,10 +772,27 @@ lead-free solder. </div> </div> </div> +<div id="footnotes"> +<h2 class="footnotes">Footnotes: </h2> +<div id="text-footnotes"> + +<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1">1</a></sup> <div class="footpara"><p class="footpara"> +Explanation: +<a href="https://ideaheap.com/2013/07/stopping-sd-card-corruption-on-a-raspberry-pi/">https://ideaheap.com/2013/07/stopping-sd-card-corruption-on-a-raspberry-pi/</a> +</p></div></div> + +<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2">2</a></sup> <div class="footpara"><p class="footpara"> +Persistant disabling of swap in +Raspbian 10 Buster: +<a href="https://www.raspberrypi.org/forums/viewtopic.php?p=1490692&sid=5c596a124b7805d6b10dab8d3d7caf16#p1490692">https://www.raspberrypi.org/forums/viewtopic.php?p=1490692&sid=5c596a124b7805d6b10dab8d3d7caf16#p1490692</a> +</p></div></div> + + </div> +</div></div> <div id="postamble" class="status"> <p class="author">Author: Steven Baltakatei Sandoval</p> -<p class="date">Created: 2020-06-30 Tue 17:14</p> +<p class="date">Created: 2020-06-30 Tue 19:45</p> <p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> </div> </body> diff --git a/doc/location/README.odt b/doc/location/README.odt index 5bcd1246b0442191e8b9c176c870a49cbdc0e055..43483169031e6430f002b9ea2478f0a11fa2ad67 100644 GIT binary patch delta 8762 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 X?Gph){U7Z7PuIK<1^lhxzuEr<{(9g_ delta 8549 zcmZX4Wl$YJlPwmwxVr^+5AN>n65N8j!^JNbhl^_n!QI^n?!n!HOK=IY$?msRTkp+O zP0i`)>Hcwg=FjOB;7cHinj$P564bx(6P$#i2=jN<{|Nu;_Q&|uEeS~c59cudFP_>% z`w8AuYbEUdtoIQLihCK-1C95eL&zF51%8B|0o&!Ep)X&8p`iSayzI8B3I%a$dI$~- zB`_Um)PdG!9<tx>zjD?rpxiH{skffp<?!bBHbubu?mGYYYYR0jheJlswpp6p9w;1i zcYm9)O!=|+cRF<bq-4MF<M|wh9_B!>PJeUTC>o2I4C{@=0FE)>-5KK%_SNrNO|#QM zCd8Y*bpLv$kQD+d@TCtppkYD3nFrBZ0pmd^=_-zR(XA5{mP=-z;pIB!@>EV0zebId zR0gx2aEckIsb)s7oN%_L#hW3|M4pD#FUq-}yIk&Cxsye{nRRsOF&o4LAunv^D$zQ6 zwtVc&oO@Q^rdJqu-~ySI)NeR?uKD_<M>JMf${FHK$E-6T+YLxdw(Fc;+v%*?0jsTB zdab6usI3LzT$Mln(FweJsB-hq@VG&JCTdaLDSn<lmY+3-X>rPz>ww88bm_UT<@U@3 zVNl`{6CWd1OI>;jAUM8u%$vK~L!^5p@lvufT6j3hEbtmB);&#O99vLv;5#H5Sd|Fi z<eY5h?N8St;OADCe_WQ(*&O7wK^kBQffLo2iQ<J_p*j6Xy#8pd`t0IUIfECPqq}G; zP17*(f$9j_wyju^2<5nMX4Osg^!o(7Q!G|p2bi}-X{?Tc8dVA|48?IZ%?U(^xv0oE zb!DSbKa@c5b}UT1l9aGu6zXJIJFy;He8?u%GjIGatDBsu2*nO%m>_Bj*R}>F;Kipk z?u-mdBtE@+M#$q7@-C99968aV`6J`@JVlQmNt(Zm%Jibk8}ePmi+`q?iDNQ}dp?NP z=PMJ^_iYOMyZ0So{$F|g`1?{3=<jXn!MJ1o$=d;}Fw@_}x@5T8{C)9!mNGcdW3f9G zpjK}#SP_=nsPmUY1LB^lh6|)xfbbEZq{~#UqD{9rz2mq^tdS4t*Hc(It`E!x2ugl? zc!+77mKPhT-%C!0_yfo(U*<OVEwIp~3)M`c9PNy)wo*2EZXFlco&1KBaI+4HoI1fF zul!@uB5V6`XlpbDdD0>vcf7=eybl{RT_q!B?|5o|NG5{QJ`cZW0?f}WfdTsNqmM`9 zk?5OwA1HLONL9*wIgq9H^)X`kVJLg^C(zy?E>?I6lCIeT$<Rx{7($r9eZT0KHzt=T zA-%F*2Ad`8dEm-f1}h`gm(0_Y4v(SLveI+q`k}-|_l*4l86haOm_e3b$XN1^@-%&L zU^jN6A}DS=`F?&>F#9AuFv>qt6q#(QO_qd};vD8@c@5$jzfPnpOj4|chqrFDLL_tJ z0)r>}Z}#8On1#8e(3oCd*!S{w*afxhZ(5Pr51mR;G{WAY#@6L6Ito_&;Xcvj_Mt~x z121jw4Z_06aVEmL!d9F;Wkt)sppijOk}uk$J)j+kpKfo<a!<}~0%u7Y1@`{BT~P(| zpS+b8^REbI4d}eferQ<p{Tpnr1l=ah;h4HPk!dTw(M~N=JFXa|ygdV?Wr8Ngf$U@^ z9>n?LPFAWmI574(JDPpa&Antn)BE-U!}D>%f8~?<p}0Y=9`8_jQm1-UHK}Ul>D@py zcb%8VRhLiV#``i*zqjlrl79+*=l7J~?DkZ-sqW+W_jpVT1XHG*K)d6~36%=LjKOVH zY129}ra^47aTBFa8r{|BJptT2L7u+CDBS9NZ66{Z<5gkTrL{$4adGU;Jl}&o402Vb zJ-|3<EhDO=cZcE_&(FD(jeVAju-?4H&&Cwx_EPA<D^Cz$NF`Rd?6uON>M-{P=C{|U z@|zMaZ1SN>GILrHiiajTNq;CD6H!7GUKZ%oZJ}CG|5uNf6;g`T{C~URgMo|%$%#R_ z{pov4Tl6|cAySZzzq*eDy7ybS(RyH5^Dw~$B7c`~=4RN$7TrEP`8YvKA9uy)Zjqq( ztDk0d;Xv@A#O;%fHKrFKt_uBTb>d#eb6#}zhRPvyMYbox&9d|qBmdTwSR}ai1cawE z{%X3Qnr@gj(47Ed8#;v;2ya8hXZ7<*0#*RIRFq9}Ki#>~wJLg`#rV+Bt-dDKdhGkY z=>nd*>+?|83+8CznxZ63*32}_Q2yE5dWE*o8*OW*&4%O5(Q1NdSJmaRu1+}bOpVLl z{o%wNDN+3iw-|2+-GitM#1^22;WUlzzJ#R{qL^zf;J{yk2N?mV$W-VFsfHhde+yye zX>DH%;pZLpQ%!zI?RuH12(5Y(nhrnARI{LcIU4W3vGmD9`4vkv?%P5A6CEhwF=<f* zhQ?<K&mAp=7$Fh>1*a9(IAwjcax+h+8>TKW#D$_a(U@Nj^_@GGVDn1WG}R5;$s2qP zi^S`7-75os$Xvh0mDQ%X>R#c-=3yZc_mq}YQ+LE>q<5`ZOfEcLF|&$CT44!=8CPfA z)UVi|thG@?h1GV{Jst6}2fPjycDM_IdNy+v{mgf!a#Z+$``nvK9CkI@5-OtIPMOn< zzuA${7eq3P5wDhJ=`L30jW#DrXOELLPo(F;PxhgYAaogx$&SzBo_NZVEaAnwWa#`8 z{#>S?aQbHTqnv4}YRa(Zkl8=0OqJSzE3}H;!j#$#Hi`{qxRjPhkx7?$n7Z$!Z_uRx z_yqeYW*BuqZ7y0$|Fzg4|E1M86ozlTmhHasm#@p7v=|{6kyu**2w@kc;~Y)#965n> z&$5sKCjAH3RI4)uo-yQi`0->YnzoL~wO=R2iV|kFSzO&ovufZMMo2;{(`g+>W+^Xk zv$L7yR2lkyOVW14+69w-hRv@RH&V3==zil5;axUBK*h&1U9n|gWGzyE7!m+IkD@Zv zMGbmqo3Nh|0K&yU%l~K4g5Ej$XBfuCi2rYc2K3H8VgJ}nyC$xo_nT;ND_Dz8Q@^?B z&$u?{*q3QWl#ByUXVt@Y#)h#IgKVs+DmM;MhSL=3P8JBOm3CG<)}6th0heP~Ab7u3 zdoi|V64tuM;f*>}-`mYJUcl?7bd8d(e?DJ;53_+#ju2Vg{?|)Uqa`t+jOI}L2H6;t zM!+}dMThF;?)H+szS6CN<-i*0P0m*=$6hlV=;t-WnS2d_<NGG4;9dkGJ!GOYwBEGW zhY4|@1VTG7cw1?CN90dF+8;;~kdW!?7G-|nOhSKP8IZ63k4LFB)crYEqlmLiH(bA^ z4i0-88_8KvjkBtN0ak5TLVK(9)QqO=TlXM=(s8Zq9|IJ2kgA<~;FgAm-$0Tt`>e*T zCWHCwnX?<`&y%%*y0pEIk``nUX?kbMC<3(zdpl||9JWa&!e6HPgh;K=fuGalz2}d; zECflLN9t^L6ukN!Wj5W8kuw)<Zt7EXxVuQ4_4*<0X93#3eGnJyH>x6JSy2OW8#zFD zkDjUf3yxWLT2aX9@DXD4EO&2cVUEAjhP~Rf^SZ@!jituB#7i|-bWz4$(irdgjl=*L z(owVrM#=k%c$OiT8$+Rd)XPI2@;vyn;NQug0r`IR_M6V(9}@2by5eUEiMmF8TfCQr zA0g<d1VG-1QzX^$8auvq%RI|^;m<_L&FBWXUN=X|N`SuPZ`3vKYkdCF+qB?gO?TKD zLLQ9Zkrq2>v1XXBTl|;tXdSOGP;seGUL7m<i`kBsZxcM=(((zOLdC-B=ld+~%~j)= z4kc(kF;n^L1}f`o=WtMRF#3)ip6d*fcc!0u5AYcS0RBx)UJ&P473W*^p=Vp9fls?Q zvS-!C6g_@G@_w>VH=wxqf;Z;#j;vq&CXiophoBd0pZP3cYNX`np6;Ohfk03a_%WoG zQZw5KKrOG>Zw0$f<YYIXd=VkB;U(Q0#S>^#ww0dn%AmuE1D(t9tw)4*wxj#~+8<W@ z5qNkkAJgeZvW>|uXJop5(rt$zPJDfzSc9Gv<A*5v$vlscnL@LH$V27|BEW7)gIt$O zu55;ugxs9sXUR}yJz8`SWkLZntt2s9+u9i{)@D92(}%L5&Us)qocPr?aVST2Gr~bB zGY&(E@Z{&PEmJD*X>93K-X@A-a%4GS8q@4Ate9taW_#m2ix$`!6LhinHz>K}G)5@S zcIv7!(dSA>-`f)|%+vL|637%9IdF{l!C!KmOvisO<$@_yB#MZ66kp}-2aI^oT0dKf zgWXvqzH9`!)ZmxSD(4^5<{!WlBDxm~heN1xPRypz?*Rc>&#LvNnxbA#GlYCd=TiN< z%+Ag;6R@XttAt(-cG@S5g@5|rrGxISNO+H%1nw46T$i)6O2f#t4T-w-YJp!r*u&8u z4@CtSnZ@PJwvj9UVx9L`Lcgp^#*$4n;A;O4&@d^`U#r?HFyJ`4H9t@UBq7y36c{v= zXie>@_8%vliltR{&y-Aj$0!z~-{re1NpdNR!#AFR3!i!vr|z%LBrFS$U0ydkrVFUt zCl<CvLVXz_8?=Q9z`516hXRhYb~)h?G-C7PC&7lmc^$bQp;E>fIK1EP+#I`hL=<|g zYF^;-9kSdRH$fNHDrEUc*Fyq=x!p0%x9Di^Aa*s+o8;l$1lJ$4O7n*fvx(D<#b$1a zHt66&hK7HdyfbR^(HE96u}==WVd%B)4N_<XT!Xhtw=2jr=FuPE<ALZ&_edfH7vFyK zjpKe=)$60Q62>+V7v?cTk)VNZqWB)|BpHeKh}CFRmN0q@5Qwj?^9E-|Ankg_=7Jug zf0lp_Q&ciFv1j<!5?2z>#aa{3XbGhyrT6EtACDV!gpZcm$>j{8MloRTS~XG2RY+^G zM-0{EQBzxR*sGV$-+=7hJ8wwce%u=X_Z-WeHY>gH+u$#f?R-PQgF2;-*E?_^TtC6K zJruSi0eM7E+T~s)3=KzXx9o~_Wtx2n8rDS0AbDEDG`bVlp>f&5#cOe|&msz8+Q0I+ znPi3I*Q!ajv==!DHP@QU?ZpT;(73-=UM-5BU8oG>2Zj6h9sz$hl=pwCcg*mx)1C}S zbPMQUVQESa;jSP})94+u$lP`=@8<fvh-bC15vD$j{CQWi4sSk66ur_;jNt5;)e~Gw z{+?XapIF{N|JCa{mW^m-y=J=Tle<YNW{QHMeYtRp4ZbRMmz)<nQ^Qb-%B8DQ5=${l zu-^SUq}LALpVub#pK+ESu-J6gLmYg#kgpQ4WbqWGsv#HugT-*U}77qeyy_SX7K z=e+!x#4Bt13zxS9He7prZw=kjA2Wx)%6>uJmDd7S<_TxS52Z$r9@Pez7_#X%$Sxx9 zqi@C6OhRO^KGM9dJVHGWzFU1hRz@`1q0(ikQtfAa-e5RiTgd)FNXoi>SF!U25`#qs zB;g@j-f(T1bKz{aAPqLdyiAF3H(TH>j2&IH4!5r}TDeg)zx@scuCvDbn8r&&+=e>r z!{%*Rkt04qsGO=CEVZi?P61fdp>0*9&oY=sPH|H{nBZ)bq{xZ1jQ2ZA*cOyJiM;(m zVm+pWbO2WW!%F$CjTOTm5Dh9Ia4q#E37L`TG{4cunPKquX<aYd5B{~^8C|;ijr;JG z3?hZi0BmxpJeVz+KBVcLuWqfD!<j-q`!tcjb42vvngM+toJn|tlcm$gSg~LZg>P#( z;izRiAn74H-$B>%hZd<?&zb#5#V+gVGTNuAh&Q>QWn?N_p8eLroSvhmT`;ZkO_8qd zdp1tq#4ce^uGUNW!3r6}q0GlG;vd!B4J-_;tAN`|Q&S@Q*6Kp;QHtrd!{vCvDwtR* zIn86>6Ncth+Dpev(_}kT9U6m#J;_}`isul15kR&5NGV$ftBO^`UT5pKb#*HV0(}f$ z<8%23y3p)oc<M8i0@k{NjFE?wbLD59>H3P6Jg#;loZm7vx`y9J2(wA|f|s)zipUnB zMj`e%WWdWu?uMWNeB&OkaNk*>epGwrDqaxj3bpHN90Bx`N%H(uR3G?|QvoHLU=YJ) zFN@$Z7$)uz=ygu`9DKhKLo9IZ$Zrx~jX$0#d`zz7WPS1D$Zy7*t&quj5)Wd^*=@v} zp6>2~wHI`FeVsro%X+ciH2VCupzQJ`+jyE61msQU<r*f@bnkrG`{ukQh5uI1#gq9L zBt+05yq^BrohwTJc$C|5UnovpvoR}fVw?cev6LN)u%s*eN6ahd=)jHuC4C8j=OY)7 zKkqmb(A?y+OuaWLiq|=j35Pojh2G5(Tf^_mV-+vtl$Ei7F&$)JCv;ymL$#w_nF>`l zkRjXkJnHY0_A;!}an<ECMLnNIJ!f|Ht9<kt0Wr=k2Bvb!3<UK=9*!Pu)(iUN#ZGPr zCH%me*8DkqX6<Y0#uSO)fjJ<-3rpk}u|%QIF-tmd+4{Z5-s$Te@;d7bNGv7dP$Q#* zdT=fO-1o6CV-!|Mdog>q%73J!`^h>0n75iau@C)?k(#r8j!NcEd_>P7a2XLhetNiM z|8ReOe5-j%SZZBk0cyTLQtv+QmTf&Qc04MZ!(fPc7tfwIVV)cHYda2pvEI)1WR?7| zchd@|IW`ZecE?@p#drY2)erkb949MOLQs{kADQ2-3>4c?ik=Cg8kP-MKc-|H$Z|F6 zs|kl;5;=I-dVXBSrFGd8@S=1(FWw_Rnnl(45CkWw%P7LsqJZ4d1gaghP^ZP=inMX? z5GqKBj=WM=PbN8g4ll733m{1--x15ez+$MkOEE7_<1<?Ss%xc^RYtY#d^LhgX~Yvi zK?9mEFK6y17d%sQSC~9;tc+!q;}2-7BDE&zK6LD<_GBkBEIa{CX|z8Y;qt3YZ#vZF zSvfT4b;|eH)w^a;ZlL+1x)ab9h?vPtZDK*-@zkApCd!qcj#qp@5LJ8<IKP*ZbBHrO zG4wDb2A>4l08)xiuWFu#`P2YK63ZN(De_2-5*pHy?eX1C|HMHhN_&fbn_`hr(wz*5 z!R++?bWDgJt@Pa7aATn8X!UE-4@q1=DRZwLRWpUqfVu5g_>cBdKOy7<bU@>ICmoSt ztri;en5x^Ayj_0LaGue4qWB;Io&31Xz!q~Rz5O|^D>!pkI++-5s)$j4-L`JN$I@Mu zm9-RqoSA1r8?3zLAJ~Q@2@~JG)^z73zuRAqWo65R{_Y5hVBCRj{x;}kj@{wKuxwh7 zE5Rs@RsXwK&Z6>1S~wc<O)t=S>mpCF9;cFup;H@~Ek2(A)6a(`VY+l)G2yBCfiZ~O zy2}8ctbtEtU6LK^eEG<*N$IEMX@u8FIf~bHdp26{>xDTqWe=SBSz=47JIT|$%fwK4 zER;bb9V~_T)2A5IW~jVFxE&<kz!Uot1}8x(<B*9QcS7)s7SiOed3Rv(5p#Z6xRS>R zH<R##(pxhJLLH25xVt5)mMpkYGyeSmi8GLP_124-V3QQ$x__cXFhNh;IGxDnQu9+- z=txL33i1&piEy|&0=rJlN)?<>$=1w5Q(rX$D}zGh#u`D~%BrI_)E8zKnJ7E=r=(d` zlnafJ@^fZs^puT-<1X;G@4OUU*`>>8(jUp6c#OK8*R6Nvpx}57k=VZFen*Nb>xfXz zU%~SyI4hMY!k+lubihCGtxVMZQ2MCrw!!u1YyzEiH)u7;j32dt_q|SXG)o?8t=k0| zSLs?Qb>pjR<(8PRNZzXYs35>Z%;7Y|Lh$EqHb742s;C&^KYRczG#_5RnKi3%u>dS3 zAQYvekF!0rM~nlW1kO+tYaZZ-9RrW#t{;@X=$$pjZ04#Q&wvJKzb8{69S`6RBIKNh zw0PyT_d@p{Gd9=ip5OrCAo4#+)tj>C@hji^1b4MrDo0klmjtCN%x8TX-ls{(viVUi z&Co!<CJL4THfX?KOa8CJ=4f3Sv@Yn*+vzP5fkJL8vp0p4Cxw0&sX`w@1P4;@oR%t< zzY<qgDa3!C_@0d=2FIKTXv_wN3POx@7xt1=k0uAZxvDzNLf#0La1FK{@R;iaFn>uj zZ+DX3@LrKmM!_mby%i(}C?lhD0Di(%w;9i;EU!A9r(*)cQWfpc>f(*Ew=sFvtr~8{ ze$`a&rqc4QfamF`%4b9U&c|}#zYLQ0-iH#J&tM}(Ar1Q!k=;@I+Wh8SPO{|>&TH=% zDelW@2H0-LQG`=6oECHg#F37(T@=A0sCd49os9}j`qxr}jE9U=gw@!l<2Aub+o}W_ znj;ppNU=a-dD_~!EzEKZ6U}AR>Rz_phh|A3SK4c_Q+Db_O(K<EW$J!Ni5A2vt;0}w z`az`G>gzW^n5BE-V!}u%$<Y!HU;1U&>+5Tc30@dRh@{~}dpUYL+PRLWp;bF`@E=B} z8_z>sXsQNh<Eac%DoF}DF{}4MRv2Zy5^o1pFJoY5#JviCH!m`iG;5Jdtkx4{&WZ@g z`IA*ZvRrVU!I_TUO42sBT@%A_9(E<6rQ-KRkb9l^={JNvid8R+RJ8nWgcK5eNllM4 zSOLY;owfyWE1k73e#gY#WGP<pK@`?$U}Y9)s>uBG=(Hx9^-!nS51HYASb1-nNgczQ z1J{8)!~z?WtIa_dBzV6J1lEYlSKFIb%kSG<9+{Xk*=fvV)s#_M&y?hgwed`gW+SXa zSa@A_0~a>Cr?D_A=UmJAb0?%@kqb59x|GGpB_^Qqk#x7^rV3Z{+1jG!t$%ZZ*rism ztyAd@df!SuCU;$~&z4hB7RN2ZHh-kd+_eBEji*lP^$)fb?f(fF7K6S8wD%qJT;IM# z$;Skb*Rs~)1qj3~U$HQ9a5c>t4T#f$4S6^d4T2JnC~<4)az4UU+4NKCbC!3K?qD*k z@<{M3xcd_7!B&+Slqy?kbFnWr1;=JZ?}{ass?22i5;!@9kOR$&-38w?PJCA)YT$sy z5fB+40e)cZ7tvf5FgeJGvE$%_+Ei3JI8i>v!MucPmL|!I)?vo0JXd`7eZC~bXvgD8 z()DX^rDdaX-yB@|c5g(+Ql{w^2|N-E8k=5!bcSl5ZNNPrlXxga*7z(3<0m+-FWqF5 zTSb-FN%{i?-MgCHj=wdI+Y8f<o)3VUFr=d}9CL28I*pBwqS$<$tPMF&E5ah2)4h-9 zs5^(H-s{bZO;zLcXHh)U{%PNn*z%}m2S@GArssx&w(`%HnzKlziV7B>4VaYTu7B9- zk_L}<_s*+5PNeLNAm>B3B!K;!&2pna&TW1j^&(Fr6KQy&WS;GXZ`+zT)&oEjB~3pL zlic{KimTB-S50?bFS94cvCdA<yj?x2qPcnK&LW$}Mw_=L`RJgf5*r&}S6e%u-%sKP zCsmbd<NRFIsXzIfxd}C_)uKjQ9z;%vNJ!dPJx@Qhc!caE3rL5@Kf1Aa&M+)(^U)-6 zY2a;f0xoHaxG3Kj-98?RU$6qpk1#conRq`TCdO!(EGAZ;y{r!o-Uzdkb2#E|1X`gc zVMJU4_TaFZKF9K%yDFx<!%<|FrOQN(;)Vu=C(@u`AnAvNJ5(6JKdl)i*L|EOTKPV7 za(G>mq@`=&iQI&ZSFIik7c`q(Amt-*dn?*0!ckUP?ZIeCApp4Iq5T4sN~7TycewDL zOFjL5+T>MsGi*ZTi#0x^mgVR4TA4;P%e5eLuH6oB%fFAWDqR#BcGIK`F=oBC1Ku3y zy#POqdD^@oVb^h0MD3IF#gk$i**5Q{QFT|KDj45#TF-{M#^REynPQw=Z7#g1S|zrE zyd9Rel=7b2Dosiv<H~@W&X=P}7*kQ><pR<?W6<CDF9*Hm^XoxfeXbvX*+D9@EzST5 z4JuJFUJZZOa#`&C-$6*+TU=dW__#~?`!Zu032y3>dMHs@sBWoze{{pBd+2Lw^8AEx zNF|RBp~iGouBUe3_z~?1vLWfdcD4SdFbghYYP<0utmOleX)5q!FnS`gJ53|~C9Sec zNW_6^Ky5melwBvxrqt_X{K`|dsh`%}AC{}1`WIbatge^>S0N3w(?lrW5EV<2$M*1q zoC~|G7K#8&2~>Yr$o#V8{tuxjh;Xabh@t5_wPp&%(_YZvMR-s$i`MEsp(Ak&xb$#L z#kHb)yFGUmIS6?18UBEjc1nuuXR4bzm{mDr!gi814x)}rI>=B9_{6QRyA@-~v~A{= zv3(YJ-z7D~CbX5~F9N`j`4uVGa|3AV;$&9{PP?T3Q85z&yZi1g>G6nI3bLigu8d4( zneaXFkH>cd2neXxwck%Iw|}@O5PgY%`V@sSPl<nzQVjf!60`3=Ww-VB^Kto6AF0+i z|B(nxP;A<kp@0|44c68hbc)Mpa3iwV;21})mh!p4meWn5M+gszi1jgGOr1*(Yp@7) z{J3M50kXM+XMfK~-rMy+W3#N@6`UC2KJye;^fKN5^4%^{yaN8-5|iu`>oz1v6hMnT zZAR7En?OvAgTJpHwyR1wItxO5L;fdb<NTGf0e{782rCuEf28RKZK^v0x_`=b&D`0L zJ2VuO66`-G5-3M24>MLDM+a>!L@3z*5xpU<LPWp^98_ID=pu*Axms3^S;0H=8)&;H zkmn3*QS4+1K9Z6Lm;Pmzdw1SV%a?i~9RAfXh9Vv01h@i_7-FtMDoba}9RzsEvI5t{ zG@BiVBc{nx4wG_+T-ym*T_E|cu<DCvY=yJXnL?x88Juh&eup;SJ6D(8Tn9uK*w=8x z-vol11fyL)FNq7IHjc7`_Xq^<VzE^E_z-)otU6ihO6AOb|fRvD_#*ZkO;7Yy>h z8CDZd;70YkM0UIaPU*-u0`}{~$(-8bEFjdlS_IoV#Le}!2oYpHPETouiMBtoll}AP zd@Qr6tIM?J6!QKo&EP|)=kloFMW`Qv+<`!%>QPb}E`ct0u*%sU$%4|}yQ<OeI~RDQ zSmZ$FR(kbM=zw-#ZbC*6BziPCjIDcw7axBg<Y9yCl)L9z&%5!HSL|@B>Wf;}=u{qr zd&-5#m_6O0*Tk<j)#Y!Tg1&P?3ZXzzK=&>7GOwB<Gz=N+|Mnnksu>S)LJ&mQ{&pTf z_(WJ?Ufm$JBBcKiNJQX2=>P3PxDcWK&k5H*mQim^gjWgvvWx=_g#`6?^LP9u9qN0C z6eSdtyN9oXmHYp&{^1|%|KjWY|JCt-@0kli{hwO-?^}P2J$;a&py7`GmePMOYKkA= R|7C*zJE#Aq!x#RC{tG1fa{mAT diff --git a/doc/location/README.org b/doc/location/README.org index ebabe81..397968f 100644 --- a/doc/location/README.org +++ b/doc/location/README.org @@ -1,7 +1,7 @@ * Location Logging This document was created by Steven Baltakatei Sandoval on ~2020-06-29T12:14Z~ under a [[https://creativecommons.org/licenses/by-sa/4.0/][Creative Commons BY-SA 4.0 license]]. It -was updated by Steven Baltakatei Sandoval on ~2020-06-30T17:13Z~ +was updated by Steven Baltakatei Sandoval on ~2020-06-30T19:44Z~ #+TITLE: Ninfacyzga-01 Manual #+AUTHOR: Steven Baltakatei Sandoval #+EMAIL: baltakatei@gmail.com @@ -131,33 +131,44 @@ Place ~age~ binary (the one compiled for ARM CPU architecture for Linux) in ~$HOME/.local/bin~. ***** Disable Swap File -Since standard Raspbian 10 install involves copying unencrypted file -system image to SD card which is mounted by the Raspberry Pi, system -memory may be written to disk in the form of a Swap file as described -[[https://ideaheap.com/2013/07/stopping-sd-card-corruption-on-a-raspberry-pi/][here]]. In order to reduce the chance that location log data is ever -written to disk, swap file functionality must be disabled. +Since standard Raspbian 10 (Buster) install involves copying +unencrypted file system image to SD card which is mounted by the +Raspberry Pi, system memory may be written to disk in the form of a +Swap file as described [[https://ideaheap.com/2013/07/stopping-sd-card-corruption-on-a-raspberry-pi/][here]]. In order to reduce the chance that +location log data is ever written to disk, swap file functionality +must be disabled[fn:ideaheap_20130731_disableswap]. + +Raspbian 10 uses dphys-swapfile to manage a swap file. It may be +disabled persistently[fn:rpf_20190702_disableswappersist] by running +the following command: + +: sudo systemctl disable dphys-swapfile.service To view the status of the swap file in Raspbian 10, run ~free -m~: #+BEGIN_EXAMPLE pi@ninfacyzga-01:~$ free -m - total used free shared buff/cache available -Mem: 432 86 36 21 309 268 -Swap: 99 0 99 + total used free shared buff/cache available +Mem: 432 86 36 21 309 268 +Swap: 99 0 99 #+END_EXAMPLE -The swap file may be disabled by: +After disabling the swap file and rebooting: #+BEGIN_EXAMPLE -pi@ninfacyzga-01:~$ sudo dphys-swapfile swapoff -pi@ninfacyzga-01:~$ sudo dphys-swapfile uninstall -pi@ninfacyzga-01:~$ sudo update-rc.d dphys-swapfile remove pi@ninfacyzga-01:~$ free -m - total used free shared buff/cache available -Mem: 432 96 33 22 302 258 -Swap: 0 0 0 + total used free shared buff/cache available +Mem: 432 89 214 3 128 289 +Swap: 0 0 0 #+END_EXAMPLE +[fn:ideaheap_20130731_disableswap] Explanation: +https://ideaheap.com/2013/07/stopping-sd-card-corruption-on-a-raspberry-pi/ + +[fn:rpf_20190702_disableswappersist] Persistant disabling of swap in +Raspbian 10 Buster: +https://www.raspberrypi.org/forums/viewtopic.php?p=1490692&sid=5c596a124b7805d6b10dab8d3d7caf16#p1490692 + ***** Automatic Start Configuration Edit the user cron job list with ~$ crontab -e~ to add the following @@ -212,7 +223,7 @@ An ~age~ encryption key may be generated like so: #+BEGIN_EXAMPLE $ umask # Gets current umask 0022 # Note: This is the default umask for Raspbian 10 -$ umask 066 # Sets umask so key.txt will have no permissions except for owner (you) +$ umask 066 # So key.txt will have no perms except for owner (you) $ umask # Confirm umask set to 066 0066 $ age-keygen > key.txt -- 2.39.5