Ana içeriğe geç

Ubuntu Kurulumunu Otomatikleştirin

En son ne zaman yeni bir işletim sistemi kurdunuz? Ya da farklı sorayım: Çalışma ortamınızı en son ne zaman yenilediniz?

On yıl önce mi? Ona en son dokunduğunuzdan bu yana beş yıl mı geçti? Ya da belki sadece geçen yıl? Eğer benim gibi yeni şeyler denemekten hoşlanan biriyseniz bu süre aylara, haftalara hatta günlere kadar inebilir.

Bu yazıda işletim sistemimi yenileme sürecini nasıl otomatikleştirdiğimi anlatacağım. Bu gönderinin Automate Ubuntu 22.04 LTS Bare Metal'nin özeti veya basitleştirilmiş versiyonu olduğunu söyleyebilirsiniz.

Kurulum için iki USB sürücü kullanacağız: biri geçici bir işletim sistemini başlatmak için, diğeri ise cloud-init otomatik kurulum yapılandırmasını sağlamak için.

ISO'yu değiştirmek ve boot ayarlarını değiştirmek yerine standart bir ISO ile ilerleyip kullanıcının onayıyla ilerlemeyi tercih ediyorum. Kurulum tamamen "dokunmadan" olmayacak, ancak bunu yeterince otomatikleştirdiğimize inanıyorum.

  1. 22.04 releases page'nin altındaki en son canlı sunucu ISO'sunu bulun ve onunla önyüklenebilir bir USB oluşturun. Sürümler arasında farklılıklar olabileceğini unutmayın. Örneğin 22.04.4, 'wpasupplicant' ve 'openvswitch-switch' paketlerini içermiyor. WiFi kullanıyorsanız bu bir sorun olabilir.
  2. Cloud-init veri kaynağı için CIDATA adlı ikinci bir USB oluşturun.
# yeni usb'nin mount olmadığından emin olalım
sudo umount /dev/sda

# formatlayıp gerekli dizinleri oluşturalım
sudo mkfs.vfat -I -F 32 -n 'CIDATA' /dev/sda

mkdir /tmp/cidata
sudo mount /dev/sda /tmp/cidata

cd /tmp/cidata
touch meta-data

cat <<'EOF' > user-data
#cloud-config
autoinstall:
  version: 1
  identity:
    hostname: ubuntu-server
    username: ubuntu
    # "ubuntu" - created with `docker run -it --rm alpine mkpasswd --method=SHA-512`
    password: "$5$r3Kl6AKBqjA78VCX$4.Vuc56PR2faX3vLuqBxHxF796qiLhxuS4MacXtTt5C"
EOF

Tam kullanıcı veri dosyam:

#cloud-config
autoinstall:
  apt:
    disable_components: []
    geoip: true
    preserve_sources_list: false
    primary:
    - arches:
      - amd64
      - i386
      uri: http://archive.ubuntu.com/ubuntu
    - arches:
      - default
      uri: http://ports.ubuntu.com/ubuntu-ports
  drivers:
    install: false
  identity:
    hostname: host
    password: password_hash_for_shadow  # you can create one by reading https://unix.stackexchange.com/questions/81240/manually-generate-password-for-etc-shadow
    realname: username
    username: username
  kernel:
    package: linux-generic
  keyboard:
    layout: en
    toggle: null
    variant: ''
  locale: en_US.UTF-8
  network:
    ethernets:
      enp38s0:
        dhcp4: true    
    version: 2
  early-commands:
    - echo 'linux-generic-hwe-22.04' > /run/kernel-meta-package
  source:
    id: ubuntu-server
    search_drivers: true
  late-commands:
    - rm /target/etc/netplan/00-installer-config.yaml
    - >-
      printf "network:\n  version: 2\n  wifis:\n    wlo1:\n      access-points:\n        access-point-name:\n          password: pass\n      dhcp4: true\n      dhcp6: false\n      addresses: [192.168.1.300/24]\n      routes:\n        - to: default\n          via: 192.168.1.1\n      nameservers:\n        addresses: [192.168.1.1]"
      >> /target/etc/netplan/00-installer-config.yaml
  ssh:
    allow-pw: true
    install-server: true
  packages:
  - wpasupplicant
  - openvswitch-switch
  storage:
    config:
    - ptable: gpt
      serial: disk_serial
      wwn: disk_wwn
      path: /dev/nvme0n1
      wipe: superblock-recursive
      preserve: false
      grub_device: false
      type: disk
      id: disk0
    - device: disk0
      size: 1127219200
      wipe: superblock
      flag: boot
      number: 1
      preserve: false
      grub_device: true
      offset: 1048576
      type: partition
      id: partition-0
    - fstype: fat32
      volume: partition-0
      preserve: false
      type: format
      id: format-0
    - device: disk0
      size: 920074824192
      wipe: superblock
      number: 2
      preserve: false
      grub_device: false
      offset: 1128267776
      type: partition
      id: partition-1
    - fstype: ext4
      volume: partition-1
      preserve: false
      type: format
      id: format-1
    - path: /
      device: format-1
      type: mount
      id: mount-1
    - path: /boot/efi
      device: format-0
      type: mount
      id: mount-0
  updates: all
  shutdown: poweroff
  version: 1

Artık sunucuyu başlatabilirsiniz. Onay istendiğinde devam etmek için "y" yazmanız yeterlidir. Ve işte sonuç! 😀