# Introduction

The Lollipop is a [single-board computer (SBC) (link)](https://en.wikipedia.org/wiki/Single-board_computer) cloud device, with the ability to manage your own cellular internet, wifi, VPN, firewall, web server, data backup and syncing, ad blocker, notes and project management, git, RSS feeds, "read it later" bookmark management, GPS mapping, and more. Some of these features (like GPS and cellular internet) require extra hardware, but the base device consists of an SBC with an SD memory card loaded with Armbian.

# Getting Started
You will need a single-board computer (SBC) like a [Pine64](https://www.pine64.org/) or an [Orange Pi (link)](http://www.orangepi.org/). For more about hardware, and why the Raspberry Pi is not recommended, see the [hardware notes (link)](hardware_notes.md). There are additional [preflight hardware considerations (link)](preflight.md), as well.

For the basic start up and set up of your Pine64, you will need either (a) a keyboard and a way to view the display (HDMI cord OR a [serial console](https://www.pine64.org/?product=padi-serial-console)), OR (b) an ethernet connection.

You will also need an SD card formatted with Armbian installed.

## Installing Armbian onto an SD card
[Armbian](https://www.armbian.com/) is a Linux operating system based on Debian and Ubuntu, specifically designed for [ARM boards (link)](https://en.wikipedia.org/wiki/ARM_architecture). You will need to [download Armbian for the board you're setting up (link)](https://www.armbian.com/download/) (we're using a Pine64 and recommend [Armbian Xenial (link)](https://www.armbian.com/pine64/) if you're using an HDMI connection, or [Armbian Jessie (link)](https://www.armbian.com/pine64/) if you're using a serial connection), and save it to your computer. We recommend using Xenial (for HDMI) if you've never set up a serial connection before, because additional drivers and software are required to get your development computer to communicate with the Lollipop via serial connection. __NOTE:__ experienced users might want to use the experimental versions, but the rest of us should stick to the supported and stable builds.

You will need to extract (unzip) the Armbian file once it downloads. Armbian is downloaded as a 7z archive (with the file extension .7z), so you may need a special program to extract this file. Try [Keka (link)](https://www.keka.io/) for MacOS, [7-zip (link)](http://www.7-zip.org/) for Windows, or 7z for Linux (`apt-get install p7zip-full`). Extract the file to a location you can remember (such as your desktop).

You will need to format your SD card as FAT32 before you can use it.

To format an SD card on a Mac, open Terminal and use this command: `diskutil eraseVolume FAT32 ARMBIAN /dev/usb1` where ARMBIAN is the permanent name of your drive (so change it if you wish) and /dev/usb1 is the location of your SD card. The easiest way to find the location of your SD card is to open Finder, click on your computer's name under devices, and you should see your SD card in the list. Right-click (or `command + click`) on that SD card, and choose "copy." When you paste (`command + V`) into Terminal, it will paste the path of the device (such as `/Volumes/UNNAMED`). After you run `diskutil eraseVolume FAT32 ARMBIAN /dev/usb1`, it's time to install Armbian.

Windows users will need some separate instructions. For now, try [Wikihow's article about formatting with Windows (link)](https://www.wikihow.com/Format-FAT32).

If you don't already have one, you will also need an application/program to properly prepare your formatted SD card. [Etcher (link)](https://etcher.io/) works on most computers. To use Etcher: Insert the SD card into your computer (using an built-in reader or an external USB reader), load Etcher, select your newly extracted Armbian .img file, select the SD card you want to set up, and click Flash!

When Etcher is finished, you're ready to insert your Armbian SD card into your Pine64. Insert your HDMI cable or serial console, and keyboard or ethernet if you are using it, and then plug in the power cord. The Pine64 should boot automatically.

If your board does not boot (the screen is blank or you cannot connect via SSH), but the power light is on and your SD card is properly inserted into the Pine64 (make sure it clicks into place!) your SD card may not have flashed properly. Repeat the process for formatting the SD card and running Etcher, and try again.

## Your First Time Booting Armbian
If you're not using a keyboard, connect your Pine64 with an ethernet cable to your local router and use your development computer to load Terminal (if using a Mac) and run `ssh root@192.168.1.x` (your board's IP address! make sure to use the root@IP_address format or else Terminal will tell the Pine64 that you're trying to log in with your Mac's username) OR use [PuTTY (link)](https://putty.org/) to open an SSH connection to your Pine64. You may need to log into your router's settings to [find the IP address of your Pine64 (link)](https://www.howtogeek.com/204057/how-to-see-who%E2%80%99s-connected-to-your-wi-fi-network/).

Both keyboard and ethernet users will continue on the same path here:

![First login screen](https://git.lollipop.holdmybeer.solutions/lollipop-cloud/docs/src/branch/master/screenshots/first-login.png)

At first boot, you will be prompted to log in with the default login (root) and password (1234), and then prompted to change your root password. When you set your root password, make it a good one and don't forget it! Anyone with root access to your computer will have access to everything on that computer, including the ability to make malicious changes.

Next, you will be prompted to create a new user account and password. This account will have [sudo (link)](https://en.wikipedia.org/wiki/Sudo) privileges, which is just as powerful (and dangerous) as root access, so you'll need another secure password. It is good practice to never login as root, so you'll be using this new user account for everything going forward.

Once you've created an account, the desktop environment will load, and it's time to start setting things up!

NOTE: If you are connected via SSH (running without a display or "headless"), you can also install [VNC Viewer (link)](https://www.realvnc.com/) on your development computer, and [set up VNC (Virtual Network Computing) on your Pine64 (link)](https://forum.pine64.org/showthread.php?tid=794), so you can connect virtually without having to deal with a separate keyboard/monitor/etc setup. This is something you may use many times in the future, so it's worth taking the time to set it up, even if you're currently using a dedicated keyboard and display for your Lollipop. [More information about VNC. (link)](https://en.wikipedia.org/wiki/Virtual_Network_Computing)

![The view with VNC Viewer](https://git.lollipop.holdmybeer.solutions/lollipop-cloud/docs/src/branch/master/screenshots/vnc-viewer.png)

# Base Setup

At this point, you might be ready to jump into the [Lollipop base setup code (link)](https://git.lollipop.holdmybeer.solutions/lollipop-cloud/lolipop_lan_cloud/src/branch/master/docs/armbian/base_setup.md). If you need a little more detail, continue following along here instead.

If you are sticking with the command line via SSH, these steps will hopefully be straightforward. If you are using your new Lollipop with the desktop environment, you will have to open up a terminal window.

It's good practice to run `sudo apt update` at the command line to make sure everything is up to date, and you may need to run `sudo apt upgrade` as well (the command line will tell you if there are upgrades but it won't hurt to run it either way). After updating and upgrading, run `systemctl reboot`, give the board a minute or two to reboot, and then reconnect via SSH.

__Note:__ if you get an error like `perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory`, try the following command: `export LC_ALL="en_US.UTF-8"`. If you continue to get this error, you can edit the /etc/ssh/ssh_config file (see the next paragraph for more detail about file editing, but you will have to do `sudo nano /etc/ssh/ssh_config`) and comment out (add `#` to) the `SendEnv LANG LC_*` line.


You will have to edit some files. Nano is a simple built-in text editor, but feel free to use your text editor of choice. Examples here will use Nano.

You will be disabling auto-updates in order to save bandwidth and time, and to prevent data overages for those with data caps.

First file to edit:
`sudo nano /etc/apt/apt.conf.d/02periodic`
 and change the line ```APT::Periodic::Enable "1";``` to ```APT::Periodic::Enable "0";```

 Then enter command `control-x` (to exit) and choose `y` to save changes. Hit enter to keep the file name the same, and now you're reading to move on to the next file.

Second file to edit: `sudo nano /etc/apt/apt.conf.d/20auto-upgrades` and change the line ```APT::Periodic::Update-Package-Lists "1";``` to ```APT::Periodic::Update-Package-Lists "0";```

AND change ```APT::Periodic::Unattended-Upgrade "1";``` to ```APT::Periodic::Unattended-Upgrade "0";```

(remember to `ctrl-x` and `y` to save your changes).

Third file to edit: `sudo nano /etc/ssh/sshd_config` and make sure the following is set: `PermitRootLogin no`. This is a longer file, so enter `ctrl-w` to search for `PermitRootLogin`. You may have to `ctrl-w` and `enter` again to find the line you're looking for. Change `yes` to `no` if necessary and then save your changes (`ctrl-x` and `y`).

Now restart the service with `systemctl restart sshd`.

## Congratulations! You've installed an entire operating system and completed the base setup! Time to customize your Lollipop!

For now, you can try the dev-level documentation for the [Lollipop project (link)](https://git.lollipop.holdmybeer.solutions/lollipop-cloud/lolipop_lan_cloud) (you have completely finished The Basics section, and you are ready to dive into Networking), but beginner-level documentation is in the works and this will be updated as it is completed.

Check and contribute to [the issue tracker (link)](https://git.lollipop.holdmybeer.solutions/lollipop-cloud/docs/issues) for errors, typos, questions, and omissions to help improve this documentation. Thanks!
