Last active
February 22, 2025 23:43
-
-
Save zengxinhui/ee0ad6b7c7f99e2ead6cd0d2bd6641fd to your computer and use it in GitHub Desktop.
Replace Oracle Cloud Linux with Debian remotely
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[02/22/2025] | |
Refs: | |
1. http://mirror.cs.pitt.edu/archlinux/iso/2023.09.01/archlinux-bootstrap-2023.09.01-x86_64.tar.gz | |
2. https://dl-cdn.alpinelinux.org/alpine/v3.18/releases/x86_64/alpine-virt-3.18.0-x86_64.iso | |
3. https://wiki.alpinelinux.org/wiki/Replacing_non-Alpine_Linux_with_Alpine_remotely | |
4. https://www.debian.org/releases/bookworm/amd64/apds03.en.html | |
See also: | |
1. Convert to Debian https://gist.github.com/zengxinhui/ee0ad6b7c7f99e2ead6cd0d2bd6641fd | |
2. Convert to arch x64 https://gist.github.com/zengxinhui/f328fdce54f5039689ee3aa4e91fc805 | |
3. Convert to arch arm https://gist.github.com/zengxinhui/01afb43b8d663a4232a42ee9858be45e | |
Requirement: | |
Console access. | |
# Prepare alpine linux, which can be configured to run from ram only. | |
# Alpine is leveraged to do the conversion. | |
# In any linux(ubuntu/debian/arch tested) become root first: | |
sudo su - | |
cd /tmp && wget https://dl-cdn.alpinelinux.org/alpine/v3.18/releases/x86_64/alpine-virt-3.18.0-x86_64.iso | |
dd if=alpine-virt-3.18.0-x86_64.iso of=/dev/sda && sync && reboot | |
# In Alpine with console: | |
# [Bring up networking] | |
ip li set eth0 up | |
udhcpc eth0 | |
# [Setup SSH, answer RET, yes, RET] | |
setup-sshd | |
# [set temp alpine password for alpine login over SSH] | |
passwd | |
# [At this point it's easier to use SSH to copy & paste. E.g. "ssh root@<vps ip>"] | |
# [Per Ref #3. Move alpine to ram only] | |
mkdir /media/setup | |
cp -a /media/sda/* /media/setup | |
mkdir /lib/setup | |
cp -a /.modloop/* /lib/setup | |
/etc/init.d/modloop stop | |
umount /dev/sda | |
mv /media/setup/* /media/sda/ | |
mv /lib/setup/* /.modloop/ | |
# [Setup apk and bring in pacman] | |
setup-apkrepos | |
# [enable community] | |
vi /etc/apk/repositories | |
apk update | |
apk add dosfstools e2fsprogs util-linux-misc debian-archive-keyring debootstrap arch-install-scripts | |
# [Disk partitioning & mounting] | |
# (use gpt table, set esp partition 15 size 256M), set root partition 1 size remaining) | |
# g, n, 15, RET, +256m, t, 1, n, RET, RET, RET, p, w | |
fdisk /dev/sda | |
ls /dev/sda* | |
# if sda1 or sda15 is missing, do "/etc/init.d/devfs restart" | |
mkfs.vfat /dev/sda15 | |
mkfs.ext4 /dev/sda1 | |
mount -t ext4 /dev/sda1 /mnt | |
mkdir /mnt/boot | |
mount /dev/sda15 /mnt/boot | |
# [Per Ref #4] Coffee time. | |
debootstrap --include systemd --arch amd64 bookworm /mnt/ http://ftp.us.debian.org/debian | |
arch-chroot /mnt/ | |
# This is your debian root password. Choose carefully and remember it | |
passwd | |
cat > /etc/fstab << EOF | |
# /etc/fstab: static file system information. | |
# | |
# file system mount point type options dump pass | |
/dev/sda1 / ext4 defaults 0 1 | |
/dev/sda15 /boot vfat nosuid,nodev 0 2 | |
proc /proc proc defaults 0 0 | |
EOF | |
cat >> /etc/network/interfaces << EOF | |
auto lo | |
iface lo inet loopback | |
auto ens3 | |
iface ens3 inet dhcp | |
EOF | |
cat > /etc/resolv.conf << EOF | |
nameserver 1.1.1.1 | |
nameserver 4.2.2.2 | |
nameserver 8.8.8.8 | |
EOF | |
echo deb12 > /etc/hostname | |
cat >> /etc/apt/sources.list << EOF | |
deb http://security.debian.org/ bookworm-security main | |
EOF | |
apt update && apt -y install linux-image-cloud-amd64 grub-efi-amd64 ssh | |
cat > ~/.ssh/authorized_keys << EOF | |
<your key here> | |
EOF | |
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB | |
vi /etc/default/grub | |
# Better console. Comparison below: | |
#GRUB_CMDLINE_LINUX_DEFAULT="quiet" | |
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,115200" | |
# Or use perl/sed to replace | |
# perl -pi.bak -e "s/quiet/console=ttyS0,115200/" /etc/default/grub | |
# sed -i.bak -e "s/quiet/console=ttyS0,115200/" /etc/default/grub | |
grub-mkconfig -o /boot/grub/grub.cfg | |
exit | |
reboot |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment