Το Homebrew εγκαθιστά συγκεκριμένη έκδοση της φόρμουλας;

Πώς μπορώ να εγκαταστήσω μια συγκεκριμένη έκδοση μιας φόρμουλας στο homebrew; Για παράδειγμα, postgresql-8.4.4 αντί για την τελευταία έκδοση 9.0.

Λύση

TLDR: brew install postgresql@8.4.4 Ανατρέξτε στην απάντηση παρακάτω για περισσότερες λεπτομέρειες.


(Έχω ξαναδουλέψει την απάντησή μου για να δώσω μια πιο λεπτομερή ροή εργασίας για την εγκατάσταση/χρήση παλαιότερων εκδόσεων λογισμικού με το homebrew. Μη διστάσετε να προσθέσετε μια σημείωση αν βρήκατε την παλιά έκδοση καλύτερη.*) Ας ξεκινήσουμε με την απλούστερη περίπτωση:

  1. Ελέγξτε, αν η έκδοση είναι ήδη εγκατεστημένη (αλλά όχι ενεργοποιημένη)

    Όταν το homebrew εγκαθιστά έναν νέο τύπο, τον τοποθετεί σε έναν κατάλογο με έκδοση όπως /usr/local/Cellar/postgresql/9.3.1. Μόνο οι συμβολικοί σύνδεσμοι προς αυτόν το φάκελο εγκαθίστανται στη συνέχεια συνολικά. Κατ' αρχήν, αυτό καθιστά αρκετά εύκολη την εναλλαγή μεταξύ δύο εγκατεστημένων εκδόσεων. (*) Αν χρησιμοποιείτε το homebrew για μεγαλύτερο χρονικό διάστημα και δεν έχετε αφαιρέσει ποτέ τις παλαιότερες εκδόσεις (χρησιμοποιώντας, για παράδειγμα, το brew cleanup), υπάρχει πιθανότητα να υπάρχει ακόμα κάποια παλαιότερη έκδοση του προγράμματός σας. Αν θέλετε απλά να ενεργοποιήσετε αυτή την προηγούμενη έκδοση, το brew switch είναι ο ευκολότερος τρόπος για να το κάνετε αυτό. Ελέγξτε με το brew info postgresqlbrew switch postgresql) αν η παλαιότερη έκδοση είναι εγκατεστημένη:

$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M)
  Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more

Βλέπουμε ότι κάποια παλαιότερη έκδοση είναι ήδη εγκατεστημένη. Μπορούμε να την ενεργοποιήσουμε χρησιμοποιώντας το brew switch:

$ brew switch postgresql 9.1.5
Cleaning /usr/local/Cellar/postgresql/9.1.5
Cleaning /usr/local/Cellar/postgresql/9.3.2
384 links created for /usr/local/Cellar/postgresql/9.1.5

Ας ελέγξουμε δύο φορές τι είναι ενεργοποιημένο:

$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M) *
  Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M)
  Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more

Παρατηρήστε ότι το αστέρι * έχει μετακινηθεί στην πρόσφατα ενεργοποιημένη έκδοση () Παρακαλούμε σημειώστε ότι το brew switch λειτουργεί μόνο εφόσον όλες οι εξαρτήσεις της παλαιότερης έκδοσης εξακολουθούν να υπάρχουν. Σε ορισμένες περιπτώσεις, μπορεί να καταστεί απαραίτητη η αναδημιουργία της παλαιότερης έκδοσης. Επομένως, η χρήση του brew switch είναι κυρίως χρήσιμη όταν κάποιος θέλει να μεταβεί μεταξύ δύο εκδόσεων που δεν απέχουν πολύ μεταξύ τους.* 2) Ελέγξτε, αν η έκδοση είναι διαθέσιμη ως tap

Ειδικά για μεγαλύτερα έργα λογισμικού, είναι πολύ πιθανό να υπάρχει αρκετά μεγάλη ζήτηση για αρκετές (ενδεχομένως ασύμβατες με το API) κύριες εκδόσεις ενός συγκεκριμένου λογισμικού. Από τον Μάρτιο του 2012, το Homebrew 0.9 παρέχει έναν μηχανισμό για το σκοπό αυτό: Το αποθετήριο homebrew versions. Αυτό το αποθετήριο εκδόσεων μπορεί να περιλαμβάνει backports παλαιότερων εκδόσεων για διάφορους τύπους. (Κυρίως μόνο τις μεγάλες και διάσημες, αλλά φυσικά θα έχουν και αρκετές φόρμουλες για την postgresql). Το brew search postgresql θα σας δείξει πού να ψάξετε:

$ brew search postgresql
postgresql
homebrew/versions/postgresql8    homebrew/versions/postgresql91
homebrew/versions/postgresql9    homebrew/versions/postgresql92

Μπορούμε απλά να την εγκαταστήσουμε πληκτρολογώντας

$ brew install homebrew/versions/postgresql8
Cloning into '/usr/local/Library/Taps/homebrew-versions'...
remote: Counting objects: 1563, done.
remote: Compressing objects: 100% (943/943), done.
remote: Total 1563 (delta 864), reused 1272 (delta 620)
Receiving objects: 100% (1563/1563), 422.83 KiB | 339.00 KiB/s, done.
Resolving deltas: 100% (864/864), done.
Checking connectivity... done.
Tapped 125 formula
==> Downloading http://ftp.postgresql.org/pub/source/v8.4.19/postgresql-8.4.19.tar.bz2
# …

Σημειώστε ότι αυτό έχει επιτεθεί αυτόματα στη βρύση homebrew/versions. (Ελέγξτε με brew tap, αφαιρέστε με brew untap homebrew/versions.) Τα παρακάτω θα ήταν ισοδύναμα:

$ brew tap homebrew/versions
$ brew install postgresql8

Εφόσον οι τύποι των backported εκδόσεων παραμένουν ενημερωμένοι, αυτή η προσέγγιση είναι πιθανώς ο καλύτερος τρόπος για να αντιμετωπίσετε παλαιότερο λογισμικό. 3) Δοκιμάστε κάποιο τύπο από το παρελθόν

Οι ακόλουθες προσεγγίσεις παρατίθενται κυρίως για λόγους πληρότητας. Και οι δύο προσπαθούν να αναστήσουν κάποιον απέθαντο τύπο από το αποθετήριο brew. Λόγω αλλαγμένων εξαρτήσεων, αλλαγών στο API των προδιαγραφών της φόρμουλας ή απλώς μιας αλλαγής στη διεύθυνση URL λήψης, τα πράγματα μπορεί να λειτουργήσουν ή να μην λειτουργήσουν. Δεδομένου ότι ολόκληρος ο κατάλογος formula είναι ένα git repository, μπορεί κανείς να εγκαταστήσει συγκεκριμένες εκδόσεις χρησιμοποιώντας απλές εντολές git. Ωστόσο, πρέπει να βρούμε έναν τρόπο να φτάσουμε σε μια δέσμευση όπου η παλιά έκδοση ήταν διαθέσιμη. α) ιστορικοί χρόνοι Μεταξύ Αυγούστου 2011 και Οκτωβρίου 2014, το homebrew διέθετε την εντολή brew versions, η οποία έβγαζε όλες τις διαθέσιμες εκδόσεις με τους αντίστοιχους κατακερματισμούς SHA. Από τον Οκτώβριο του 2014, θα πρέπει να κάνετε την εντολή brew tap homebrew/boneyard για να μπορέσετε να τη χρησιμοποιήσετε. Όπως υποδηλώνει και το όνομα του tap, μάλλον θα πρέπει να το κάνετε αυτό μόνο ως έσχατη λύση. Π.χ.

$ brew versions postgresql
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
  https://github.com/Homebrew/homebrew-versions
9.3.2    git checkout 3c86d2b Library/Formula/postgresql.rb
9.3.1    git checkout a267a3e Library/Formula/postgresql.rb
9.3.0    git checkout ae59e09 Library/Formula/postgresql.rb
9.2.4    git checkout e3ac215 Library/Formula/postgresql.rb
9.2.3    git checkout c80b37c Library/Formula/postgresql.rb
9.2.2    git checkout 9076baa Library/Formula/postgresql.rb
9.2.1    git checkout 5825f62 Library/Formula/postgresql.rb
9.2.0    git checkout 2f6cbc6 Library/Formula/postgresql.rb
9.1.5    git checkout 6b8d25f Library/Formula/postgresql.rb
9.1.4    git checkout c40c7bf Library/Formula/postgresql.rb
9.1.3    git checkout 05c7954 Library/Formula/postgresql.rb
9.1.2    git checkout dfcc838 Library/Formula/postgresql.rb
9.1.1    git checkout 4ef8fb0 Library/Formula/postgresql.rb
9.0.4    git checkout 2accac4 Library/Formula/postgresql.rb
9.0.3    git checkout b782d9d Library/Formula/postgresql.rb

Όπως μπορείτε να δείτε, σας συμβουλεύει να μην τη χρησιμοποιήσετε. Το Homebrew φτύνει όλες τις εκδόσεις που μπορεί να βρει με την εσωτερική ευρετική του και σας δείχνει έναν τρόπο να ανακτήσετε τους παλιούς τύπους. Ας τον δοκιμάσουμε.

# First, go to the homebrew base directory
$ cd $( brew --prefix )
# Checkout some old formula
$ git checkout 6b8d25f Library/Formula/postgresql.rb
$ brew install postgresql
# … installing

Τώρα που η παλαιότερη έκδοση της postgresql είναι εγκατεστημένη, μπορούμε να επανεγκαταστήσουμε τον πιο πρόσφατο τύπο, προκειμένου να διατηρήσουμε το αποθετήριο μας καθαρό:

$ git checkout -- Library/Formula/postgresql.rb

Το brew switch είναι ο φίλος σας για να αλλάξετε μεταξύ της παλιάς και της νέας έκδοσης. β) προϊστορικές εποχές Για ειδικές ανάγκες, μπορούμε επίσης να δοκιμάσουμε το δικό μας ψάξιμο μέσα από το homebrew repo.

$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb

Το git log -S αναζητά όλα τα commits στα οποία η συμβολοσειρά '8.4.4' είτε προστέθηκε είτε αφαιρέθηκε στο αρχείο Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb. Ως αποτέλεσμα έχουμε δύο δεσμεύσεις.

commit 7dc7ccef9e1ab7d2fc351d7935c96a0e0b031552
Author: Aku Kotkavuo
Date:   Sun Sep 19 18:03:41 2010 +0300

    Update PostgreSQL to 9.0.0.

    Signed-off-by: Adam Vandenberg

commit fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
Author: David Höppner
Date:   Sun May 16 12:35:18 2010 +0200

    postgresql: update version to 8.4.4

Προφανώς, το fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 είναι το commit που μας ενδιαφέρει. Καθώς αυτό το commit είναι αρκετά παλιό, θα προσπαθήσουμε να υποβαθμίσουμε την πλήρη εγκατάσταση του homebrew (με αυτόν τον τρόπο, το formula API είναι λίγο πολύ εγγυημένο ότι θα είναι έγκυρο):

$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4

Μπορείτε να παραλείψετε την τελευταία εντολή για να διατηρήσετε την αναφορά στο git αποθετήριο σας. Μια σημείωση: Όταν ελέγχετε την παλαιότερη δέσμευση, υποβαθμίζετε προσωρινά την εγκατάσταση του homebrew σας. Έτσι, θα πρέπει να είστε προσεκτικοί, καθώς ορισμένες εντολές στο homebrew μπορεί να είναι διαφορετικές από την πιο πρόσφατη έκδοση. 4) Γράψτε χειροκίνητα έναν τύπο

Δεν είναι πολύ δύσκολο και στη συνέχεια μπορείτε να τον ανεβάσετε στο δικό σας αποθετήριο. Παλαιότερα υπήρχε το Homebrew-Versions, αλλά αυτό έχει πλέον καταργηθεί. A.) Bonus: Pinning

Αν θέλετε να κρατήσετε μια συγκεκριμένη έκδοση, ας πούμε της postgresql, και να σταματήσετε να την ενημερώνετε όταν κάνετε τη φυσική διαδικασία brew update; brew upgrade, μπορείτε να pin έναν τύπο:

$ brew pin postgresql

Οι καρφιτσωμένοι τύποι παρατίθενται στο /usr/local/Library/PinnedKegs/ και μόλις θελήσετε να φέρετε τις τελευταίες αλλαγές και ενημερώσεις, μπορείτε να τον ξεκαρφιτσώσετε ξανά:

$ brew unpin postgresql
Σχόλια (48)

Ανακάλυψα μια καλύτερη εναλλακτική λύση από τις άλλες πολύπλοκες λύσεις.

brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb

Αυτό θα κατεβάσει και θα εγκαταστήσει την PostgreSQL 8.4.8


Βρήκα αυτή τη λύση αρχίζοντας να ακολουθώ τα βήματα της αναζήτησης στο repo και ένα comment στο repo .

Μετά από μια μικρή έρευνα διαπίστωσα ότι κάποιος έχει μια συλλογή από σπάνια σκευάσματα για να παρασκευάσει με.


Αν ψάχνετε για MySQL 5.1.x, δοκιμάστε αυτό.

brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
Σχόλια (9)

Ενημέρωση στη γραμμή 8 του Library/Formula/postgresql.rb σε

http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2

Και MD5 στη γραμμή 9 σε

fcc3daaf2292fa6bf1185ec45e512db6

Αποθήκευση και έξοδος.

brew install postgres
initdb /usr/local/var/postgres

Τώρα σε αυτό το στάδιο μπορεί να αντιμετωπίσετε το σφάλμα postgresql could not create shared memory segment, για να το παρακάμψετε ενημερώστε το /etc/sysctl.conf ως εξής:

kern.sysv.shmall=65536
kern.sysv.shmmax=16777216

Δοκιμάστε ξανά το initdb /usr/local/var/postgres και θα πρέπει να τρέξει ομαλά.

Για να εκτελέσετε την postgresql κατά την εκκίνηση

launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist

Ελπίζω αυτό να βοηθάει :)

Σχόλια (0)