[Nasıl] Ubuntu kalıbından sisteminizde kurulu olmayan paketleri oluşturmak

Başlatan if, 07 Haziran 2014 - 03:21:24

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

if

Ubuntu'yu kurdunuz; bir sürü paket yükeldiniz ve kaldırdınız; Bir şekilde Ubuntu'yu eski haline getirmek istiyorsunuz ve bunun için Ubuntu kalıbı (.iso) ile gelen paketleri yüklemek istiyorsunuz. Ya da bir sebepten Ubuntu kalıbı (.iso) ile gelen paketleri tekrar kurmak istiyorsunuz. Bu durumda aşağıdaki adımlarla Ubuntu kalıbından gerekli paketleri oluşturabilirsiniz.

a. Ubuntu kalıbındaki dosya sistemini çıkartmak için kullanılacak squasfs-tools paketini yükleyin.
sudo apt-get install dpkg-repack fakeroot squashfs-tools

b. Ubuntu kalıbını bağlayacağımız dizini oluşturun.
sudo mkdir /mnt/ubuntu

c. Ubuntu kalıbını /mnt/ubuntu dizinine bağlayın.
sudo mount -o loop ubuntu.iso /mnt/ubuntu

d. Dosya sistemini /mnt/sistem dizinine çıkartın
sudo mkdir /mnt/sistem
sudo unsquashfs -d /mnt/sistem /mnt/ubuntu/casper/filesystem.squashfs

e. /mnt/sistem dizine chroot yapın.
sudo chroot /mnt/sistem

f. Kurulu paketlerin listesini çıkartın ve sistem_paketleri.txt dosyasına yazdırın, ardından chroot ortamından çıkın.
dpkg-query -W -f='${Package}\n' | sort -d > sistem_paketleri.txt
exit

g. sistem_paketleri.txt dosyasını ~/paket_listeleri dizinine kopyalayın.
mkdir ~/paket_listeleri
cp /mnt/sistem/sistem_paketleri.txt ~/paket_listeleri

h. Ubuntu kalıbındaki paketlerle sistemdeki paketleri karşılaştırıp eksik olan paketleri kurulu_olmayan_paketler.txt adlı dosyaya yazdıracak ve ardından bu paketleri dosya sisteminden oluşturacak betiği yazın.
cd ~/paket_listeleri
nano paket_kurucu.sh

içine
#!/bin/bash

#=========== Bilgiler ===========================================================#
# isim:     paket_kurucu
# tanım:    Ubuntu kalıbından .deb paketi oluşturan bir BASH betiği
# yazar:    if <if.gnu.linux@gmail.com>
# tarih:    02/11/2014
# sürüm:    0.2
# kullanım: bash paket_kurucu.sh

#=========== Lisans =============================================================#
# Copyright © 2014-2024, if.gnu.linux@gmail.com
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# version 2, unless explicitly otherwise stated.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#=========== Temel Değişkenler ===============================================#

# Sistem kullanıcısının adını öğrenelim
kullanıcı=(who am i | awk '{print $1}')

sistem_paketleri="/home/${kullanıcı}/paket_listeleri/sistem_paketleri.txt"
kurulu_olmayan_paketler="/home/${kullanıcı}/paket_listeleri/kurulu_olmayan_paketler.txt"
varmis="/home/${kullanıcı}/paket_listeleri/varmis.txt"
eksik_kalmis="/home/${kullanıcı}/paket_listeleri/eksik_kalmis.txt"
sonradan_kurulanlar="/home/${kullanıcı}/paket_listeleri/sonrada_kurulanlar.txt"
hepsi="/home/${kullanıcı}/paket_listeleri/hepsi.txt"
ikilik_dizini="/home/${kullanıcı}/debler"

if [[ -e "${kurulu_olmayan_paketler}" ]]; then
    rm "${kurulu_olmayan_paketler}"
else
    touch "${kurulu_olmayan_paketler}"
fi

kurulu_olmayan_paketleri_bul()
{
while read -r paket; do
    mapfile -t kurulumu < <((dpkg-query -W -f='${Status}\n' "${paket}"))
    mapfile -t durum < <(( echo "${kurulumu[@]}" | awk -F' ' '{print $3}'))
    if [[ "${durum[*]}" != "installed" ]]; then
        echo "$paket kurulu değil."
        echo "${paket}" >> "${kurulu_olmayan_paketler}"
    fi
done < "${sistem_paketleri}"
}

sonradan_kurulanları_bul()
{
dpkg-query -W -f='${Package} \n' | awk -F' ' '{print $1}' | tee "${hepsi}"
comm -1 -3 <(sort "${sistem_paketleri}") <(sort "${hepsi}") \
    | tee "${sonradan_kurulanlar}"
}

if [[ ! -d "${ikilik_dizini}" ]]; then
    mkdir "${ikilik_dizini}"
fi

olusturulmus_paketler_varmi ()
{
cd "${ikilik_dizini}" || exit
find . -name '*.deb' -exec ls {} + \
    | awk -F'/' '{ print $2 }' \
    | awk -F'_' '{ print $1 }' \
    | tee "${varmis}"
comm -1 -3 <(sort "${varmis}") <(sort "${kurulu_olmayan_paketler}") \
    | tee "${eksik_kalmis}"
}

paketleri_olustur ()
{
while read -r paket; do
    fakeroot -u -- dpkg-repack --root=/mnt/sistem "${paket}"
done < $eksik_kalmis
}

kurulu_olmayan_paketleri_bul
sonradan_kurulanları_bul
olusturulmus_paketler_varmi
paketleri_olustur
echo "Bitti."
exit 0

kullanici="if" yerine kendi kullanıcı adınızı yazın. Yazdıklarınızı kaydedip belgeyi kapatın.

ı. Betiğe çalıştırma izni verip ~/debler dizininde çalıştırın.
chmod +x paket_kurucu.sh
mkdir ~/debler && mv paket_kurucu.sh ~/debler && cd ~/debler
sudo ./paket_kurucu
sudo chown $USER:$USER -R ~/debler

dpkg-deb: warning: './dpkg-repack-NNNNN/DEBIAN/control' contains user-defined field 'Original-Maintainer'
dpkg-deb: warning: ignoring 1 warning about the control file(s)

Uyarılarını önemsemeyin. 1 Kasım 2014 tarihinde bu böceki düzeltecek yama gönderilmiş[1]. İleriki tarihlerde gelecek güncellemeyle bu uyarıları görmezsiniz.

Uçbirimde "Bitti." cümlesini gördüğünüzde işlem tamamlanmıştır. ~/debler dizininde .deb paketlerini bulabilirsiniz.

~/debler dizinini bir apt deposuna dönüştürmek için

a .deb paketlerinin bulunduğu dizini $depocuk değişkenini atayın.
export depocuk="/home/kullanıcı_adı/debler/"

b. Paket dosyalarını oluşturun.
apt-ftparchive packages ${depocuk} > ${depocuk}Packages
ya da
dpkg-scanpackages ${depocuk} > ${depocuk}Packages

c.
gzip -9c "${depocuk}Packages" > ${depocuk}Packages.gz
sudo -H gedit /etc/apt/sources.list
içerisine
deb file:///home/kullanıcı_adınız/debler/ ./
yazıp kaydedin.


[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=709991#22