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-29 Mon 22:27 --> 
   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=
"#orgb231d05">1. Location Logging
</a> 
 239 <li><a href=
"#orga7b5d26">1.1. Narrative
</a></li> 
 240 <li><a href=
"#orgc6050dc">1.2. Description
</a> 
 242 <li><a href=
"#org832c363">1.2.1. Hardware
</a></li> 
 243 <li><a href=
"#orgbe37034">1.2.2. Software
</a></li> 
 244 <li><a href=
"#org578c835">1.2.3. Output
</a></li> 
 247 <li><a href=
"#org7bb3aad">1.3. Operating Procedures
</a> 
 249 <li><a href=
"#orge393fe1">1.3.1. Initial Startup
</a></li> 
 250 <li><a href=
"#orgcaf0980">1.3.2. Normal Startup
</a></li> 
 251 <li><a href=
"#org73571fc">1.3.3. Normal Operation
</a></li> 
 252 <li><a href=
"#orga82b5fb">1.3.4. Normal Shutdown
</a></li> 
 253 <li><a href=
"#org5305842">1.3.5. Unscheduled Shutdown
</a></li> 
 254 <li><a href=
"#org4a5c4af">1.3.6. End of Life Disposal
</a></li> 
 262 <div id=
"outline-container-orgb231d05" class=
"outline-2"> 
 263 <h2 id=
"orgb231d05"><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 <span class=
"timestamp-wrapper"><span class=
"timestamp"><2020-
06-
29 Mon 
12:
14> </span></span> 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 
<span class=
"timestamp-wrapper"><span class=
"timestamp"><2020-
06-
29 Mon 
22:
06></span></span>.
 
 271 <div id=
"outline-container-orga7b5d26" class=
"outline-3"> 
 272 <h3 id=
"orga7b5d26"><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-orgc6050dc" class=
"outline-3"> 
 286 <h3 id=
"orgc6050dc"><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-org832c363" class=
"outline-4"> 
 290 <h4 id=
"org832c363"><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=
"orgb0e8ddc"></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=
"org7b37dcc"></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-orgbe37034" class=
"outline-4"> 
 311 <h4 id=
"orgbe37034"><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=
"org0c488b2"></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-org578c835" class=
"outline-4"> 
 366 <h4 id=
"org578c835"><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=
"org72b99a5"></a>File Formats
<br /> 
 372 <li><a id=
"orgdb7241e"></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=
"orgeea00c8"></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=
"orgc8b05e7"></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=
"org5c2a1ad"></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=
"org460d569"></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=
"org1a5268c"></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-org7bb3aad" class=
"outline-3"> 
 466 <h3 id=
"org7bb3aad"><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-orge393fe1" class=
"outline-4"> 
 470 <h4 id=
"orge393fe1"><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=
"org5d6581b"></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=
"orgdf04559"></a>Software Setup
<br /> 
 495 <li><a id=
"org4804e32"></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=
"orgcf659dd"></a>Automatic Start Configuration
<br /> 
 527 <div class=
"outline-text-6" id=
"text-1-3-1-2-2"> 
 529 Edit the user cron job list with 
<code>$ crontab -e
</code> to add the following
 
 533 <pre class=
"example"> 
 534 0 * * * * /bin/bash ~/bkgpslog --output ~/dir
 
 536 @reboot /bin/bash ~/bkgpslog --output ~/dir
 
 540 The first line will run 
<code>bkgpslog
</code> at the start of every hour and save
 
 541 output files to the 
<code>dir
</code> directory in your home folder.
 
 545 The second line will run 
<code>bkgpslog
</code> when the system starts up.
 
 549 <code>/bin/bash
</code> tells 
<code>cron
</code> to run 
<code>bkgpslog
</code> with Bash.
 
 553 If encryption and compression are required, then the appropriate
 
 554 options must be added. The lines that must be added via 
<code>$ crontab -e
</code> 
 558 <pre class=
"example"> 
 559 0 * * * * /bin/bash ~/bkgpslog -c -e -r age1z2...qkv6p -o ~/dir
 
 561 @reboot /bin/bash ~/bkgpslog -c -e -r age1z2...qkv6p -o ~/dir
 
 565 The 
<code>age1z2...qkv6p
</code> is an 
<code>age
</code> public key string. Please see the
 
 566 <a href=
"#orgc8fd75d">Key Generation
</a> section for an explanation.
 
 573 <pre class=
"example"> 
 574 -c : tells bkgpslog to compress output
 
 575 -e : tells bkgpslog log to encrypt output
 
 576 -r : tells bkgpslog to interpret the next argument as a pubkey string
 
 577 -o : tells bkgpslog to write output files to the directory represented
 
 584 <li><a id=
"org5275559"></a>Log Transfer Configuration
<br /> 
 585 <div class=
"outline-text-6" id=
"text-1-3-1-2-3"> 
 587 Log files may be shared to other machines via 
<code>syncthing
</code>. See 
<a href=
"https://docs.syncthing.net/">this
</a> 
 588 manual for how to set up a shared folder and add Ninfacyzga-
01 as a
 
 589 device. Syncthing's directory synchronization capability allows a
 
 590 remote machine to delete files from Ninfacyzga-
01 by deleting from the
 
 591 shared folder that they both share.
 
 595 When log files are removed from Ninfacyzga-
01 is not within the scope
 
 601 <li><a id=
"orgc8fd75d"></a>Key Generation
<br /> 
 602 <div class=
"outline-text-6" id=
"text-1-3-1-2-4"> 
 604 An 
<code>age
</code> encryption key may be generated like so:
 
 606 <pre class=
"example"> 
 607 $ umask          # Gets current umask
 
 608 0022             # Note: This is the default umask for Raspbian 
10 
 609 $ umask 
066      # Sets umask so key.txt will have no permissions except for owner (you)
 
 610 $ umask          # Confirm umask set to 
066 
 612 $ age-keygen 
> key.txt
 
 613 Public key: age1pu5usxm743sx7rf22985xv2f4s0luzv6r6yx4fa7p8c2zyvp9fvqus2xr5
 
 615 -rw------- 
1 baltakatei baltakatei 
184 Jun 
29 18:
28 key.txt
 
 616 $ umask 
0022     # Return umask to default value
 
 622 The resulting public/private keypair data looks like:
 
 624 <pre class=
"example"> 
 626 # created: 
2020-
06-
29T18:
01:
56Z
 
 627 # public key: age1pu5usxm743sx7rf22985xv2f4s0luzv6r6yx4fa7p8c2zyvp9fvqus2xr5
 
 628 AGE-SECRET-KEY-
1NEUU5U2XGZGL9UYWNPU5DL99TGJJHFSN4F2E2WCCSDJJ6L5ZMLESNTVTU0
 
 632 The file 
<code>key.txt
</code> is not password-protected by default and should be
 
 633 secured like an SSH public key should. The 
<code>$ umask 
066</code> command run
 
 634 before the 
<code>$ age-keygen 
> key.txt
</code> command ensures 
<code>key.txt
</code> will not
 
 635 be readable, writeable, or executable to anyone except the owner
 
 645 <div id=
"outline-container-orgcaf0980" class=
"outline-4"> 
 646 <h4 id=
"orgcaf0980"><span class=
"section-number-4">1.3.2</span> Normal Startup
</h4> 
 647 <div class=
"outline-text-4" id=
"text-1-3-2"> 
 649 Turn on Ninfacyzga-
01 by supplying 
5VDC power to the Raspberry Pi. No
 
 650 further interaction should be required.
 
 654 <div id=
"outline-container-org73571fc" class=
"outline-4"> 
 655 <h4 id=
"org73571fc"><span class=
"section-number-4">1.3.3</span> Normal Operation
</h4> 
 656 <div class=
"outline-text-4" id=
"text-1-3-3"> 
 658 No interaction beyond continually supplying approximately 
100mA of
 
 659 5VDC power and occasionally removing log files to conserve disk space
 
 664 <li><a id=
"org55738e2"></a>Log Transfer
<br /> 
 665 <div class=
"outline-text-5" id=
"text-1-3-3-1"> 
 667 Log files may be transferred by use of 
<code>syncthing
</code> shared folders.
 
 671 <li><a id=
"org16c5bdc"></a>Automatic Updates
<br /> 
 672 <div class=
"outline-text-5" id=
"text-1-3-3-2"> 
 674 The 
<code>automatic-upgrades
</code> package, if installed, should automatically
 
 675 install security patches to packages installed via 
<code>apt
</code>.
 
 681 <div id=
"outline-container-orga82b5fb" class=
"outline-4"> 
 682 <h4 id=
"orga82b5fb"><span class=
"section-number-4">1.3.4</span> Normal Shutdown
</h4> 
 683 <div class=
"outline-text-4" id=
"text-1-3-4"> 
 685 The system may be shutdown via SSH by running:
 
 688 <pre class=
"example"> 
 695 <div id=
"outline-container-org5305842" class=
"outline-4"> 
 696 <h4 id=
"org5305842"><span class=
"section-number-4">1.3.5</span> Unscheduled Shutdown
</h4> 
 697 <div class=
"outline-text-4" id=
"text-1-3-5"> 
 699 Ninfacyzga-
01 as described and setup should tolerate unscheduled power
 
 700 loss. Log files being written every 
60 seconds means, at most, 
60 
 701 seconds worth of location data may be lost.
 
 705 <div id=
"outline-container-org4a5c4af" class=
"outline-4"> 
 706 <h4 id=
"org4a5c4af"><span class=
"section-number-4">1.3.6</span> End of Life Disposal
</h4> 
 707 <div class=
"outline-text-4" id=
"text-1-3-6"> 
 709 LiPo batteries used by the PiZ Uptime 
2.0 module should be disposed of
 
 710 properly with their potential ignitability in mind, especially if they
 
 711 are not fully discharged.
 
 715 Consult your local municipality for its 
"E-Waste Disposal" (or
 
 716 equivalent) policy. Metals used in the Raspberry Pi and related
 
 717 components may be recycled.
 
 721 Take extra precuation if lead solder was used in assembling the
 
 722 electronics. Consumer electronics in early 
21st century should use
 
 730 <div id=
"postamble" class=
"status"> 
 731 <p class=
"date">Date: 
2020-
06-
29T22:
16Z
</p> 
 732 <p class=
"author">Author: Steven Baltakatei Sandoval
</p> 
 733 <p class=
"date">Created: 
2020-
06-
29 Mon 
22:
27</p> 
 734 <p class=
"validation"><a href=
"http://validator.w3.org/check?uri=referer">Validate
</a></p>