Phones have become very powerful these days. Its easy to find an Android phone under $200 that is capable of powering up a desktop computer with decent performance. I was thinking about setting up a media server in my home network so I can watch movies and TV shows on all devices, I was convinced to use a Raspberry Pie for this but then I thought what if I use my Android phone for the same, its much more capable than a pie and has a lot hardware capabilities that the pie doesn’t offer out of the box. So I set course and took out my old Android phone, did some hacking and got the media server working on it. Its a long process to setup the media server and the first step in getting their is to install Ubuntu or any other Linux distribution on the Android phone. I’ll talk about the media server setup some other day but lets see how to install Ubuntu on Android.
Getting the device ready
Most of the people I know have at least one abandoned Android phone. Though its completely fine to do, I don’t recommend using your primary phone to follow this post as it would end your phone’s warranty. If you are willing to take the risk you can still follow. First, make sure you have the following items checked:
- A phone running Android 7+ with root access
- Basic knowledge of Linux and ssh
- Internet connection
I have tested this approach on the following configurations
- Xiaomi Redmi Note 5 Pro, running Lineage OS 17.1(Android 10), Qualcomm SDM636 Snapdragon 636 arm64 processor
- Xiaomi Redmi 1s, running Lineage OS 14.1(Android 7.1.2) Qualcomm MSM8228 Snapdragon 400 ARM processor
Linux Deploy is an app that makes this process easy, go ahead and install the app from Google Play Store. You will need root access enabled on your device to get it working. The app greets you with a screen like in the screenshot below, please not that I am currently using version 2.6.0 it might differ if you use another app version.
The instructions are pretty straight-forward and needs no explanation. Tap on the little settings button at the bottom right and you’ll see a screen as shown below, you can follow the configuration you see here or you can change according to your preference. One important thing to choose is the architecture, in the screenshot you see
arm64 which is same as the android phone’s CPU architecture. Its fine to use other architectures as well but I recommend choosing the one which is most compatible with the software you are going to install in the future. The media server I wanted to install works well with the
arm64. Also, if you don’t know the CPU architecture of your phone you can install CPU-Z from the play store.
More about configuration:
- Image Size - Consider this as the partition size for your Linux installation.
- Username & Password - Use anything, we will use it to login with ssh
- Privileged Users - Additional custom permissions for the user
- Mount points - Use it to mount your internal or external sdcard to use in Ubuntu, more on this later
- SSH - Enable this, we want to access this system inside our home network with ssh.
- Audio - We don’t need it for our usecase
- GUI - Since most of the time we will be accessing it through SSH I have skipped the GUI part. If you need GUI then you can setup a VNC viewer and configure it easily.
This is all the configuration that we need for now. Tap on the three dots on the top right and select
Install, the app will be downloading the entire linux image based on our configuration. Depending on your internet speed, if everything went well, you should see a screen as shown below. Now tap on the
Start button on the bottom left. The app will validate the configuration and start all the services of the Linux distribution. The result is a fully functional linux operating system just like we have on a desktop computer.
At this point we can access this system using ssh. The IP is shown at the top, for me its
192.168.0.137, it might be different for you. From a computer in the same network, you can use the below commands in any shell to login and when it asks for the password just use the password you entered during the configuration, if you forgot your password you can get it by tapping on the settings button on the bottom right.
ssh <username>@<IP> // if your user name is android and IP is 192.168.0.137, use: ssh [email protected]168.0.137 // Type yes when it asks you to continue connecting to the host // and enter your password when it asks for it
You are now logged-in to the system and can perform any operations as you want. If you want to avoid entering your password when you login, you can put the public ssh key of your computer in the
~/.ssh/authorized_keys file. If its not there you’ll have to create it, you can easily find articles on the web if you don’t know how to do it.
Mounting internal and external sdcard
If you are not able to access the phone’s internal storage in the linux file system you will have to map the mount path of the storage in Android file system to a mount point in linux file system. To do this you have to find where is the sdcard mounted in the Android, there are two ways, one with
adb and other by
installing any file manager app. I am going to tell you the
adb way because I don’t want to install any other app for a small usecase. Connect your phone to your computer, make sure USB debugging is enabled, from the terminal execute the following commands
➜ ~ adb devices List of devices attached f4936abb device ➜ ~ adb shell whyred:/ $ df Filesystem 1K-blocks Used Available Use% Mounted on tmpfs 2917628 1020 2916608 1% /dev tmpfs 2917628 0 2917628 0% /mnt tmpfs 2917628 0 2917628 0% /apex /dev/block/mmcblk0p61 3096336 1637424 1442528 54% / /dev/block/mmcblk0p62 806288 414160 375744 53% /vendor tmpfs 2917628 6432 2911196 1% /sbin /dev/block/mmcblk0p48 12016 7480 4212 64% /vendor/dsp /dev/block/mmcblk0p60 237536 212 229464 1% /cache /sbin/.magisk/block/data 52885008 8501436 44236116 17% /sbin/.magisk/modules /data/media 52885008 8501436 44236116 17% /storage/emulated whyred:/ $
As you can guess by the size of the partition, the internal storage in my device is mounted on
Now just create a mount path in linux file system for this path. Open the Linux Deploy app on your phone, stop the container if its running. Go to the mount points settings and tap on the plus button on the top right.
The Android path
/storage/emulated goes in the
Source field and the linux path goes in the
Target. Tap on
OK and start the container again, login to the system and see if you can access the sdcard. You will probably see
Permission Denied error when you try to access the folder, its because the user is not part of the
aid_everybody groups you can check that by the command
$ ls -l total 8 drwx--x--x. 3 root aid_everybody 4096 Jul 17 21:00 sdcard $ groups android android : android aid_graphics aid_sdcard_rw aid_inet
We can fix that by adding the linux user(android in my case) to the
aid_everybody group. Use the command below to do this, you will have to logout and then login again to let this change take effect.
$ sudo usermod -a -G aid_everybody android $ exit Connection to 192.168.0.137 closed. // Login again and check $ cd sdcard $ ls 0 $ ls -l 0 total 1623408 drwxrwx---. 2 root aid_everybody 4096 Jun 17 09:02 Alarms drwxrwx---. 4 root aid_everybody 4096 Jun 17 09:02 Android drwxrwx---. 3 root aid_everybody 4096 Jun 19 10:33 DCIM drwxrwx---. 2 root aid_everybody 4096 Jun 17 13:26 Documents drwxrwx---. 4 root aid_everybody 4096 Jul 18 08:36 Download -rw-rw----. 1 root aid_everybody 8589934592 Jul 24 19:57 linux.img drwxrwx---. 3 root aid_everybody 4096 Jun 17 13:25 Movies drwxrwx---. 2 root aid_everybody 4096 Jun 17 09:02 Music drwxrwx---. 2 root aid_everybody 4096 Jun 17 09:02 Notifications drwxrwx---. 5 root aid_everybody 4096 Jul 15 18:14 Pictures drwxrwx---. 2 root aid_everybody 4096 Jun 17 09:02 Podcasts drwxrwx---. 2 root aid_everybody 4096 Jun 17 09:02 Ringtones drwxrwx---. 2 root aid_everybody 4096 Jun 17 09:51 Shows
If you are also running Android 10, due to strict permissions of the OS, Linux Deploy will not be able to access the external sdcard. I have tried a few ways of mounting it but I couldn’t succeed. If you manage to mount the external sdcard please let me know in the comments.
Okay, that’s all folks, if you reached here you have a fully functional linux machine. This was a long process, but we are just getting started, there’s a lot more we can achieve with it. In the future posts I will be telling you how you can extend this
- As an ad-block proxy server for your home network with Pi-Hole.
- A media server to stream your favorite movies and TV Shows with Plex.
If you have more ideas in mind please let me know. :)