ODROID-C2 from scratch (Ubuntu 18.04)

OdroidC2 image from scratch

(1) Install the Image to your eMMC
(2) Server tweaks
(2.1) Bash (auto-) completion
(2.2) Create a new user and disable root
(2.3) Adjust your time and timezone
(2.4) ssh modifications
(2.5) optional: rename your server
(3) Update your server
(4) Performance tuning: boot.ini
(5) Preparation for Nextcloud

(1) Install the Image to your eMMC

First download Odroids ubuntu image:


Plug your eMMC to your Desktop and search for your eMMC via

sudo -s
fdisk -l

At my environment it is called “/dev/mmcblk0“. Extract the previously downloaded image:

unxz unxz ubuntu-18.04.3-3.16-minimal-odroid-c2-20190814.img.xz

Then prepare your eMMC for acting as your server, therefore clone the Ubuntu image to your eMMC:

dd if=ubuntu-18.04.3-3.16-minimal-odroid-c2-20190814.img of=/dev/mmcblk0

Wait a few minutes until the prompt will be back again and the card was written for you.

Now unplug the eMMC module from your desktop and plug the card to your ODROID-C2. In addition also plug your keyboard, your monitor, your LAN and at least the power cable.  The ODROID-C2 will reboot automatically and finally the login prompt will appear on your plugged monitor. Login as user “root” using the password “odroid“.

user: root
password: odroid

We will update the expired Odroid C2 Key and look for the current IP address of the server to use ssh for all further installation steps:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9
apt install net-tools -y && ifconfig

The eth0 interface will be shown first. You can find the ip address in the second row, e.g.:

inet addr:

Optional: Configure the german keyboard layout

apt install language-pack-de
dpkg-reconfigure keyboard-configuration
locale-gen de_DE@euro
dpkg-reconfigure console-setup

Now you can unplug the monitor and the keyboard from your ODROID-C2 and switch back to your desktop-environment. Start your preferred ssh client (e.g. Terminal or Putty) and connect to your server:

ssh root@

Type in “yes” and confirm (enter) to continue and then type in the password “odroid“.

Congratulations, your server is ready to use.

(2) Server tweaks

(2.1) Bash (auto-) completion

To enable bash’s auto completion install bash-completion first:

apt install bash-completion -y

Then edit the bash

cp /etc/bash.bashrc  /etc/bash.bashrc.bak
vi /etc/bash.bashrc

and search for ” # enable bash completion in interactive shells”. Remove the leading ‘#’ in front of the following 7 rows:

# enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion

Save and quit the file and reboot.

shutdown -r now



(2.2) Create a new user and disable root

Reconnect to your server and create a new user called “next

adduser next

and set at least the password and Name.

Grant the new user sudo privileges by running:

usermod -aG sudo next

Logout from root shell


and logon as user „next“ to your server again:

ssh next@

Disable root:

sudo passwd -dl root

and confirm that action by typing new users (next) password.

(2.3) Adjust your time and timezone

The server is using UTC per default. Adjust your time-settings e.g. to Europe/Berlin by running:

sudo dpkg-reconfigure tzdata

and follow the wizard:

(2.4) ssh modifications

Please ensure root isn’t allowed to login using ssh anymore.

sudo ssh-keygen -q -f /etc/ssh/ssh_host_rsa_key -N '' -b 4096 -t rsa
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vi /etc/ssh/sshd_config

Set “ServerKeyBits” to 4096:

ServerKeyBits 4096

Set “PermitRootLogin” to no:

PermitRootLogin no

Then restart the ssh service to reload the ssh settings.

sudo service ssh restart

For sure, much more security parameters are to set. Find out my example here. It is up to you to harden your server.

(2.5) optional: rename your server

Change odroid64 to e.g. cloud

sudo cp /etc/hosts /etc/hosts.bak
sudo vi /etc/hosts localhost cloud
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Then change /etc/hostname:

sudo cp /etc/hostname /etc/hostname.bak
sudo vi /etc/hostname

Replace odroid64 to cloud either:


Save and quit the file (:wq!) and reboot

sudo reboot

your server.

(3) Update your server

Finally update your server

sudo apt update && sudo apt upgrade -y

and reboot your server a last time:

sudo reboot

Yeah, done!

(4) Performance tuning: boot.ini

For performance reasons you should set

sudo -s
vi /media/boot/boot.ini


# Server Mode (aka. No Graphics)
# Setting nographics to 1 will disable all video subsystem
# This mode is ideal of server type usage. (Saves ~300Mb of RAM)
setenv nographics "1"

# Meson Timer
# 1 - Meson Timer
# 0 - Arch Timer
# Using meson_timer improves the video playback however it breaks KVM (virtualization).
# Using arch timer allows KVM/Virtualization to work however you'll experience poor video
setenv mesontimer "1"

That’s all for now.

Now start with the preparation for Nextcloud on ARM64:

Just follow the installation guide from here and you will enjoy Nextcloud latest on your Odroid C2.

Carsten Rieger

Carsten Rieger

Carsten Rieger is a senior system engineer in full-time and also working as an IT freelancer. He is working with linux environments for more than 15 years, an Open Source enthusiast and highly motivated on linux installation and troubleshooting. Mostly working with Debian/Ubuntu Linux, Nginx and Apache web server, MariaDB/MySQL/PostgreSQL, PHP, Cloud infrastructure (e.g. Nextcloud) and other open source projects (e.g. Roundcube) and in voluntary work for the Dr. Michael & Angela Jacobi Stiftung for more than 7 years.