GNU/Linux >> Belajar Linux >  >> Linux

Apakah ada perangkat lunak yang dapat membantu saya menginstal ulang perangkat lunak setelah penginstalan baru

Simpan dan pulihkan semua paket

Pada sistem berbasis Debian/Ubuntu, Anda dapat membuang daftar paket yang terinstal ke file

dpkg --get-selections > my_package_list.txt

dan pasang kembali dengan menjalankan

apt-cache dumpavail | sudo dpkg --merge-avail
sudo dpkg --set-selections < my_package_list.txt
sudo apt-get dselect-upgrade

Baris pertama memastikan dpkg database terbaru (saat ini kebanyakan orang menggunakan apt untuk menginstal paket yang memelihara basis datanya sendiri), baris kedua mengimpor pilihan yang Anda simpan dan perintah ketiga menginstal paket yang dipilih. Lihat Buku Pegangan Administrator Debian untuk detailnya.

Jika Anda telah menginstal paket dari repositori pihak ketiga, Anda perlu menambahkan repositori ini sebelum mengikuti langkah-langkah pemulihan di atas.

Simpan dan pulihkan hanya paket yang diinstal secara eksplisit

Aptitude secara otomatis memasang dependensi (misalnya pustaka yang diperlukan oleh aplikasi). Paket-paket ini ditandai sebagai "otomatis" dan dapat dihapus secara otomatis ketika tidak diperlukan lagi. Jika Anda ingin mempertahankan flag "otomatis" ini, kami tidak dapat menggunakan dpkg karena tidak melacak paket yang diinstal secara otomatis. Sebagai gantinya, kita harus menggunakan yang sedikit lebih samar

LC_ALL=C aptitude search -F '%p %C' '~i!~M' > my_package_list.txt

Ini akan mencari semua paket yang diinstal (~i ) dan bukan (! ) ditandai otomatis (~M ). Untuk setiap paket yang cocok, nama paket (%p ) dan status (%C ) akan dicetak (ini meniru keluaran dpkg --get-selections ). LC_ALL=C memastikan bahwa semua keluaran dilakukan dalam bahasa Inggris tanpa terjemahan ke bahasa asli. Gunakan perintah yang disebutkan di atas untuk menginstal paket dari daftar ini. Lihat panduan pengguna aptitude untuk detailnya.


Ansible adalah penyediaan perangkat lunak sumber terbuka, manajemen konfigurasi, dan alat penerapan aplikasi. Ini berjalan pada banyak sistem mirip Unix, dan dapat mengkonfigurasi sistem mirip Unix serta Microsoft Windows. Ini mencakup bahasa deklaratifnya sendiri untuk menjelaskan konfigurasi sistem

(Dari Wikipedia.) Beranda (Github).

Ada beberapa orang lain dalam kategori yang sama. Membaca tentang kemungkinan akan memberi Anda kosakata untuk mencari yang lain, dan membandingkan, jika perlu. Nix adalah pesaing yang lebih baru. Beberapa mengatakan "lebih kompleks, tapi mungkin tepat.". koki juga hadir.

Contoh yang mungkin untuk hostname myhost , modul apt (ganti dengan yum atau apa pun):

ansible -K -i myhost, -m apt -a "name=tcpdump,tmux state=present" --become myhost

Daftar "tcpdump,tmux" dapat diperpanjang dengan koma. (Fakta bahwa hostname myhost dua kali di baris perintah, karena kami tidak menggunakan daftar inventaris host tetap, tetapi daftar ad-hoc, dengan tanda koma.)

Ini hanya menggores permukaan, Ansible memiliki koleksi modul yang luas.


Jika Anda hanya ingin menginstal banyak paket, satu baris sederhana dapat dilakukan seperti:

sudo bash -c 'for package in "tmux" "htop" "gimp"; do apt install -y --no-upgrade "$package"; done'

Loop tidak sepenuhnya diperlukan, tetapi tanpanya, jika apt gagal menemukan salah satu program dalam daftar, ia akan gagal menginstal paket lainnya. Ini dapat terjadi misalnya jika Anda beralih ke versi distro yang lebih baru dan paket yang lebih lama tidak lagi berada dalam repo. Jika Anda lebih suka semua atau tidak sama sekali, gunakan

sudo apt install -y --no-upgrade tmux htop gimp

Jika Anda juga ingin menyimpan konfigurasi Anda, istilah pencariannya adalah "dotfiles". Itulah yang disebut konfigurasi dalam sistem seperti Unix karena kebanyakan dimulai dengan ".".

Cara cepat dan kotor untuk menyimpannya adalah dengan menyalin semua direktori konfigurasi tersebut ke sistem baru Anda. Cara yang lebih baik adalah menempatkannya di bawah kontrol versi dengan alat seperti git. Saya menggunakan kombinasi skrip git, dotbot, dan tulisan tangan untuk menyiapkan sistem saya.

Perbarui

Satu hal yang hilang dari diskusi sejauh ini adalah apt biasanya bukan satu-satunya sistem manajemen paket yang dibutuhkan untuk apa pun di luar dasar-dasar. Alat manajemen paket lainnya mungkin snap , pip , conda , cargo dan banyak lagi. Ini secara implisit dibahas dalam jawaban oleh Alex Stragies. Ansible berisi sejumlah besar modul termasuk modul untuk mengelola paket selain apt seperti snap dan pip . Karena jawaban saya terfokus pada tulis-skrip Anda sendiri, saya ingin mengembangkannya. Kerangka kerja yang teruji dengan baik seperti Ansible umumnya lebih disukai untuk sebagian besar tugas, tetapi kode yang ditulis sendiri memberikan keuntungan dalam hal fleksibilitas di mata saya.

Kerangka kerja contoh kecil

Saya telah menulis kode kecil dengan python yang akan menunjukkan bagaimana kerangka kerja seperti itu akan terlihat.

#!/usr/bin/env python3

import os
import re
import sys
import subprocess

def read_package_list(path):
    package_list=[]
    try:
        with open(os.path.realpath(path)) as f:
            for line in f:
                match = re.search(r'^(?!\s*$)(?!#)\w+',line)
                if match:
                    package_list.append(match.group(0))
            return package_list
    except Exception as e:
        print(e.message)
        print(e.args)
        sys.exit(1)    
    return package_list

def install_packages(command,package_list,err_log):
    try:
        with open(err_log,'w+') as f:
            for p in package_list:
                print('executing '+command+' '+str(p))
                out=subprocess.run(command+' '+p,shell=True,stderr=f)
    except Exception as e:
        print(e.message)
        print(e.args)
        sys.exit(1)

def main():
    args = sys.argv[1:]
    package_list = read_package_list(args[1])
    err_log=os.path.realpath(args[2])
    install_packages(args[0],package_list,err_log)

if __name__ == '__main__':
    main()

Bahan dasarnya adalah fungsi untuk memproses daftar paket yang dipisahkan oleh baris baru (read_package_list ) dan fungsi untuk menjalankan perintah penginstal di shell (install_packages ). Baris dengan hanya spasi putih dan baris yang dimulai dengan # diabaikan saat membaca di daftar paket. main memproses argumen yang dapat diberikan pada baris perintah sebagai installer command , packagefile , errorlog .

Apa yang saya dapatkan?

Ya, Anda bisa menggunakan perintah penginstal apa pun yang Anda suka

./installerscript.py 'apt install --dry-run' myaptpackages.txt apt_err.log
./installerscript.py 'snap install' mysnaps.txt snap_err.log
./installerscript.py 'pip install --user' mypy.txt py_err.log
./installerscript.py 'git clone' repos.txt git_err.log

Ini mungkin membantu jika seseorang menyimpan daftar paket yang semuanya harus diperlakukan dengan cara yang sama. Setelah kerangka kerja seperti itu ada, mudah untuk memperbaikinya. Seseorang dapat, misalnya, menyesuaikan cara proses instalasi dicatat atau menyesuaikan pemrosesan argumen baris perintah. Aspek lainnya adalah skrip mungkin tidak boleh menjalankan setiap perintah sebagai root (jika dijalankan sebagai root) seperti saat ini.


Linux
  1. Linux – Apakah Ada Gui Untuk Linux yang Tidak Menggunakan X11?

  2. Bagaimana Cara Menginstal Perangkat Lunak Yang “Memerlukan Instalasi Paket Tidak Tepercaya”??

  3. Apakah Ada Perangkat Lunak yang Dapat Mengenali Not Musik Yang Saya Mainkan Ke Mikrofon – Untuk Membantu Saya Berlatih Musik?

  1. Instalasi Baru Ubuntu 14.04.1 Lts Membeku Setelah Masuk?

  2. Apakah ada variabel jalur instal Qt yang dapat saya gunakan di file .pro?

  3. Apakah mungkin menginstal semua paket dari repositori APT?

  1. Cara mengetahui versi paket mana yang dapat saya instal di APT

  2. Apakah ada alat baris perintah unix yang dapat menganalisis file font?

  3. Izinkan pengguna non-admin untuk menginstal paket melalui apt atau rpm?