UYARI!
Bu anlatımı takip etmek isteyenler basit derecede Uçbirim kullanımına hakim olmalıdırlar. Verilen her komut kopyala-yapıştır mantığıyla değil anlayarak kullanılmalı. "Komutları kullandım harddiskim sıfırlandı" gibi hiçbir zarar konusunda mesuliyet kabul etmiyorum.
I. GİRİŞ
BTRFS CoW (Copy on Write) tekniğini kullanan, anlık kayıt (snapshot), depolama altbirimi (subvolume), sıkıştırma, birden fazla diski tek depolama alanında birleştirme gibi özellikleri olan dosya sistemidir. GPL ile lisanslanmıştır.
Linux çekirdeği 5.0 sürümünden itibaren BTRFS takas alanı dosyasını desteklemektedir. Arch Linux linux-lts paketinin sürümü 5.4 olduğu için linux ve linux-lts ile takas alanı oluşturulabilir. Fedora 31 ve Ubuntu 19.10 dağıtımları linux çekirdeğinin sürümü 5.3Bkz:1 ve 2. Manjaro 19'un ikinci sürüm adayı yayımlandı, 18.1.5 sürümündeki çekirdek sürümü ise 5.4.63
BTRFS sayesinde her dağıtım için ayrı ayrı disk bölümlemesi yapma gerekliliği kalkmıştır. Arch Linux, Ubuntu, Manjaro, Fedora dağıtımlarını ve bu dağıtımların farklı masaüstü ortamlarını aynı bölüme yükleyebiliriz. Anlık kayıtlar sayesinde kolayca sistemlerimizi geri yükleyebiliriz, dilersek takas alanı için dosya oluşturabiliriz.
Kurulum ortamı hazırlama,sistem gereksinimleri gibi konulara girmeyeceğim, dilerseniz Demiray Muhterem hocamızın anlatımına göz atabilirsiniz.
Peki başlıyoruz.
Arch Kurulum medyasından sistemi başlatalım:
II. KURULUMA HAZIRLIK
1.Dilediğimiz klavye düzenini ve Türkçeyi düzgün biçimde gösteren uçbirim fontunu etkinleştirelim.
loadkeys trq
setfont /usr/share/kbd/consolefonts/iso09.16.gz
echo "Üzüm hazmı kolaylaştırır"
ping archlinux.org
Görüldüğü üzere Türkçe karakterler sorunsuz gözüküyor ve internet bağlantımız etkin.
2. Disk yapılandırmasını düzenleyelim:
fdisk -l, lsblk, ls -la /dev/disk/by-path/ gibi araçlarla hedef diskimizi belirleyelim. Daha sonra biçimlendirme araçlarının birini kullanarak hedef diskimizde boş alana veya yeni tablolama biçimi kullanarak UEFI sistemler için en az ESP (EFI Sistem bölümü)ve BTRFS bölümler olabilecek şekilde yapılandıralım.
cfdisk /dev/sda
2.1 Daha önceden hazır alan hazırlamadıysak, eğer bölümler biçimlendirilmemiş ise onları biçimlendirelim.
fdisk -l
mkfs.vfat -F32 /dev/sda1
mkfs.btrfs /dev/sda2
3. Gerekli bağlama noktaları ve btrfs işlem hazırlıklarını yapalım:
Kurulum yaparken arch-install ve btrfs-partition adında iki dizin oluşturacağız. Bu iki dizini /mnt veya /tmp altına oluşturup sistemimizi bağlayabiliriz.
Bağlama yaparken BTRFS nimetlerinden yararlanmayı unutmayacağız, sıkıştırma biçimini aktif edip zstd kullanacağız. Zstandard hızlı açılma sağladığı için okuma hızımız yüksek olacaktır.
3.1 Bağlama noktalarını oluşturuyoruz:
mkdir -p /tmp/{arch-install,btrfs-partition}
3.2 BTRFS bölümünü bağlıyoruz
mount -o compress=zstd /dev/sda2 /tmp/btrfs-partition
3.3 Sistemler için gerekli alt birimleri oluşturuyoruz.
Giriş bölümünde işaret ettiğimiz gibi boş BTRFS bölümüne istediğimiz kadar alt birimler oluşturabiliriz. Arch Linux için xfce, gnome, cinnamon, kde ayrı ayrı masaüstü ortamı ekleyebiliriz. Keza Ubuntu, Fedora, Manjaro gibi dağıtımlar için altbirimler ilave edebiliriz.
"Ubuntu style subvolumes" (kökbirim için @, ev dizini için @home) kullanabiliriz, yahut istediğimiz biçimde isim koyabiliriz.
Biz BTRFS bölümüne her dağıtım için ayrı dizin, her dağıtım dizininde masaüstü ortamları için dizin ve masaüstü ortam dizininde ise alt birimleri oluşturacağız. Bunu böyle yapmak yerine "dağıtım-masaüstü ortamı-alt birim" adında uzun isimli altbirim yapabiliriz.
for distro in arch fedora ubuntu; do for desktop in xfce gnome cinnamon kde; mkdir -p /tmp/btrfs-partition/$distro/$desktop; for subvol in "@" "@home"; do btrfs subvolume create /tmp/btrfs-partition/$distro/$desktop/$subvol
3.4 Yükleme için gerekli altdizinleri oluşturuyoruz ve altbirimleri yükleme noktasına bağlıyoruz:
GNOME anlatımı yaptığımız için GNOME altbirimlerini yükleme dizinine bağlayalım:
mount -o compress=zstd,subvol=arch/gnome/@ /dev/sda2 /tmp/arch-install
mkdir -p /tmp/arch-install/{boot/efi,home,swap}
mount /dev/sda1 /tmp/arch-install/boot/efi
mount -o compress=zstd,subvol=arch/gnome/@home /dev/sda2 /tmp/arch-install/home
3.5 Takas alanı ayarlaması
BTRFS üzerinde takas alanı dosyaları desteklenmektedir. Ancak takas dosyanın bulunduğu altbirimin anlık kaydı bulunmamalı, dosyanın sıkıştırılması ve CoW özelliği olmamalı ayrıca BTRFS bölümü tek depolama aygıtında olmalı.
Sistemlerimizi yedekleme amaçlı sürekli anlık kayıtlarını alacağımız için swap dosyamızı ayrı altbirimde tutacağız. Kökbirimin bağlı olduğu altbirimin snapshotunu sürekli alacağımızdan arch/gnome/@ altında takas alanımızı kaydetmiyeceğiz.
btrfs subvolume create /tmp/btrfs-partition/swap
mount -o subvol=swap /dev/sda2 /tmp/arch-install/swap
Görüldüğü üzere altbirim parametresinin yanına sıkıştırma algoritması eklemedik, çünkü bu altbirimde takas dosyaları muhafaza edeceğiz.
Takas dosyamızı oluşturuyoruz:
truncate -s 0 /tmp/arch-install/swap/arch-swap
chattr +C /tmp/arch-install/swap/arch-swap
btrfs property set /tmp/arch-install/swap/arch-swap compression none
dd if=/dev/zero of=/tmp/arch-install/swap/arch-swap bs=1M count=4096 status=progress
chattr +C ile NodataCoW diyoruz, yani CoW özelliğini kapattık.
btrfs property set object compression none ile dosyanın sıkıştırılmasını kaldırdık. Dikkat ederseniz daha önce btrfs bölümünü sıkıştırmalı bağlamıştık - 3.2'de
Takas alanı oluşturup bağlıyoruz:
chmod 600 /tmp/arch-install/swap/arch-swap
mkswap /tmp/arch-install/swap/arch-swap
swapon /tmp/arch-install/swap/arch-swap
Takas dosyasına sadece root erişebilmeli, bundan dolayı okuma ve yazma hakkı dosyanın sahibine ait olmalı, çalıştırılmasına ise gerek yok.
Artık Kuruluma geçebiliriz.
III. KURULUM VE YAPILANDIRMA
1.Temel sistemi kurma:
base meta paketi ve base-devel grubuna ait paketleri yüklüyoruz. Paket inşa edebilmek için linux başlıkları gerekebiliyor, bundan dolayı linux-headers yüklüyoruz. Çekirdek ve sürücüler için linux ve linux-firmware yüklüyoruz, metin düzenleyici(nano) ve man ve info için belgeleme araçlarını (man-db, man-pages ve texinfo) eklemeyi unutmuyoruz.
pacstrap -i /tmp/arch-install base{,-devel} linux{,-headers,-firmware} nano man-{db,pages} texinfo
2. systemd yapılandırması
Hedef sistemimizin dili, klavye düzeni, zamandilimi, hostname tek vuruşta yapılandırıyoruz. pacstrap betiğinde pacman çalışırken systemd kurulumunda makine kimliği oluşumu tetiklendiği için --setup-machine-id parametresini es geçebiliriz.
systemd-firstboot --root=/tmp/arch-install --locale=tr_TR.UTF-8 --keymap=trq --timezone=Europe/Istanbul --hostname=alicavus --setup-machine-id
3. Dağıtımımızın dosya sistemi tablosu ayarlarını kaydediyoruz:
genfstab -U /tmp/arch-install > /tmp/arch-install/etc/fstab
4. Hedef sistemi yapılandırma:
Hedef sistemimizi chroot ortamıyla düzenleyeceğiz
arch-chroot /tmp/arch-install /bin/bash
*Kolaylık için tab tuşuyla otomatik tamamlama sağlayabilmek için bash-completion paketini kuruyoruz:
pacman -S --asdeps bash-completion
4.1 Yerelleştirme ayarlaması
export LANG=tr_TR.UTF-8
nano /etc/locale.gen
istediğimiz locale tanımlamalarını seçiyoruz. Coğrafi konuma ve tercihe göre değişir. Almanya'daki kardeşlerimiz mesela Türkçeyle beraber almanca yerelleştirmeye sahip olmak isteyebilirler.
Gerekli işaretlemelerden sonra
locale-gen
çalıştırılır.
4.2 Ağ yapılandırması
nano /etc/hosts
hosts dosyasına kendi makine ismini ekliyoruz:
127.0.0.1 localhost
::1 localhost
127.0.1.1 alicavus.localdomain alicavus
4.3 Önyükleyici ve işlemci microcode yükleme:
Önyükleme için EFISTUB, systemd-boot, GRUB, syslinux, rEFInd kullanabiliriz. Tercihimiz hangisinden yanaysa onu kuruyoruz.
İşlemci hatalarını düzeltmeye yönelik microcode paketini kururuyoruz. AMD işlemcileri için amd-ucode, INTEL için intel-ucode
pacman -S grub intel-ucode
pacman -S --asdeps efibootmgr dosfstools libisoburn os-prober
Eğer tek işletim sistemi kuracaksak os-prober paketine ihtiyaç yoktur.
grub-install --efi-directory=/boot/efi --bootloader-id="Arch Linux Bootloader" /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
4.4 Kullanıcı ekleme
Kullanıcının systemd gruplarına uygun yapılandırılması gerekir.
useradd -mUG adm,log,rfkill,sys,systemd-journal,lp,wheel -s /bin/bash -c "Ali Çavuş" alicavus
echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/20-wheel
passwd alicavus
Kullanıcımıza şifre tanımlaması yapmazsak oturum açamayacağız. Otomatik giriş ayarlasak dahi yönetimle ilgili işlemleri yapamayacağızdan dolayı mutlaka şifre tanımlamamız gerekir.
Kullanıcımızı süper haklarla donatınca dilersek root girişini engelleyebiliriz, dilersek passwd ile şifre belirleyebiliriz.
passwd -l root
4.5 GNOME masaüstü ortamını yükleme
pacman -S gnome{,-extra}
Dilediğimiz paketleri elle belirleyebiliriz.
Tüm bileşenleri yüklemenize gerek yok. Temel bileşenleri yükleyince daha az yer kaplayan sisteminiz olur, bazı düzenlemeleri elle yapmanız sizi korkutmasın.
gnome grubunu kurunca ekran yöneticisi ve ağ yöneticisini ayrıyeten yüklememize gerek yok. Elle seçim yaptıysak 7 ve 55'i seçtiğimizden emin olmalıyız.
Şimdi gdm ve NetworkManager servislerini etkinleştirelim:
systemctl enable gdm.service
systemctl enable NetworkManager.service
* Etkili Linux destekli Güç yönetimi sağlamak için tlp paketini kurabiliriz.
pacman -S tlp
systemctl enable tlp.service
4.6 Kurulumu tamamlama
chroot ortamından çıkıp bağlı takas ve depolama birimlerini ayırıyoruz, sistemi yeniden başlatıyoruz:
exit
swapoff /tmp/arch-install/swap/arch-swap
umount /tmp/{arch-install/{boot/efi,home,swap,},btrfs-partition}
reboot
IV. KURULUM SONRASI
Dilersek otomatik betiklerle, yahut elle düzenli anlık kayıt (snapshot) alabiliriz. Snapshotlardan sistem açma gibi özellikler taşıyan grub-btrfs önyükleyiciyi kurabiliriz.
Uzun uzun yedeklemeye gerek yok, tek yapmanız gereken:
btrfs subvolume snapshot source [dest/]name
V. NOTLAR
ESP bağlama noktasını /boot/efi olarak belirlememiz daha isabetli olacaktır. Kurulumlardan bir tanesini /boot altına bağlayınca diğerlerle çakışmaz, fakat snapshot işleminde kernel ve initramfs kapsam dışında kalıyor.
GNOME kurulumu bitince daha önce xfce, cinnamon, kde hazırlamamıza gerek yoktur, anlık kayıt ekleyip daha hızlı olacaktır. Hatta masaüstü ortamsız saf arch base kurulumu yapıp ondan dilediğimizi filizlendirebiliriz.
Fedora veya Ubuntu kuruyorsak, daha önceden hazırladığımız altbirimler işimize yarayacaktır. Dilediğimiz masaüstü ortamlı isoyu boot edip btrfs altbirimleri bağlayınca unsquashfs -f -d /hedef sqfs kullanarak hızlı kurulum elde edebiliriz.
Anaconda ve ubiquity karmaşık şekildeki altbirimleri nasıl algılar birfikrim yok.