Προς το περιεχόμενο

Arch local mirror. Διόρθωση του script...


corrupted

Προτεινόμενες αναρτήσεις

https://wiki.archlinux.org/index.php/Local_Mirror

 

 Yes, this script is partially broken ON PURPOSE to avoid people doing copy-and-paste to create their own mirror. It should be easy to fix if you REALLY want a mirror.

 

Μπορει καποιος να βρει που ειναι broken το script ωστε να με βοηθησει με ενα mirror που θελω να παρω? Δεν τα παω καλα με bash scripting...

 

Edit: Ακυρο, φαινεται να δουλευει.

Του εδωσα το rsync://ftp.ntua.gr/archlinux/ και κατεβαζει κανονικα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Με το ABS τι μπορω να κανω?

 

Βασικα το κόνσεπτ ειναι η δημιουργια ενος DVD για offline installation σ'ενα μηχανημα που εχω στο χωριο και ειναι αχρησιμοποιητο, χωρις δικτυο. Για να εχω κατι να κανω οταν πηγαινω.

 

Οποτε σκεφτηκα:

 

1. Κατεβαζω το installation .iso

2. Χωνω αβερτα software στο δικο μου μηχανημα για να παρω με pacman -Q τη λιστα με τα packages.

3. Κανω mirror για να τραβηξω τα πακετα που χρειαζομαι, ευκολα.

4. Επεξεργαζομαι το installation .iso προσθετοντας στο root directory τους φακελους core, extra & community με τα πακετα μεσα.

5. Ξανακαιω το νεο .iso σε DVD5/DVD9.

6. Κατα τη διαρκεια της εγκαταστασης, κανω mount το DVD και δηλωνω στο mirrorlist το file:///mnt/path/ για server.

 

Αυτα. :-)

Σκεφτηκα καλα?

θα πετυχει?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

Γιατί να κάνεις local mirror; Για αρκετούς λόγους.

Αλλο local mirror με τα πακέτα που θες, άλλο όλο το σύμπαν

 

Με το ABS τι μπορω να κανω?

 

Βασικα το κόνσεπτ ειναι η δημιουργια ενος DVD για offline installation σ'ενα μηχανημα που εχω στο χωριο και ειναι αχρησιμοποιητο, χωρις δικτυο. Για να εχω κατι να κανω οταν πηγαινω.

 

Οποτε σκεφτηκα:

 

1. Κατεβαζω το installation .iso

2. Χωνω αβερτα software στο δικο μου μηχανημα για να παρω με pacman -Q τη λιστα με τα packages.

3. Κανω mirror για να τραβηξω τα πακετα που χρειαζομαι, ευκολα.

4. Επεξεργαζομαι το installation .iso προσθετοντας στο root directory τους φακελους core, extra & community με τα πακετα μεσα.

5. Ξανακαιω το νεο .iso σε DVD5/DVD9.

6. Κατα τη διαρκεια της εγκαταστασης, κανω mount το DVD και δηλωνω στο mirrorlist το file:///mnt/path/ για server.

 

Αυτα. :-)

Σκεφτηκα καλα?

θα πετυχει?

Ναι

 

Ενα μεγάλο USB δεν έχεις ?

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν εβαλα ολους τους φακελους, μονο τα core, extra και community.

Και το community τζαμπα θα το κατεβασω βασικα γιατι πολυ λιγα πακετα τραβαω απο κει.

Αλλα βαριεμαι να καθομαι να τα διαλεγω και να τα κατεβαζω ενα-ενα και προτιμω απλα να τα σβησω οταν ερθει η ωρα.



Ενα μεγάλο USB δεν έχεις ?

Εχω, απλα προτιμω να εχω DVD για installation medium.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

https://wiki.archlinux.org/index.php/Offline_Installation_of_Packages

έχει οδηγίες για αυτό που θες να κάνεις

 

εναλλακτικά μπορείς να δοκιμάσεις και κάποια arch-based-distro, αν και δεν είναι το ίδιο...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τελικα δεν βγαινει ακρη απο εδω...

https://wiki.archlinux.org/index.php/Offline_Installation_of_Packages

 

Και αυτο γιατι εχω εγκατεστημενα 1194 πακετα, και το "pacman -Sp --noconfirm package1 package2 package3 κλπ" δινει ως αποτελεσμα τα πακετα που ειναι εγκατεστημενα χωρις ολα τα deps τους, μου βγαζει δηλαδη σαν αποτελεσμα 531 πακετα.

 

Οποτε συνεχιζω το mirroring κανονικα.

 

Το θεμα ειναι πώς θα "ξεχωρισω" αυτα τα 1194 πακετα απο το τοπικό mirror για να φτιαξω το layout με τους φακελους στο original δισκάκι... Μαλλον με το χερι βλεπω να το κανω, αν εχει κανεις καμια ιδεα να γινει αυτοματοποιημενα, με χαρα να την ακουσω...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μιας και το έφερε η κουβέντα... Το παρακάτω script χρησιμοποιώ (για mirror του i686).

 

#!/bin/bash

Black='\e[0;30m'
Blue='\e[0;34m'
Green='\e[0;32m'
Cyan='\e[0;36m'
Red='\e[0;31m'
Purple='\e[0;35m'
Brown='\e[0;33m'
Light_Gray='\e[0;37m'
Dark_Gray='\e[1;30m'
Light_Blue='\e[1;34m'
Light_Green='\e[1;32m'
Light_Cyan='\e[1;36m'
Light_Red='\e[1;31m'
Light_Purple='\e[1;35m'
Yellow='\e[1;33m'
White='\e[1;37m'

Blink='\033[5m'
Bold='\033[1m'
Underline='\033[4m'

No_Color='\033[0m'

REPO="all"

SCRIPT_NAME=$(basename "$0")

# Array with the name ARGS which holds the parameters passed
ARGS=($@)
# The number of parameters passed
NUM_ARGS=$#

# trap ctrl-c.
trap ctrl_c INT

function put_error() {
        echo -e "\n${Light_Red}ERROR:${No_Color} $1\n"
}

function ctrl_c() { 

        put_error "Sync process terminated by user."
        rm -f "$SYNC_LOCK"

        exit 1

}

function show_help() {

        echo -e "\n${Light_Red}Usage:${No_Color} $SCRIPT_NAME [OPTION]\n\nOptions:"
        echo -e "--bwlimit KBPS       limit I/O bandwidth; KBytes per second"
        echo -e "--exclude PATTERN    exclude files matching PATTERN"
        echo -e "--repo REPO          Sync only the given repo"
        echo -e "--server NUMBER      Select server to sync from. --server list for a list o mirrors."
        echo -e "--help               show this help"
        echo -e "\nE.g. $SCRIPT_NAME (no options). Syncs everything, full bandwidth.\n     $SCRIPT_NAME --bwlimit 100. Syncs everything at 100 kbps."
        echo -e "     $SCRIPT_NAME --exclude kde* lib* --bwlimit 150 --repo extra --server 3. Syncs at 150 kbps only the Extra repository, ignoring files starting with kde or lib.\n"

        exit 0

}

#Checking if user running the script is root.
# Comment out the lines below.
#Start bellow
if [ `id -u` = 0 ]; then  
        put_error "You are running this script as root. I didn't want so. \n       You have to comment out the code that implements the check (~ line 68)."
        exit 1
fi
#Stop above


function is_number() {

        if [ -n "$1" ]; then

                if [ $1 -eq $1 > /dev/null 2>&1 ]; then
                        return 0
                fi
        fi

        return 1
}


# Set the rsync server to use
#Default server
SYNC_SERVER=rsync://ftp.hosteurope.de/archlinux

function server(){

        servers=(distro.ibiblio.org/distros/archlinux \
                        mirror.rit.edu/archlinux \
                        mirror.archlinux.fi/archlinux \
                        ftp.sh.cvut.cz/arch \
                        mirror.umoss.org/archlinux \
                        mir1.archlinuxfr.org/archlinux \
                        mirror.cs.vt.edu/archlinux \
                        ftp.hosteurope.de/archlinux \
                        archlinux.c3sl.ufpr.br/archlinux \
                        archlinux.giantix-server.de/archlinux \
                        ftp.hosteurope.de/archlinux \
                        laptop/archlinux)

        case "$1" in

        list)
                echo -e "Servers you can select from:\n"
                for i in `seq 0 $((${#servers[@]}-1))`; do echo "$i: ${servers[$i]}"; done
                echo
                echo -e "Default server: $SYNC_SERVER\n"
                exit 1
        ;;
        *)
                if ( ! is_number $1 ) || [ $1 -gt $((${#servers[@]}-1)) ] || [ $1 -lt 0 ]; then
                        put_error "Server must be a number between 0 and $((${#servers[@]}-1)). E.g. --server 3. --server list for a list of servers."
                        echo -e "       For more options try $SCRIPT_NAME --help\n"
                        exit 1
                fi
                SYNC_SERVER="rsync://${servers[$1]}"
        ;;
        esac

}


function param_fetcher() {

#FLAG_X is used to avoid writing "--exclude PATERN" multiple times. Now we write "--exclude PATERN1 PATERN2 ... PATERNx".
FLAG_X="1"
for (( i=0; i<$NUM_ARGS; i++ )); do

        case "${ARGS[i]}" in
                --repo)
                        FLAG_X="1"
                        if [ -n "${ARGS[i+1]}" ]; then
                                REPO=${ARGS[i+1]}
                                ((i++))
                        else 
                                put_error "Repo must be a repository name. E.g. --repo extra, or --repo testing."
                                echo -e "       For more options try $SCRIPT_NAME --help\n"
                                exit 1
                        fi
                ;;
                --help)
                        FLAG_X="1"
                        show_help
                ;;
                --bwlimit)
                        FLAG_X="1"
                        BAND_LIMIT=${ARGS[i+1]}
                        if ( ! is_number $BAND_LIMIT ); then
                                put_error "Bandwidth limit (--bwlimit) must be a number (kbytes) greater than zero (0). E.g. --bwlimit 150 means 150 kbytes"
                                echo -e "       For more options try $SCRIPT_NAME --help\n"
                                exit 1
                        fi
                        BAND_LIMIT="--bwlimit=$BAND_LIMIT"
                        ((i++))
                ;;
                --server)
                        FLAG_X="1"
                        server "${ARGS[i+1]}"
                        ((i++))
                ;;
                --exclude)
                        FLAG_X="0"
                ;;

                *)
                if [ $FLAG_X = "0" ]; then
                        EXCLUDE="$EXCLUDE --exclude ${ARGS[i]}"
                elif [ $FLAG_X = "1" ]; then
                        put_error "Unkown option. ${ARGS[i]}"
                        echo -e "       For more options try $SCRIPT_NAME --help\n"
                        exit 1
                fi
                ;;
        esac
done

}

# File system locations for the sync operations
SYNC_HOME="/mnt/storage1/arch"
SYNC_LOGS="$SYNC_HOME/logs"
SYNC_EXTRA="$SYNC_HOME/extra/os/i686/"
SYNC_CORE="$SYNC_HOME/core/os/i686/"
SYNC_COMMUNITY="$SYNC_HOME/community/os/i686/"
SYNC_TESTING="$SYNC_HOME/testing/os/i686/"
SYNC_LOCK="/tmp/mirrorsync.lck"



# Set the format of the log file name
# This example will output something like this: pkgsync_20070201-8.log
LOG_FILE="pkgsync_$(date +%Y%m%d-%H).log"

#Fetching the parameters
param_fetcher


if [ ! -d $SYNC_HOME ]; then
  put_error "$SYNC_HOME does not exist. Please create it and run this script again."
  exit 1
fi

# Do not edit the following lines, they protect the sync from running more than
# one instance at a time
if [ -f $SYNC_LOCK ]; then
  put_error "The sync failed. Check if $SCRIPT_NAME is already running.\n       If not you must manually remove the file $SYNC_LOCK"
  exit 1
fi

touch $SYNC_LOCK

# Create the log file and insert a timestamp
touch "$SYNC_LOGS/$LOG_FILE"

echo "=============================================" >> "$SYNC_LOGS/$LOG_FILE"
echo ">> Starting sync on $(date --rfc-3339=seconds)" >> "$SYNC_LOGS/$LOG_FILE"
echo -e ">> ---" >> "$SYNC_LOGS/$LOG_FILE"

echo -e "\n${Light_Red}Syncing from${No_Color} $SYNC_SERVER"

if [ $REPO = "all" ] || [ $REPO = "extra" ]; then
        echo -e "\n${Light_Cyan}############################################"
        echo    "####                                    ####"
        echo    "####   Synchronizing Extra repository   ####"
        echo    "####                                    ####"
        echo -e "############################################${No_Color}\n"

        rsync -rptLv --partial --progress --delete-after --size-only --ignore-errors --no-motd --exclude-from=/mnt/storage1/arch/extr_exclude $EXCLUDE $BAND_LIMIT $SYNC_SERVER/extra/os/i686/ $SYNC_EXTRA
fi

if [ $REPO = "all" ] || [ $REPO = "core" ]; then
        echo -e "\n${Light_Red}############################################"
        echo    "####                                    ####"
        echo    "####   Synchronizing Core repository    ####"
        echo    "####                                    ####"
        echo -e "############################################${No_Color}\n"

        rsync -rptLv --partial --progress --delete-after --size-only --ignore-errors --no-motd $EXCLUDE $BAND_LIMIT $SYNC_SERVER/core/os/i686/ $SYNC_CORE
fi

if [ $REPO = "all" ] || [ $REPO = "community" ]; then
        echo -e "\n${Light_Green}############################################"
        echo    "####                                    ####"
        echo    "#### Synchronizing Community repository ####"
        echo    "####                                    ####"
        echo -e "############################################${No_Color}\n"

        rsync -rptLv --partial --progress --delete-after --size-only --no-motd --ignore-errors --exclude-from=/mnt/storage1/arch/comm_exclude $EXCLUDE $BAND_LIMIT $SYNC_SERVER/community/os/i686/ $SYNC_COMMUNITY
fi

if [ $REPO = "all" ] || [ $REPO = "testing" ]; then
        echo -e "\n${Cyan}############################################"
        echo    "####                                    ####"
        echo    "####  Synchronizing Testing repository  ####"
        echo    "####                                    ####"
        echo -e "############################################${No_Color}\n"

        rsync -rptLv --partial --progress --delete-after --size-only --ignore-errors --no-motd --exclude-from=/mnt/storage1/arch/extr_exclude --exclude-from=/mnt/storage1/arch/comm_exclude $EXCLUDE $BAND_LIMIT $SYNC_SERVER/testing/os/i686/ $SYNC_TESTING
fi


#Insert another timestamp and close the log file
echo ">> ---" >> "$SYNC_LOGS/$LOG_FILE"
echo ">> Finished sync on $(date --rfc-3339=seconds)" >> "$SYNC_LOGS/$LOG_FILE"
echo "=============================================" >> "$SYNC_LOGS/$LOG_FILE"
echo "" >> "$SYNC_LOGS/$LOG_FILE"

# Remove the lock file and exit
rm -f "$SYNC_LOCK"

exit 0
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γιατί δεν παίρνεις όλα τα πακετά και θες να τα ξεδιαλέξεις?

Γιατι θελω να χωρεσω σ'ενα Dual Layer DVD τα πακετα και για i686 και για x86_64...

 

Ειναι πολυ δουλεια να κατσεις με το χερι να περασεις 2,5 χιλιαδες πακετα στο αρχικο .iso, οποτε θα δω τι θα κανω... το πολυ πολυ αν βαρεθω, να τα βαλω σε φλασακι 32GB, (χωρις τα games του community που ποιανουν αρκετο χωρο και χωρις αλλα μεγαλα πακετα, γιατι δε νομιζω να χωρανε ολα σε 32GB, αλλα θα το διαπιστωσω αυτο μολις τελειωσει το mirroring).

 

@firewalker:

Ευχαριστουμε.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ε, βαλε οτι τα x86_64 ειναι και μεγαλυτερα σε μεγεθος, οποτε σιγουρα δε χωρανε ολα σε φλασακι 32GB.

Και δεν εχω και εξωτερικο δισκο ρε γαμωτο...

 

Μαλλον θα αφιερωσω καποια ωρα για να τα ξεχωρισω με το χερι. :-)

 

Υπαρχει ενα θεμα ακομα.

Σκοπευα τη διαχειριση του .iso να την κανω απο Windows.

Aλλα βλεπω πως τα αρχεια που εχουν στο ονομα τους ανω-κατω τελεια ":", δεν αναγνωριζονται στα Windows.

 

Αυτα για παραδειγμα ειναι τα...

vi-1:050325-3-i686.pkg.tar.xz

vi-1:050325-3-i686.pkg.tar.xz.sig

 

image.png

 

Οποτε μαλλον πρεπει να τα κανω ολα σε Linux.

 

Ξερει κανεις πως κανουμε extract το boot sector απο το installation .iso, για να το περασω στο τελος ως παραμετρο στο mkisofs και να γινει το δισκακι παλι bootable?

 

Και να μπορω να το κανω απο terminal γιατι δεν τρεχω X και δεν εχω και τη δυνατοτητα να τρεξω λογω της GMA 3600 καρτας γραφικων...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ξερει κανεις πως κανουμε extract το boot sector απο το installation .iso, για να το περασω στο τελος ως παραμετρο στο mkisofs και να γινει το δισκακι παλι bootable?

Το βρηκα (μαλλον).

Στο arch installation disc, υπαρχει ενα αρχειο /ISOLINUX/ISOLINUX.BIN.

ΑΥΤΟ πρεπει να ειναι το boot sector, οποτε θα χρησιμοποιησω αυτο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...