1 <?xml version=
"1.0" encoding=
"utf-8"?>
2 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns=
"http://www.w3.org/1999/xhtml" lang=
"en" xml:
lang=
"en">
6 <!-- 2020-06-30 Tue 19:45 -->
7 <meta http-equiv=
"Content-Type" content=
"text/html;charset=utf-8" />
8 <meta name=
"viewport" content=
"width=device-width, initial-scale=1" />
9 <title>Ninfacyzga-
01 Manual
</title>
10 <meta name=
"generator" content=
"Org mode" />
11 <meta name=
"author" content=
"Steven Baltakatei Sandoval" />
12 <style type=
"text/css">
13 <!--/*--><![CDATA[/*
><!--*/
14 .title { text-align: center;
15 margin-bottom: .2em; }
16 .subtitle { text-align: center;
20 .todo { font-family: monospace; color: red; }
21 .done { font-family: monospace; color: green; }
22 .priority { font-family: monospace; color: orange; }
23 .tag { background-color: #eee; font-family: monospace;
24 padding: 2px; font-size: 80%; font-weight: normal; }
25 .timestamp { color: #bebebe; }
26 .timestamp-kwd { color: #5f9ea0; }
27 .org-right { margin-left: auto; margin-right: 0px; text-align: right; }
28 .org-left { margin-left: 0px; margin-right: auto; text-align: left; }
29 .org-center { margin-left: auto; margin-right: auto; text-align: center; }
30 .underline { text-decoration: underline; }
31 #postamble p, #preamble p { font-size: 90%; margin: .2em; }
32 p.verse { margin-left: 3%; }
34 border: 1px solid #ccc;
35 box-shadow: 3px 3px 3px #eee;
37 font-family: monospace;
49 background-color: white;
53 border: 1px solid black;
55 pre.src:hover:before { display: inline;}
56 /* Languages per Org manual */
57 pre.src-asymptote:before { content: 'Asymptote'; }
58 pre.src-awk:before { content: 'Awk'; }
59 pre.src-C:before { content: 'C'; }
60 /* pre.src-C++ doesn't work in CSS */
61 pre.src-clojure:before { content: 'Clojure'; }
62 pre.src-css:before { content: 'CSS'; }
63 pre.src-D:before { content: 'D'; }
64 pre.src-ditaa:before { content: 'ditaa'; }
65 pre.src-dot:before { content: 'Graphviz'; }
66 pre.src-calc:before { content: 'Emacs Calc'; }
67 pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
68 pre.src-fortran:before { content: 'Fortran'; }
69 pre.src-gnuplot:before { content: 'gnuplot'; }
70 pre.src-haskell:before { content: 'Haskell'; }
71 pre.src-hledger:before { content: 'hledger'; }
72 pre.src-java:before { content: 'Java'; }
73 pre.src-js:before { content: 'Javascript'; }
74 pre.src-latex:before { content: 'LaTeX'; }
75 pre.src-ledger:before { content: 'Ledger'; }
76 pre.src-lisp:before { content: 'Lisp'; }
77 pre.src-lilypond:before { content: 'Lilypond'; }
78 pre.src-lua:before { content: 'Lua'; }
79 pre.src-matlab:before { content: 'MATLAB'; }
80 pre.src-mscgen:before { content: 'Mscgen'; }
81 pre.src-ocaml:before { content: 'Objective Caml'; }
82 pre.src-octave:before { content: 'Octave'; }
83 pre.src-org:before { content: 'Org mode'; }
84 pre.src-oz:before { content: 'OZ'; }
85 pre.src-plantuml:before { content: 'Plantuml'; }
86 pre.src-processing:before { content: 'Processing.js'; }
87 pre.src-python:before { content: 'Python'; }
88 pre.src-R:before { content: 'R'; }
89 pre.src-ruby:before { content: 'Ruby'; }
90 pre.src-sass:before { content: 'Sass'; }
91 pre.src-scheme:before { content: 'Scheme'; }
92 pre.src-screen:before { content: 'Gnu Screen'; }
93 pre.src-sed:before { content: 'Sed'; }
94 pre.src-sh:before { content: 'shell'; }
95 pre.src-sql:before { content: 'SQL'; }
96 pre.src-sqlite:before { content: 'SQLite'; }
97 /* additional languages in org.el's org-babel-load-languages alist */
98 pre.src-forth:before { content: 'Forth'; }
99 pre.src-io:before { content: 'IO'; }
100 pre.src-J:before { content: 'J'; }
101 pre.src-makefile:before { content: 'Makefile'; }
102 pre.src-maxima:before { content: 'Maxima'; }
103 pre.src-perl:before { content: 'Perl'; }
104 pre.src-picolisp:before { content: 'Pico Lisp'; }
105 pre.src-scala:before { content: 'Scala'; }
106 pre.src-shell:before { content: 'Shell Script'; }
107 pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
108 /* additional language identifiers per "defun org-babel-execute"
110 pre.src-cpp:before { content: 'C++'; }
111 pre.src-abc:before { content: 'ABC'; }
112 pre.src-coq:before { content: 'Coq'; }
113 pre.src-groovy:before { content: 'Groovy'; }
114 /* additional language identifiers from org-babel-shell-names in
115 ob-shell.el: ob-shell is the only babel language using a lambda to put
116 the execution function name together. */
117 pre.src-bash:before { content: 'bash'; }
118 pre.src-csh:before { content: 'csh'; }
119 pre.src-ash:before { content: 'ash'; }
120 pre.src-dash:before { content: 'dash'; }
121 pre.src-ksh:before { content: 'ksh'; }
122 pre.src-mksh:before { content: 'mksh'; }
123 pre.src-posh:before { content: 'posh'; }
124 /* Additional Emacs modes also supported by the LaTeX listings package */
125 pre.src-ada:before { content: 'Ada'; }
126 pre.src-asm:before { content: 'Assembler'; }
127 pre.src-caml:before { content: 'Caml'; }
128 pre.src-delphi:before { content: 'Delphi'; }
129 pre.src-html:before { content: 'HTML'; }
130 pre.src-idl:before { content: 'IDL'; }
131 pre.src-mercury:before { content: 'Mercury'; }
132 pre.src-metapost:before { content: 'MetaPost'; }
133 pre.src-modula-2:before { content: 'Modula-2'; }
134 pre.src-pascal:before { content: 'Pascal'; }
135 pre.src-ps:before { content: 'PostScript'; }
136 pre.src-prolog:before { content: 'Prolog'; }
137 pre.src-simula:before { content: 'Simula'; }
138 pre.src-tcl:before { content: 'tcl'; }
139 pre.src-tex:before { content: 'TeX'; }
140 pre.src-plain-tex:before { content: 'Plain TeX'; }
141 pre.src-verilog:before { content: 'Verilog'; }
142 pre.src-vhdl:before { content: 'VHDL'; }
143 pre.src-xml:before { content: 'XML'; }
144 pre.src-nxml:before { content: 'XML'; }
145 /* add a generic configuration mode; LaTeX export needs an additional
146 (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
147 pre.src-conf:before { content: 'Configuration File'; }
149 table { border-collapse:collapse; }
150 caption.t-above { caption-side: top; }
151 caption.t-bottom { caption-side: bottom; }
152 td, th { vertical-align:top; }
153 th.org-right { text-align: center; }
154 th.org-left { text-align: center; }
155 th.org-center { text-align: center; }
156 td.org-right { text-align: right; }
157 td.org-left { text-align: left; }
158 td.org-center { text-align: center; }
159 dt { font-weight: bold; }
160 .footpara { display: inline; }
161 .footdef { margin-bottom: 1em; }
162 .figure { padding: 1em; }
163 .figure p { text-align: center; }
166 border: 2px solid gray;
171 { text-align: right; font-size: 70%; white-space: nowrap; }
172 textarea { overflow-x: auto; }
173 .linenr { font-size: smaller }
174 .code-highlighted { background-color: #ffff00; }
175 .org-info-js_info-navigation { border-style: none; }
176 #org-info-js_console-label
177 { font-size: 10px; font-weight: bold; white-space: nowrap; }
178 .org-info-js_search-highlight
179 { background-color: #ffff00; color: #000000; font-weight: bold; }
180 .org-svg { width: 90%; }
183 <script type=
"text/javascript">
185 @licstart The following is the entire license notice for the
186 JavaScript code in this tag.
188 Copyright (C)
2012-
2018 Free Software Foundation, Inc.
190 The JavaScript code in this tag is free software: you can
191 redistribute it and/or modify it under the terms of the GNU
192 General Public License (GNU GPL) as published by the Free Software
193 Foundation, either version
3 of the License, or (at your option)
194 any later version. The code is distributed WITHOUT ANY WARRANTY;
195 without even the implied warranty of MERCHANTABILITY or FITNESS
196 FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
198 As additional permission under GNU GPL version
3 section
7, you
199 may distribute non-source (e.g., minimized or compacted) forms of
200 that code without the copy of the GNU GPL normally required by
201 section
4, provided you include this license notice and a URL
202 through which recipients can access the Corresponding Source.
205 @licend The above is the entire license notice
206 for the JavaScript code in this tag.
208 <!--/*--><![CDATA[/*
><!--*/
209 function CodeHighlightOn(elem, id)
211 var target = document.getElementById(id);
213 elem.cacheClassElem = elem.className;
214 elem.cacheClassTarget = target.className;
215 target.className = "code-highlighted";
216 elem.className = "code-highlighted";
219 function CodeHighlightOff(elem, id)
221 var target = document.getElementById(id);
222 if(elem.cacheClassElem)
223 elem.className = elem.cacheClassElem;
224 if(elem.cacheClassTarget)
225 target.className = elem.cacheClassTarget;
232 <h1 class=
"title">Ninfacyzga-
01 Manual
</h1>
233 <div id=
"table-of-contents">
234 <h2>Table of Contents
</h2>
235 <div id=
"text-table-of-contents">
237 <li><a href=
"#org4ab28d5">1. Location Logging
</a>
239 <li><a href=
"#org3a44301">1.1. Narrative
</a></li>
240 <li><a href=
"#orgeb3a61f">1.2. Description
</a>
242 <li><a href=
"#org68434d8">1.2.1. Hardware
</a></li>
243 <li><a href=
"#org6bf1f28">1.2.2. Software
</a></li>
244 <li><a href=
"#orga640ec2">1.2.3. Output
</a></li>
247 <li><a href=
"#org78712e3">1.3. Operating Procedures
</a>
249 <li><a href=
"#orgcc76a4c">1.3.1. Initial Startup
</a></li>
250 <li><a href=
"#org8fbf566">1.3.2. Normal Startup
</a></li>
251 <li><a href=
"#orgbc8af37">1.3.3. Normal Operation
</a></li>
252 <li><a href=
"#org46c0af5">1.3.4. Normal Shutdown
</a></li>
253 <li><a href=
"#org662e1e8">1.3.5. Unscheduled Shutdown
</a></li>
254 <li><a href=
"#org70e088c">1.3.6. End of Life Disposal
</a></li>
262 <div id=
"outline-container-org4ab28d5" class=
"outline-2">
263 <h2 id=
"org4ab28d5"><span class=
"section-number-2">1</span> Location Logging
</h2>
264 <div class=
"outline-text-2" id=
"text-1">
266 This document was created by Steven Baltakatei Sandoval on
267 <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
268 was updated by Steven Baltakatei Sandoval on
<code>2020-
06-
30T19:
44Z
</code>
271 <div id=
"outline-container-org3a44301" class=
"outline-3">
272 <h3 id=
"org3a44301"><span class=
"section-number-3">1.1</span> Narrative
</h3>
273 <div class=
"outline-text-3" id=
"text-1-1">
275 Ninfacyzga-
01 records (logs) its position in time and space using a
276 <a href=
"https://en.wikipedia.org/wiki/Satellite_navigation_device">GPS receiver
</a>. The NMEA location data produced by the receiver is
277 converted into the more commonly used GPS data storage formats of GPX
278 and KML. All three types of data are then compressed and encrypted
279 against a set of public keys. The encrypted data is then written to
280 disk. Data produced by the receiver is segmented into
60-second chunks
281 before being processed and written to disk.
285 <div id=
"outline-container-orgeb3a61f" class=
"outline-3">
286 <h3 id=
"orgeb3a61f"><span class=
"section-number-3">1.2</span> Description
</h3>
287 <div class=
"outline-text-3" id=
"text-1-2">
289 <div id=
"outline-container-org68434d8" class=
"outline-4">
290 <h4 id=
"org68434d8"><span class=
"section-number-4">1.2.1</span> Hardware
</h4>
291 <div class=
"outline-text-4" id=
"text-1-2-1">
294 <li><a id=
"org3fcab7d"></a>Raspberry Pi Zero W
<br />
295 <div class=
"outline-text-5" id=
"text-1-2-1-1">
297 See the
<a href=
"https://www.raspberrypi.org/pi-zero-w/">OEM
</a> webpage for this product.
301 <li><a id=
"org4a38c06"></a>PiZ UpTime
2.0<br />
302 <div class=
"outline-text-5" id=
"text-1-2-1-2">
304 See the
<a href=
"https://alchemy-power.com/piz-uptime-2-0/">OEM
</a> webpage for this product.
310 <div id=
"outline-container-org6bf1f28" class=
"outline-4">
311 <h4 id=
"org6bf1f28"><span class=
"section-number-4">1.2.2</span> Software
</h4>
312 <div class=
"outline-text-4" id=
"text-1-2-2">
314 <code>bkgpslog
</code> : The bash script that performs the location data
315 collection and processing. Is an executable file contained within this
316 repository at
<code>exec/bkgpslog
</code>. It should be copied to
317 <code>$HOME/.local/bin
</code>.
321 <code>gpsd
</code> : A background daemon app capable of interfacing with the
322 Ozzmaker BerryGPS-IMU's GPS submodule. Installed and initialized by
327 <code>gpspipe
</code> : A command line app that polls
<code>gpsd
</code> and produces a stream
328 stdout consisting of GPS data lines in NMEA format. Installed via
333 <code>gpsbabel
</code> : A command line app that converts GPS data from one format
334 into another.
<code>bkgpslog
</code> uses it to convert NMEA data into GPX and
335 KML. Installed via
<code>apt
</code>.
339 <code>gzip
</code> : A simple command line app that compresses stdin into a
340 smaller stdout stream.
344 <code>age
</code> : A simple command line app that encrypts stdin against public
345 keys specified in its options. Produces encrypted stdout. Is an
346 executable file contained within this repository at
<code>exec/age
</code>. It
347 should be copied to
<code>$HOME/.local/bin
</code>.
352 <li><a id=
"org33a99e7"></a>Narrative
<br />
353 <div class=
"outline-text-5" id=
"text-1-2-2-1">
355 <code>bkgpslog
</code> populates a
60-second buffer with NMEA data from
<code>gpsd
</code> via
356 <code>gpspipe
</code>. This buffer is used by
<code>gpsbabel
</code> to produce GPX and KML
357 versions of the buffer. All
3 buffers are then comprssed with
<code>gzip
</code>,
358 encrypted with
<code>age
</code>, and then written to disk.
365 <div id=
"outline-container-orga640ec2" class=
"outline-4">
366 <h4 id=
"orga640ec2"><span class=
"section-number-4">1.2.3</span> Output
</h4>
367 <div class=
"outline-text-4" id=
"text-1-2-3">
370 <li><a id=
"orgbe90ee3"></a>File Formats
<br />
372 <li><a id=
"orga69e180"></a>NMEA
<br />
373 <div class=
"outline-text-6" id=
"text-1-2-3-1-1">
375 See the
<a href=
"https://en.wikipedia.org/wiki/NMEA_0183">Wikipedia page
</a> for this.
379 <li><a id=
"org03fca13"></a>GPX
<br />
380 <div class=
"outline-text-6" id=
"text-1-2-3-1-2">
382 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.
386 <li><a id=
"org9469dda"></a>KML
<br />
387 <div class=
"outline-text-6" id=
"text-1-2-3-1-3">
389 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.
395 <li><a id=
"org4923cfc"></a>Encryption Method
<br />
396 <div class=
"outline-text-5" id=
"text-1-2-3-2">
398 Files produced by the bkgpslog script are encrypted against a set of
399 public keys using
<a href=
"https://github.com/FiloSottile/age"><code>age
</code></a>, a simple command line encryption tool
400 selected over
<code>gpg
</code> because of
<code>age
</code>'s deliberate lack of
405 The public keys are bech32 strings supplied as options to bkgpslog
406 when called. The secret key should
<b>NOT
</b> be stored in Ninfacyzga-
01.
410 If a key pair was generated using
<code>age-keygen
</code>, then it is an
<a href=
"https://en.wikipedia.org/wiki/Curve25519"><code>X25519
</code></a>
411 key pair. See the
<a href=
"https://age-encryption.org/v1"><code>age
</code> Version
1 specification
</a>.
415 An
<code>ssh-rsa
</code> or
<code>ssh-ed25519
</code> SSH public key string may be used instead of
416 the bech32 public key string produced by
<code>age-keygen
</code> for convenience.
420 Help information for
<code>age
</code> is available by running
<code>$ age --help
</code>.
424 <li><a id=
"org5f006f6"></a>Encryption Commands
<br />
425 <div class=
"outline-text-6" id=
"text-1-2-3-2-1">
427 Files may be encrypted to several recipients using a command similar to:
429 <pre class=
"example">
430 timeout
"60s" gpspipe -r | gpsbabel -i nmea -f - -o gpx -F | age \
431 -r age1kza7pfshy7xwygf9349zgmk7x53mquvedgw9r98qwyyqhssh830qqjzlsw \
432 -r age1ce3pvzrqfcn2pc6zqzglc8ac8yjk3fzukpy08cesqjjwns53xywqmaq7xw \
433 -r age1pu5usxm743sx7rf22985xv2f4s0luzv6r6yx4fa7p8c2zyvp9fvqus2xr5 \
434 > location.gpx.age
438 In this example, the strings beginning with
<code>age1...
</code> are
439 bech32-formatted public key strings.
445 <li><a id=
"orgd0d1b14"></a>Decryption Commands
<br />
446 <div class=
"outline-text-6" id=
"text-1-2-3-2-2">
448 Files may be decrypted using a command similar to:
451 <pre class=
"example">
452 cat location.gpx.age | age -d -i key.txt
> location.gpx
456 The version of
<code>age
</code> used to perform the encryption
465 <div id=
"outline-container-org78712e3" class=
"outline-3">
466 <h3 id=
"org78712e3"><span class=
"section-number-3">1.3</span> Operating Procedures
</h3>
467 <div class=
"outline-text-3" id=
"text-1-3">
469 <div id=
"outline-container-orgcc76a4c" class=
"outline-4">
470 <h4 id=
"orgcc76a4c"><span class=
"section-number-4">1.3.1</span> Initial Startup
</h4>
471 <div class=
"outline-text-4" id=
"text-1-3-1">
473 See OEM (Ozzmaker)
<a href=
"https://ozzmaker.com/berrygps-berrygps-imu-quick-start-guide/">quickstart guide for the BerryGPS-IMU
</a>.
478 <li><a id=
"orgae43b4b"></a>Physical Setup
<br />
479 <div class=
"outline-text-5" id=
"text-1-3-1-1">
481 BerryGPS-IMU must be electrically connected to the correct pins on the
482 GPIO header of a Raspberry Pi Zero W.
486 <b>Optional
</b>: stack together with PiZ Uptime
2.0 module. No GPIO pins
487 conflict so a simple stacking and soldering with long header pins is
493 <li><a id=
"orgb3c2fc2"></a>Software Setup
<br />
495 <li><a id=
"org651214a"></a>Install Executables
<br />
496 <div class=
"outline-text-6" id=
"text-1-3-1-2-1">
498 Install Raspbian
10 Buster onto an SD card image. See the Raspberry Pi
499 Foundation
<a href=
"https://www.raspberrypi.org/documentation/installation/installing-images/README.md">installation instructions
</a>. Configure WiFi to permit log
500 file transfer. Configure SSH to permit remote administration via the
501 command line interface.
505 Make sure to install the
<code>unattended-upgrades
</code> package to make sure
506 the latest security patches for packages are installed. See
<a href=
"https://linux-audit.com/using-unattended-upgrades-on-debian-and-ubuntu/">this page
</a>
507 for a description of how
<code>unattended-upgrades
</code> works.
511 Install
<code>gpsd
</code>,
<code>gpspipe
</code>,
<code>git
</code>, and this repository for location
516 Install
<code>syncthing
</code> for log file transfer capability.
520 Place
<code>age
</code> binary (the one compiled for ARM CPU architecture for
521 Linux) in
<code>$HOME/.local/bin
</code>.
526 <li><a id=
"org1cc0c53"></a>Disable Swap File
<br />
527 <div class=
"outline-text-6" id=
"text-1-3-1-2-2">
529 Since standard Raspbian
10 (Buster) install involves copying
530 unencrypted file system image to SD card which is mounted by the
531 Raspberry Pi, system memory may be written to disk in the form of a
532 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
533 location log data is ever written to disk, swap file functionality
534 must be disabled
<sup><a id=
"fnr.1" class=
"footref" href=
"#fn.1">1</a></sup>.
538 Raspbian
10 uses dphys-swapfile to manage a swap file. It may be
539 disabled persistently
<sup><a id=
"fnr.2" class=
"footref" href=
"#fn.2">2</a></sup> by running
540 the following command:
543 <pre class=
"example">
544 sudo systemctl disable dphys-swapfile.service
549 To view the status of the swap file in Raspbian
10, run
<code>free -m
</code>:
552 <pre class=
"example">
553 pi@ninfacyzga-
01:~$ free -m
554 total used free shared buff/cache available
555 Mem:
432 86 36 21 309 268
560 After disabling the swap file and rebooting:
563 <pre class=
"example">
564 pi@ninfacyzga-
01:~$ free -m
565 total used free shared buff/cache available
566 Mem:
432 89 214 3 128 289
572 <li><a id=
"orgfdbf7d1"></a>Automatic Start Configuration
<br />
573 <div class=
"outline-text-6" id=
"text-1-3-1-2-3">
575 Edit the user cron job list with
<code>$ crontab -e
</code> to add the following
579 <pre class=
"example">
580 0 * * * * /bin/bash ~/bkgpslog --output ~/dir
582 @reboot /bin/bash ~/bkgpslog --output ~/dir
586 The first line will run
<code>bkgpslog
</code> at the start of every hour and save
587 output files to the
<code>dir
</code> directory in your home folder.
591 The second line will run
<code>bkgpslog
</code> when the system starts up.
595 <code>/bin/bash
</code> tells
<code>cron
</code> to run
<code>bkgpslog
</code> with Bash.
599 If encryption and compression are required, then the appropriate
600 options must be added. The lines that must be added via
<code>$ crontab -e
</code>
604 <pre class=
"example">
605 0 * * * * /bin/bash ~/bkgpslog -c -e -r age1z2...qkv6p -o ~/dir
607 @reboot /bin/bash ~/bkgpslog -c -e -r age1z2...qkv6p -o ~/dir
611 The
<code>age1z2...qkv6p
</code> is an
<code>age
</code> public key string. Please see the
612 <a href=
"#org4647532">Key Generation
</a> section for an explanation.
619 <pre class=
"example">
620 -c : tells bkgpslog to compress output
621 -e : tells bkgpslog log to encrypt output
622 -r : tells bkgpslog to interpret the next argument as a pubkey string
623 -o : tells bkgpslog to write output files to the directory represented
630 <li><a id=
"org2de2dd5"></a>Log Transfer Configuration
<br />
631 <div class=
"outline-text-6" id=
"text-1-3-1-2-4">
633 Log files may be shared to other machines via
<code>syncthing
</code>. See
<a href=
"https://docs.syncthing.net/">this
</a>
634 manual for how to set up a shared folder and add Ninfacyzga-
01 as a
635 device. Syncthing's directory synchronization capability allows a
636 remote machine to delete files from Ninfacyzga-
01 by deleting from the
637 shared folder that they both share.
641 When log files are removed from Ninfacyzga-
01 is not within the scope
647 <li><a id=
"org4647532"></a>Key Generation
<br />
648 <div class=
"outline-text-6" id=
"text-1-3-1-2-5">
650 An
<code>age
</code> encryption key may be generated like so:
652 <pre class=
"example">
653 $ umask # Gets current umask
654 0022 # Note: This is the default umask for Raspbian
10
655 $ umask
066 # So key.txt will have no perms except for owner (you)
656 $ umask # Confirm umask set to
066
658 $ age-keygen
> key.txt
659 Public key: age1pu5usxm743sx7rf22985xv2f4s0luzv6r6yx4fa7p8c2zyvp9fvqus2xr5
661 -rw-------
1 baltakatei baltakatei
184 Jun
29 18:
28 key.txt
662 $ umask
0022 # Return umask to default value
668 The resulting public/private keypair data looks like:
670 <pre class=
"example">
672 # created:
2020-
06-
29T18:
01:
56Z
673 # public key: age1pu5usxm743sx7rf22985xv2f4s0luzv6r6yx4fa7p8c2zyvp9fvqus2xr5
674 AGE-SECRET-KEY-
1NEUU5U2XGZGL9UYWNPU5DL99TGJJHFSN4F2E2WCCSDJJ6L5ZMLESNTVTU0
678 The file
<code>key.txt
</code> is not password-protected by default and should be
679 secured like an SSH public key should. The
<code>$ umask
066</code> command run
680 before the
<code>$ age-keygen
> key.txt
</code> command ensures
<code>key.txt
</code> will not
681 be readable, writeable, or executable to anyone except the owner
691 <div id=
"outline-container-org8fbf566" class=
"outline-4">
692 <h4 id=
"org8fbf566"><span class=
"section-number-4">1.3.2</span> Normal Startup
</h4>
693 <div class=
"outline-text-4" id=
"text-1-3-2">
695 Turn on Ninfacyzga-
01 by supplying
5VDC power to the Raspberry Pi. No
696 further interaction should be required.
700 <div id=
"outline-container-orgbc8af37" class=
"outline-4">
701 <h4 id=
"orgbc8af37"><span class=
"section-number-4">1.3.3</span> Normal Operation
</h4>
702 <div class=
"outline-text-4" id=
"text-1-3-3">
704 No interaction beyond continually supplying approximately
100mA of
705 5VDC power and occasionally removing log files to conserve disk space
710 <li><a id=
"orgeaa5887"></a>Log Transfer
<br />
711 <div class=
"outline-text-5" id=
"text-1-3-3-1">
713 Log files may be transferred by use of
<code>syncthing
</code> shared folders.
717 <li><a id=
"org51a37e4"></a>Automatic Updates
<br />
718 <div class=
"outline-text-5" id=
"text-1-3-3-2">
720 The
<code>automatic-upgrades
</code> package, if installed, should automatically
721 install security patches to packages installed via
<code>apt
</code>.
727 <div id=
"outline-container-org46c0af5" class=
"outline-4">
728 <h4 id=
"org46c0af5"><span class=
"section-number-4">1.3.4</span> Normal Shutdown
</h4>
729 <div class=
"outline-text-4" id=
"text-1-3-4">
731 The system may be shutdown via SSH by running:
734 <pre class=
"example">
741 <div id=
"outline-container-org662e1e8" class=
"outline-4">
742 <h4 id=
"org662e1e8"><span class=
"section-number-4">1.3.5</span> Unscheduled Shutdown
</h4>
743 <div class=
"outline-text-4" id=
"text-1-3-5">
745 Ninfacyzga-
01 as described and setup should tolerate unscheduled power
746 loss. Log files being written every
60 seconds means, at most,
60
747 seconds worth of location data may be lost.
751 <div id=
"outline-container-org70e088c" class=
"outline-4">
752 <h4 id=
"org70e088c"><span class=
"section-number-4">1.3.6</span> End of Life Disposal
</h4>
753 <div class=
"outline-text-4" id=
"text-1-3-6">
755 LiPo batteries used by the PiZ Uptime
2.0 module should be disposed of
756 properly with their potential ignitability in mind, especially if they
757 are not fully discharged.
761 Consult your local municipality for its
"E-Waste Disposal" (or
762 equivalent) policy. Metals used in the Raspberry Pi and related
763 components may be recycled.
767 Take extra precuation if lead solder was used in assembling the
768 electronics. Consumer electronics in early
21st century should use
776 <h2 class=
"footnotes">Footnotes:
</h2>
777 <div id=
"text-footnotes">
779 <div class=
"footdef"><sup><a id=
"fn.1" class=
"footnum" href=
"#fnr.1">1</a></sup> <div class=
"footpara"><p class=
"footpara">
781 <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>
784 <div class=
"footdef"><sup><a id=
"fn.2" class=
"footnum" href=
"#fnr.2">2</a></sup> <div class=
"footpara"><p class=
"footpara">
785 Persistant disabling of swap in
787 <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>
793 <div id=
"postamble" class=
"status">
794 <p class=
"author">Author: Steven Baltakatei Sandoval
</p>
795 <p class=
"date">Created:
2020-
06-
30 Tue
19:
45</p>
796 <p class=
"validation"><a href=
"http://validator.w3.org/check?uri=referer">Validate
</a></p>