Persikeliant skriptus į naują Debian kompiuterį: kaip užtikrinti, kad visi reikalingi įrankiai bus įdiegti

 Persikeliant skriptus į naują kompiuterį, dažnai susiduriame su problema, kad skriptai neveikia tinkamai arba iš viso neveikia dėl trūkstamų programų. Tai ypač aktualu naudojant Debian ar kitą Linux distribuciją, kurioje gali nebūti visų skriptuose naudojamų programų. Šiame straipsnyje aptarsiu, kaip automatizuoti šį procesą ir užtikrinti, kad visi reikalingi įrankiai būtų įdiegti naujoje sistemoje.

Problemų diagnostika

Keliant skriptus į kitą kompiuterį, pastebėjau, kad daugelis jų neveikia dėl trūkstamų programų, tokių kaip zenity, kdialog, jq ir t.t. Norint, kad skriptai veiktų, reikia įsitikinti, kad visos šios programos yra įdiegtos naujoje sistemoje.

Sprendimo planas

Tam, kad išspręsti šią problemą, sukūriau du Bash skriptus. Pirmasis skriptas suranda visas naudojamas programas .sh failuose, esančiuose tam tikrame kataloge, ir išsaugo jas į failą. Antrasis skriptas naudoja šį sąrašą, kad įdiegtų trūkstamas programas naujoje sistemoje.

Skriptas programų suradimui

Pirmasis skriptas naudoja find, grep ir command -v komandas, kad surastų ir patikrintų programas .sh failuose:


#!/bin/bash
 
# Katalogas, kuriame ieškosime .sh skriptų
SEARCH_DIR="$HOME/git"
 
# Rezultato failas
OUTPUT_FILE="$HOME/used_programs.txt"
 
# Išvalyti rezultatų failą jei jis jau egzistuoja
> "$OUTPUT_FILE"
 
# Pereiti per visus .sh failus kataloge
find "$SEARCH_DIR" -name "*.sh" | while read -r script; do
    # Ištraukti visus naudojamus įrankius iš kiekvieno skripto
    grep -oE '\b([a-zA-Z0-9_]+)\b' "$script" | sort -u | while read -r program; do
        # Patikrinti, ar programa egzistuoja sistemoje
        if command -v "$program" > /dev/null 2>&1; then
            echo "$program" >> "$OUTPUT_FILE"
        fi
    done
done
 
# Išvalyti dublikatus iš rezultatų failo
sort -u -o "$OUTPUT_FILE" "$OUTPUT_FILE"
 
echo "Programos išsaugotos faile $OUTPUT_FILE"

Skriptas programų įdiegimui

Antrasis skriptas skaito programų sąrašą iš failo ir įdiegia kiekvieną programą, kurios dar nėra sistemoje, naudojant apt-get ir apt-cache show komandas:


#!/bin/bash
 
# Failas su programų sąrašu
PROGRAMS_FILE="$HOME/used_programs.txt"
 
# Funkcija patikrinti, ar paketas egzistuoja
package_exists() {
    apt-cache show "$1" > /dev/null 2>&1
}
 
# Skaityti kiekvieną eilutę iš failo
while read -r program; do
    # Patikrinti, ar programa jau yra įdiegta
    if ! command -v "$program" > /dev/null 2>&1; then
        if package_exists "$program"; then
            echo "Įdiegiama programa: $program"
            # Bandome įdiegti programą
            sudo apt-get install -y "$program"
        else
            echo "Paketas $program neegzistuoja, praleidžiama."
        fi
    else
        echo "Programa $program jau įdiegta."
    fi
done < "$PROGRAMS_FILE"
 
echo "Visos programos įdiegtos arba jau buvo įdiegtos."

Kaip tai veikia

  1. Programų suradimas: Pirmasis skriptas suranda visus .sh failus nurodytame kataloge. Jis naudoja grep ir command -v, kad ištrauktų ir patikrintų, ar skriptuose naudojamos komandos egzistuoja sistemoje. Visos rastos komandos išsaugomos į failą used_programs.txt.
  2. Programų įdiegimas: Antrasis skriptas skaito used_programs.txt failą ir patikrina, ar kiekviena programa jau yra įdiegta. Jei programa nėra įdiegta, jis patikrina, ar tokia programa egzistuoja paketų saugykloje, naudodamas apt-cache show. Jei taip, programa įdiegiama naudojant sudo apt-get install -y.

Patobulinimai

Nors šie skriptai veikia gerai, yra keletas galimų patobulinimų:

  1. Geriau apdoroti klaidas: Skriptai galėtų geriau apdoroti klaidas, pvz., pranešti apie konkrečias problemas, jei paketo įdiegimas nepavyksta.
  2. Papildomi patikrinimai: Galima pridėti papildomus patikrinimus, pvz., patikrinti ne tik ar programa egzistuoja, bet ir ar ji yra tinkamos versijos.
  3. Kryžminio platforminio suderinamumo: Jei reikia perkelti skriptus į skirtingas Linux distribucijas, galima pridėti logiką, kuri nustato paketų tvarkymo sistemą (pvz., yum ar dnf vietoj apt-get).
  4. Išplėstinės komandos paieška: Dabartinis sprendimas ieško tik paprastų komandų. Galima patobulinti, kad būtų atpažįstami sudėtingesni scenarijai, pvz., komandos su argumentais.

Naudojant šiuos skriptus, galiu lengvai perkelti savo skriptus į naują kompiuterį ir užtikrinti, kad visi reikalingi įrankiai bus įdiegti. Tai ženkliai palengvina darbą ir taupo laiką, ypač kai reikia greitai konfigūruoti naujas darbo aplinkas.

Komentarai

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Monitoring SFTP server updates with Python