+-----------------------------------------+
| Server: Part 1                          |
+-----------------------------------------+-------+
|                                                 |
| Date: 20181124-13:15                            |
| Author: Sloum                                   |
| Soundtrack: Black Metalic by Catherine Wheel    |
|                                                 |
+-------------------------------------------------+-------------------------+

As mentioned earlier, I am trying to set up a small ssh/gopher/code portal.
I have decided to document the setup process here. I am setting this up with
a Raspberry Pi Zero W. Here is what has been done so far:


Step 1: Get the Pi up and running
----------------------------------
This step is pretty basic. Inserted the SD card into a computer/laptop and
use Etcher[0] to flash Rasbian Lite onto the SD card. Then unmounted the card
and put it into the Pi. After that plug the Pi into a monitor and keyboard (I
used a terrible cheap keybaord my wife had meant to throw away). Boot up and
log into the Pi. Default user is "pi" and default password is "raspberry".

At this point I recommend changing the password for the "pi" user. I did this
via the "passwd" command, but it can also be done with "raspi-config", which
will be used for other things in the next step anyway.


Step 2: Configure WIFI & SSH
----------------------------------
In "raspi-config" changed the hostname to what you want it to be. Then update
the time zone and locale. I am running wireless (via WIFI) rather than using
ethernet. Getting the WIFI on the Pi to work was a really big pain. It tookctr
quite a lot of time to get going. First you will want to set the WIFI country
in the "raspi-config" tool. While in the tool activate SSH.

While it is possible that your Pi may just work on WIFI at this point, it
seems unlikely. Here are some things to try:

- Running "sudo iwlist wlan0 scan" will show you available WIFI networks.
- Edit "/etc/wpa_supplicant/wpa_supplicant.conf" as administrator as follows:

       ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
       update_config=1

       # Use your country code
       country=US

       network={
               # use quotes around the ssid & psk
               # replace networkname with your access point name
               # replace networkpassword with your access key
               # key_mgmt gets set as what you use e.g. NONE or WPA-PSK
               ssid="networkname"
               psk="networkpassword"
               key_mgmt=WPA-PSK
       }

- Edit "/etc/network/interfaces" as administrator to be similar to:

       source-directory /etc/network/interfaces.d

       auto lo
       iface lo inet loopback

       allow-hotplug wlan0
       iface wlan0 inet static
               #your local IP here
               address x.x.x.x
               #your netmask here
               netmask x.x.x.x
               # your gateway here
               gateway x.x.x.x
           wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

- Run "sudo systemctl disable dhpcd && sudo systemctl enable networking"

- Backup sshd_config file:
       "sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults"

- Edit sshd config as desired (lots of settings options available)
       I sandbox all users except root to force chrooted SFTP access

- Update the "/etc/skel" directory so that new users get set up the same way

- Log into ssh locally: "ssh [email protected]"
       This will use passwords unless you already set up using
       authorized keys during the sshd_config editing phase.

       I set mine up to use authorized keys and organized a file
       structure for storing those keys based on username as part
       of my sshd_config.

-------------------------------------------------------------------

That is basically where I am at. I, of course, also updated and upgraded
via apt. Installed vim, updated vimrc, updated bash_aliases, etc.

I am looking into gopher server software options. It seems like gophernicus
is likely the best call, but it would be fun to support a less mature
project if I can find something that will work well.

I am going to start coding a custom shell in Python soon and will likely
document that process in the coming updates.

I am still thinking about doing version control hosting as well. I am
trying to decide between Bazaar[1] and Git. Bazaar has some cool stuff
going for it... meh. I'll keep thinking on it while I get gopher set up
on the pi.

Lastly, I need to get dynamic DNS set up. I got a static IP assigned by
my router and port forwarding set up for SSH and Gopher. Do any of you
have advice for dynamic DNS providers, gopher server software/daemon,
custom shell styles, etc? Feel free to respond via your gopher or email
me: [email protected]

I hope those of you that celebrate it had a lovely thanksgiving! I had
a great time with family and have been enjoying the long weekend.



[0] https://www.balena.io/etcher/
[1] https://bazaar.canonical.com/en/