# 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 an [Orange Pi (link)](http://www.orangepi.org/).

For the basic start up and set up of your Orange Pi, you will need one of the following configurations:

- a keyboard and a way to view the display (either an HDMI cable with a monitor OR a [serial console](https://www.pine64.org/?product=padi-serial-console))
- an ethernet connection by connecting your SBC to your home router with an ethernet cord (or "patch cable")

__NOTE:__ If you are going to use your SBC wirelessly as a server and a client (example: your laptop will access the internet via your Lollipop, where your Lollipop is connected to a coffee shop's public wifi), you are going to need TWO wifi adapters. If you're using the OrangePi PC Plus, it has its own onboard wifi, but you will need to add a second wifi adapter that uses a USB port, such as this [OurLink Wifi USB Dongle](https://ourlink.us/collections/some/products/glam-hobby-600mbps-ac600-dual-band-usb-wifi-dongle-wireless-network-adapter-for-laptop-desktop-computer-backward-compatible-with-802-11-a-b-g-n-products-2-4-ghz-150mbps-5ghz-433mbps).

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

## Installing Armbian on 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).

__NOTE:__ Raspberry Pi 3 users will need to use [Raspbian (link)](https://www.raspberrypi.org/downloads/raspbian/) instead of Armbian.

You will need to [download Armbian (link)](https://dl.lollipopcloud.solutions/files/armbian)  for the board you're setting up, and save it to your computer. We highly recommend using an HDMI connection 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. Your "development computer" will be the laptop or desktop computer you use daily, or have borrowed for this purpose.

__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. Here's how:

#### For Mac users:
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.

#### For Windows users:

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

#### For Linux users:

This can vary very slightly by distribution, but this article about [how to format an SD card in Linux (link)](https://www.cio.com/article/3176034/linux/how-to-format-an-sd-card-in-linux.html) should do the trick.

#### For Android phone users with an SD card slot:

This is a trick if you just don't want to be bothered with the previous options. Insert the SD card in your Android phone, then go to settings > storage > removable storage > format. Source: [SD card formatting (link).](https://raspberrypi.stackexchange.com/questions/1446/how-can-i-reformat-my-sd-card-to-use-it-normally-again#comment81498_1446)

#### Once you've formatted your SD card:

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 Orange Pi. Insert your HDMI cable or serial console, and keyboard or ethernet if you are using it, and then plug in the power cord. The Orange Pi 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 Orange Pi (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

Now you're reading to turn on your Lollipop device for the first time!

If you're not using a keyboard, connect your Orange Pi (or the board you're using) 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 Orange Pi 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 Orange Pi. You may need to log into your router's settings to [find the IP address of your Orange Pi (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](/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 Orange Pi (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](/screenshots/vnc-viewer.png)

# Base Setup

At this point, you might be ready to jump into the [Lollipop base setup code (link)](https://git.lollipopcloud.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!

Now you're ready to head back to the [README (link)](docs/README.md) and get started on the networking section.

**Closing suggestions:**

- It is highly recommended that once you set up networking on your new Lollipop Cloud, that you follow the README's suggestion to install Cockpit. After you install Cockpit, you will be able to configure the rest of your desired Lollipop Cloud features through a web browser on your development (or home) computer.

- Just in case you need all of our documentation while offline or on a bad network connection, mirror these docs to an internet-connected computer by entering the following at the command line: ```git clone https://git.lollipopcloud.solutions/lollipop-cloud/docs.git /root/docs``` where ```/root/docs``` is where you want these documents to live.

_Check and contribute to [the issue tracker (link)](https://kanban.lollipopcloud.solutions/project/admin-lollipop-documentation/kanban) for errors, typos, clarifications, and omissions to improve this documentation. Thanks!_
