Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
DIY install debian on Oracle Cloud Infrastructure ( Free Tier ) - ARM64
# should works on any cloud-init enabled hypervisor (openstack.. )
# start from a normal ubuntu 20.04 install as minimal was not available for ARM64
# Since ARM64 machines has higher RAM, Shrinking is desired but not necessary. Instead we will increase tmpfs to 1700MB
# Getting root (if sudo -i doesn't work then set a root password beforehand using 'sudo passwd root'
sudo -i
# make sure we are on the highest kernel, so we can delete all the others ...
sudo apt update && sudo apt dist-upgrade -y && sudo apt install lsof && sudo reboot
# snap removal didn't work so proceed without it.
sudo snap remove --purge oracle-cloud-agent && sudo snap remove --purge core18
sudo apt purge -y $(dpkg-query -Wf '${Package}\n' | grep header) $(apt list --installed | grep -oP "^linux.*\d\d\d\d-oracle" | grep -v "$(uname -r)") linux-modules-extra-$(uname -r) lxc* lxd* vim* && sudo apt -y autoremove && sudo apt -y autoclean && sudo apt -y clean
sudo rm -rf /var/log/* /var/lib/apt/lists/*
# use df to check the size. It should be now ~1100MB. If it is higher than 1700 MB then increase the size below
# make sure you have root here
cd /
mount -t tmpfs -o size=1700m tmpfs mnt
tar --one-file-system -c . | tar -C /mnt -x
mount --make-private -o remount,rw /
mount --move dev mnt/dev
mount --move proc mnt/proc
mount --move run mnt/run
mount --move sys mnt/sys
sed -i '/^[^#]/d;' mnt/etc/fstab
echo 'tmpfs / tmpfs defaults 0 0' >> mnt/etc/fstab
cd mnt
mkdir old_root
mount --make-private /
unshare -m
pivot_root . old_root
# commands below open 1022 port a ssh port. Please ensure the port you select is open under Oracle's VNIC
/usr/sbin/sshd -D -p 1022 &
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 1022 -j ACCEPT
# reconnect on port 1022: I kept the old putty session (on port 22) open and it didn't disconnect
# now the root storage is the RAM
pkill agetty
pkill dbus-daemon
pkill atd
pkill iscsid
pkill rpcbind
pkill unattended-upgrades
kill 1
# check with "lsof /old_root" that there is no remaining process
umount -l /dev/sda1
# check :
df -h
# the disk should be unmount ; for me lsblk showed a /dev/sda1 partiion but it went well.
# now, just copy the debian cloud image on the disk.
# I wanted an ARM64 image and Debian 10 , therefore I used this one
curl -L | tar -OJxvf - disk.raw | dd of=/dev/sda bs=1M
# reboot command didn't work and returned an error "running in chroot, ignoring request" ; I tried exiting as they told here ( but it was of no use
# I forced rebooted it from the Oracle instances' GUI and it seemed stuck on "STOPPING." But after an hour I noticed that the VM was rebooted and running.
# I was able to login with the same public key as original ubuntu, but the username that worked was debian
# SUCCESS!! I checked with lsb_release -a and it showed Debian 10 (earlier it was showing ubuntu)
# Additional things: You may want to reinstall the Oracle cloud agent that was removed in the beginning.
Copy link

needforspeed commented Feb 10, 2022

Nice work. I will give it a try.

Copy link

sant-sh commented Feb 26, 2022

Thanks.. It works great on OCI !

Copy link

jader31 commented Feb 27, 2022

Hi, thanks by your HowTo!!

  1. rename it to .TXT , it´s a howTo and not a script
  2. maybe we should do a "immediate stop" on OCI interface instead of reboot. After you start a normal reboot you cannot try forced reboot, and since disk are sync, you could stop the VM. Maybe we do not need to wait for 60min (I´m in this time now!)

Copy link

jader31 commented Feb 28, 2022

I have it working, thanks. Another tip: run all commands in CONSOLE of OCI

Copy link

geek0108 commented Apr 26, 2022

doesn't work, i have more problems with that

Copy link

4abhinavjain commented Apr 26, 2022

Hi @needforspeed, @sant-sh : Glad that it worked for you.
Hi @jader31 : thanks for the suggestions and the tip and great that it worked for you.

Hi @geek0108 : could you please share what didn't work for you?

It might be worthwhile to know that I have recently experimented with running Debian in a LXD/LXC containers on Ubuntu. So far I managed to run a Debian-only app and with negligible overhead. I am currently using: as the GUI but I think will be a better choice. Please do check out LXC/LXD (but of course, the procedure above is so cool!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment