Skip to content

Instantly share code, notes, and snippets.

@lsaavedr
Last active November 12, 2024 20:15
Show Gist options
  • Save lsaavedr/fb85e8888bad4f49a4dfb3bee983102c to your computer and use it in GitHub Desktop.
Save lsaavedr/fb85e8888bad4f49a4dfb3bee983102c to your computer and use it in GitHub Desktop.
Ubuntu On the Fly

Ubuntu On the Fly

En esta oportunidad veremos como instalar Ubuntu noble en una partición que tengamos libre (también podría ser un disco externo), esto lo haremos sin tener necesidad de reiniciar ni dejar de trabajar. Luego de terminar la instalación tendremos que reiniciar si queremos probar nuestro nuevo sistema.

Sistema Base

  • La partición se encuentra en /dev/sdb2
  • La partición se montará en $PWD/ubuntu (debe ser /root/ubuntu)
  • El nombre de nuestro equipo será pcsito y el dominio ssd
  • El super usuario se llamará lsaavedr

Accedemos como root y configuramos este sistema:

foo@bar:~$ sudo su -
foo@bar:~# mkfs.ext4 /dev/sdb2 -L noble
foo@bar:~# mkdir -p $PWD/ubuntu
foo@bar:~# mount /dev/sdb2 $PWD/ubuntu

debootstrap

debootstrap, es un comando que nos permite volcar un sistema básico con el sistema de paquetería de Debian, en nuestro caso será Ubuntu Noble. Para instalarlo utilizamos:

foo@bar:~# aptitude install -y debootstrap

luego de instalarlo, lo utilizamos de la siguiente forma:

foo@bar:~# debootstrap --verbose --no-resolve-deps --arch=amd64 --components=main,restricted,universe,multiverse noble $PWD/ubuntu http://cl.archive.ubuntu.com/ubuntu

si aparece un error como este:

E: No such script: /usr/share/debootstrap/scripts/noble

tan sólo nos falta un enlace simbólico:

foo@bar:~# ln -s gutsy /usr/share/debootstrap/scripts/noble

en nuestro caso hemos indicado (en orden):

  • que sea verboso con --verbose
  • que no pare si encuentra algún problema de dependencias --no-resolve-deps lo que es típico en nuevas versiones
  • también hemos indicado nuestra arquitectura --arch=amd64
  • los repositorios básicos (main, restricted, universe y multiverse) con --components=main,restricted,universe,multiverse
  • la distribución con noble
  • donde volcar el nuevo sistema con $PWD/ubuntu/
  • y por último desde donde obtener los repositorios básicos con http://cl.archive.ubuntu.com/ubuntu/

muchas de estas configuraciones se pueden adaptar a nuestras necesidades, sobre todo la elección de la distribución (en nuestro caso noble), pero también algunos querrán cambiar la arquitectura de la máquina, por ejemplo con --arch=i386 o --arch=arm64.

chroot

chroot, como su nombre lo sugiere, es un comando que nos permite cambiar la raíz de un sistema, en nuestro caso nos interesa ''ingresar'' a nuestro sistema recientemente volcado con debootstrap. Pero antes debemos montar algunos periféricos en el sistema volcado:

foo@bar:~# mount --bind /dev $PWD/ubuntu/dev
foo@bar:~# mount --bind /dev/pts $PWD/ubuntu/dev/pts
foo@bar:~# mount --bind /proc $PWD/ubuntu/proc
foo@bar:~# mount --bind /sys $PWD/ubuntu/sys
foo@bar:~# LC_ALL=C LANGUAGE=C LANG=C.UTF-8 chroot ubuntu

con esto ya ingresamos a nuestro nuevo sistema básico y podemos configurar algunas cosas antes de instalar el sistema completo.

Configuración

aptitude

Algo que nos puede sorprender de debootstrap es que el sistema que instala es realmente básico, pero completo, con él podemos instalar todo tipo de herramientas pero también requiere que tengamos cierto grado de especialización. Por defecto para instalar paquetes utiliza apt-get que es una herramienta bastante popular pero de bajo nivel, por esta razón instalaremos con aptitude que por un lado reemplaza en bastantes tareas a apt-get y por el otro nos ofrece un sistema de instalación de alto nivel, o por lo menos lo suficiente para no complicarnos demasiado resolviendo dependencias. También a modo de subir el nivel de abstracción más adelante instalaremos tasksel, que es una herramienta que se encarga de instalar una serie de aplicaciones necesarias p, algo así como instalara un ambiente de trabajo (servidor o escritorio por ejemplo):''metapackete'' pero con la esperanza de que el nombre no cambiará en el futuro.ar un

foo@bar:~# apt-get update
foo@bar:~# apt-get install -y aptitude command-not-found locate nano

command-not-found nos va a servir para ver recomendaciones de paquetes (según qué comando intentemos ejecutar en el terminal) y nano es un editor de texto que se puede usar desde el terminal.

Repositorios

Debemos verificar que los repositorios oficiales estén más o menos completos, para eso debemos modificar el archivo /etc/apt/sources.list y dejarlo con lo siguiente:

deb http://cl.archive.ubuntu.com/ubuntu noble main restricted universe multiverse
deb http://cl.archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse
deb http://cl.archive.ubuntu.com/ubuntu noble-security main restricted universe multiverse

luego actualizamos la lista de repositorios y los paquetes:

foo@bar:~# aptitude update && aptitude full-upgrade -y

Instalación de Escritorio

Hemos elegido instalar las aplicaciones de escritorio y al final el kernel Linux, un poco para mostrar lo elegante que es el sistema de paquetería de Debian, un poco para mostrar lo separado que está el kernel de las aplicaciones de sistema (eventualmente podríamos usar otro kernel).

Si queremos la instalación mínima de un servidor:

foo@bar:~# aptitude install -y ubuntu-server

o bien, la instalación tipo escritorio:

foo@bar:~# aptitude install -y ubuntu-desktop

Esta es la parte que más demora de la instalación que se realiza con el clásico CD de instalación, en nuestro caso todo depende de qué tan rápida es nuestra conexión a Internet (en la descarga de paquetes) y de qué tan rápido es nuestra máquina (en la instalación de paquetes).

Ahora pasamos a instalar o configurar algunas aplicaciones adicionales:

Configuración

Teclado

Para configurar el teclado:

foo@bar:~# dpkg-reconfigure keyboard-configuration

Fecha y Hora

Para configurar el ''time-zone''

foo@bar:~# dpkg-reconfigure tzdata

y para que nuestro ''RTC'' no modifique el ''RTC'' de la máquina:

foo@bar:~# aptitude install -y util-linux-extra
foo@bar:~# hwclock --systohc --local

Usuario administrador

Para finalizar con el escritorio, añadimos un super usuario (recordemos que nuestro super usuario será lsaavedr):

foo@bar:~# adduser lsaavedr
foo@bar:~# adduser lsaavedr adm
foo@bar:~# adduser lsaavedr sudo
foo@bar:~# adduser lsaavedr dialout
foo@bar:~# adduser lsaavedr lpadmin
foo@bar:~# adduser lsaavedr audio

Ojo con el nombre del usuario lsaavedr, quizá te gustaría otro nombre.

Deshabilitar Apport

Deshabilitaremos apport para no ver los molestos y eternos mensajes de advertencia cuando ocurre algún error

foo@bar:~# rm -f /var/crash/*
foo@bar:~# sed -i s,enabled=1,enabled=0,g /etc/default/apport

Aplicaciones adicionales

Desde hace un buen rato que podemos instalar packetes con nuestras aplicaciones favoritas, incluso utilizar algunos de ellos, por ejemplo:

Acceso remoto

Para acceder a nuestra máquina remotamente:

foo@bar:~# aptitude install -y ssh fail2ban net-tools

Theme

Un poco de cosmética

foo@bar:~# aptitude install -y gnome-tweaks ubuntu-artwork dmz-cursor-theme lightdm dbus-x11
foo@bar:~# su - lsaavedr
lsaavedr@bar:~$ export DISPLAY=:0
lsaavedr@bar:~$ dbus-launch --exit-with-session bash
lsaavedr@bar:~$ gsettings set org.gnome.desktop.interface cursor-theme 'Yaru'
lsaavedr@bar:~$ gsettings set org.gnome.desktop.interface icon-theme 'ubuntu-mono-dark'
lsaavedr@bar:~$ gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'
lsaavedr@bar:~$ gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
lsaavedr@bar:~$ gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'
lsaavedr@bar:~$ gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
lsaavedr@bar:~$ gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action 'nothing'
lsaavedr@bar:~$ gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action 'nothing'
lsaavedr@bar:~$ gsettings set org.gnome.settings-daemon.plugins.power power-button-action 'nothing'
lsaavedr@bar:~$ gsettings set org.gnome.desktop.interface clock-show-seconds true
lsaavedr@bar:~$ gsettings set com.canonical.indicator.datetime show-seconds true
lsaavedr@bar:~$ gsettings set com.canonical.indicator.keyboard visible false
lsaavedr@bar:~$ gsettings set org.gnome.system.locale region 'es_CL.UTF-8'
lsaavedr@bar:~$ gsettings set com.canonical.indicator.datetime timezone-name 'America/Santiago Santiago'
lsaavedr@bar:~$ exit
lsaavedr@bar:~$ killall dbus-launch
lsaavedr@bar:~$ exit

Old School gnome

Si instalamos el escritorio GNOME, instalaremos la posibilidad de acceder a una sesión más simple:

foo@bar:~# aptitude install -y gnome-session-flashback

Soporte Media

Para poder ejecutar videos o audios en formatos privativos:

foo@bar:~# aptitude install -y libavcodec-extra
foo@bar:~# aptitude install -y ubuntu-restricted-extras

Soporte de idioma

Algo que nos podemos dar cuenta es que hay un problema con el idioma, por esto hemos accedido al chroot con las variables de entorno LC_ALL=C LANGUAGE=C LANG=C.UTF-8, de lo contrario veríamos lo siguiente cada vez que utilicemos algo como aptitude:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "es_CL.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

en nuestro caso lo que no va a encontrar es la locale es_CL.UTF-8, para no arrastrar este error en el futuro lo solucionaremos instalando el soporte de lenguaje español:

foo@bar:~# aptitude install -y language-selector-common
foo@bar:~# aptitude install -y $(check-language-support -l es)

Instalación del Kernel

Para finalizar instalamos el kernel:

foo@bar:~# aptitude install -y linux-image-generic

Configuración de Arranque

Para saber qué tipo de arranque tenemos en nuestra máquina ejecutamos:

foo@bar:~# [ -d /sys/firmware/efi ] && echo "EFI boot" || echo "Legacy boot"

EFI boot

Si aparece EFI boot y tenemos una partición extra /dev/sdb1 de más menos 100Mb, de tipo EFI, podemos instalar grub-efi de la siguiente forma:

foo@bar:~# mkfs.vfat /dev/sdb1
foo@bar:~# mkdir -p /boot/efi
foo@bar:~# mount /dev/sdb1 /boot/efi
foo@bar:~# aptitude purge -y grub-gfxpayload-lists grub-pc grub-pc-bin
foo@bar:~# aptitude install -y grub-efi-amd64
foo@bar:~# grub-install --removable --no-uefi-secure-boot --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=grub --recheck /dev/sdb
foo@bar:~# update-grub2
foo@bar:~# update-initramfs -u

Legacy boot

Si aparece Legacy boot entonces hacemos lo siguiente:

foo@bar:~# aptitude install -y grub-pc
foo@bar:~# grub-install --removable --target=i386-pc --boot-directory=/boot --bootloader-id=grub --recheck /dev/sdb
foo@bar:~# update-grub2
foo@bar:~# update-initramfs -u

fstab

El archivo fstab es el que se encarga de darle funciones a las particiones de los discos en nuestro sistema, para configurar el fstab lo haremos de la forma más genérica posible ya que nuestra unidad puede ser externa y no sabremos a priori que nombre tendrá debemos utilizar un identificador moderno de las unidades de disco /dev/sdb1, /dev/sdb2, /dev/sdb3, /dev/sdb4, para ver estos identificadores:

foo@bar:~# blkid /dev/sdb*

luego para configurar el archivo /etc/fstab reemplazamos correctamente nuestros UUID:

# <device>                                   <dir>        <type>    <options>                           <dump>  <fsck>
UUID=95181871-646d-4917-972d-25bf81dedeb3    none         swap      defaults                            0       0
UUID=4F54-32E9                               /boot/efi    vfat      defaults                            0       1
UUID=af2b7fd9-0876-41d4-929a-91bdd391028f    /            ext4      rw,relatime,discard,data=ordered    0       2
UUID=20c22b02-d5cb-44b2-9c59-d074408edc4e    /home        ext4      rw,relatime,discard,data=ordered    0       3

por último movemos la carpeta de nuestro usuario al nuevo home:

foo@bar:~# mv /home/lsaavedr /root/
foo@bar:~# mount -a
foo@bar:~# mv /root/lsaavedr /home/

Antes de reiniciar

Antes de reiniciar podrías querer desmontar la partición:

foo@bar:~# umount /boot/efi
foo@bar:~# umount /home
foo@bar:~# exit
foo@bar:~# umount $PWD/ubuntu/sys
foo@bar:~# umount $PWD/ubuntu/dev/pts
foo@bar:~# umount $PWD/ubuntu/dev
foo@bar:~# umount $PWD/ubuntu/proc
foo@bar:~# umount $PWD/ubuntu
@lsaavedr
Copy link
Author

lsaavedr commented Oct 11, 2024

Esto lo he utilizado por años pero lo tenía en stackedit.io y ese sitio envejeció mal :P

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