Εγκατάσταση ghc-6.10.1 και cabal

Από Κοινότητα Ελεύθερου Λογισμικού ΕΜΠ
Μετάβαση σε: πλοήγηση, αναζήτηση

Στο άρθρο αυτό θα εξηγήσουμε πώς πολύ εύκολα μπορούμε να στήσουμε τον μεταγλωττιστή της Haskell, ghc-6.10.*, εάν δεν είναι διαθέσιμος για εγκατάσταση από τον package manager της αγαπημένης μας διανομής. Για μια πιο "καθαρή" εγκατάσταση προτείνεται να απεγκαταστήσουμε όποια άλλη έκδοση του GHC πιθανόν να έχουμε εγκατεστημένη στο μηχάνημά μας. Επίσης παρουσιάζεται η εγκατάσταση του χρήσιμου package manager του Hackage, που ονομάζεται Cabal. Χρησιμοποιείται για την εύκολη και αυτόματη εγκατάσταση πακέτων από το Hackage.


Κατέβασμα των binaries

Το πρώτο πράγμα που έχουμε να κάνουμε είναι να κατεβάσουμε τα binaries του GHC για το δικό μας λειτουργικό σύστημα, πηγαίνοντας σε αυτή τη διεύθυνση. Για παράδειγμα, για Linux x86 πάμε εδώ, όπου και επιλέγουμε ανάλογα με το libedit* μας ποια έκδοση θα κατεβάσουμε. Η έκδοση libedit0 προορίζεται για rpm-based διανομές (RedHat, Fedora, Suse), ενώ η έκδοση libedit2 για deb-based διανομές (Debian). Αν δε ξέρουμε τί θα πρέπει να κατεβάσουμε, αρκεί ένα

ls /usr/lib/ | grep libedit

για να μας δείξει ποιό libedit.so.* αρχείο έχουμε. Στη δικιά μου debian εγκατάσταση, το αποτέλεσμα της παραπάνω εντολής είναι

libedit.so.2
libedit.so.2.11

Αποσυμπίεση και Εγκατάσταση

Στο home directory μας δημιουργούμε ένα νέο directory, όπου μέσα θα εγκαταστήσουμε τον GHC (εδώ θα ονομάζεται /home/spyros/.inst), καθώς και ένα δεύτερο, όπου προσωρινά θα κρατήσουμε τα αρχεία που θα μας βοηθήσουν στην εγκατάσταση (εδώ θα ονομάζεται /home/spyros/ghc-new).

Με τις εντολές

cd
mkdir ~/.inst
mkdir ghc-new

δημιουργούμε τα παραπάνω directories.

Τα binaries του μεταγλωττιστή τα έχουμε κατεβάσει και σώσει στο /home/spyros/ghc-new. Το μόνο που έχουμε να κάνουμε πλέον είναι να κάνουμε untar τα binaries, και να εκτελέσουμε το installation script, αφού δώσουμε σαν παράμετρο το directory στο οποίο θέλουμε να εγκατασταθεί ο ghc (/home/spyros/.inst). Αυτά, γίνονται με τις παρακάτω εντολές:

cd /home/spyros/ghc-new
tar -xvvf ghc-6.10.1-i386-unknown-linux.tar.bz2
./configure --prefix=/home/spyros/.inst
make install

Αν όλα πάνε καλά, ένα μήνυμα σαν το παρακάτω θα πρέπει να εμφανιστεί στην οθόνη μας:

Installation of ghc-6.10.1 was successful.
To use, add /home/spyros/.inst/bin to your PATH.

Για να σιγουρευτούμε, αρκεί να δώσουμε ένα

ls /home/spyros/.inst

λογικά θα πρέπει να περιέχει μέσα 3 νέα directories:

bin  lib  share

Φτιάξιμο του bash completion

Υποθέτοντας ότι το shell που τρέχουμε είναι bash, κάνουμε edit το αρχείο ~/.bashrc:

cd
vi ~/.bashrc

και προσθέτουμε στο τέλος τις εξής εντολές:

if [ -d "$HOME/.root/bin" ] ; then
    PATH="$HOME/.root/bin:$PATH"
fi

Τώρα αρκεί ένα

bash

για να δούμε αν έχουμε κάνει configure τον ghc-6.10.1 να τρέχει όπως θέλουμε. Γράφοντας

ghc --version

βλέπουμε την έκδοση του ghc που έχουμε εγκατεστημένη. Στην περίπτωση αυτή, θα πρέπει το αποτέλεσμα να είναι

The Glorious Glasgow Haskell Compilation System, version 6.10.1

Κατεβάζουμε από εδώ τα αρχεία ghc-pkg και ghci, και τα αποθηκεύουμε σε ένα νέο directory, το ~/.inst/share/bash_completion:

cd
cd ~/.inst/share
mkdir bash_completion
wget http://haskell.org/~kolmodin/code/ghc-bash-completion/ghc-pkg
http://haskell.org/~kolmodin/code/ghc-bash-completion/ghci

Πάμε ξανά στο ~/.bashrc μας όπως πιο πάνω και προσθέτουμε τα εξής:

 if [ -d "$HOME/.root/share/bash_completion" ] ; then
    for f in $HOME/.root/share/bash_completion/*; do
        . $f
    done
fi

Τώρα έχουμε επιτυχώς εγκαταστήσει τον ghc-6.10.1 στο μηχάνημά μας!!

Εγκατάσταση του cabal

Στο directory /home/spyros/ghc-new κατεβάζουμε το tarball που περιέχει τα αρχεία του Cabal από το Hackage και το κάνουμε untar:

cd /home/spyros/ghc-new
wget http://hackage.haskell.org/packages/archive/cabal-install/0.6.2/cabal-install-0.6.2.tar.gz
tar -xvvf cabal-install-0.6.2.tar.gz
cd cabal-install-0.6.2/

Τώρα φτιάχνουμε το εκτελέσιμο "cabal" με την εντολή

./bootstrap.sh

και το μεταφέρουμε στο /home/spyros/.instr/bin/ ως εξής:

cd /home/spyros/.cabal/bin/
mv cabal ../../.inst/bin/

Φτιάχνουμε το bash-completion ακριβώς όπως πριν:

cd /home/spyros/ghc-new/cabal-install-0.6.2/bash-completion/
cp cabal /home/spyros/.inst/share/bash_completion/
cd /home/spyros/.inst/share/bash_completion/

Και τέλος, για να έχουμε man pages, φτιάχνουμε το manpath:

vi /home/spyros/.manpath

και μέσα γράφουμε την εντολή

MANDATORY_MANPATH /home/spyros/.inst/share/man

Τώρα δίνοντας

man ghc

θα πρέπει να βλέπουμε τις manpages για τον ghc-6.10.1

Ρύθμιση των παραμέτρων του Cabal

Στο directory /home/spyros.cabal/ φτιάχνουμε ένα config αρχείο ως εξής

cd /home/spyros/.cabal/
vi config

και το γεμίζουμε με τα εξής δεδομένα:

remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive
remote-repo-cache: /home/spyros/.cabal/packages
-- local-repo:
documentation: True
-- root-cmd:
-- symlink-bindir:
-- cabal-lib-version:
-- log-builds:
-- build-reports:
-- -----verbose: 1
-- builddir: dist
-- compiler: ghc
-- with-compiler:
-- with-hc-pkg:
-- program-prefix: 
-- program-suffix: 
library-vanilla: True
library-profiling: True
-- shared: False
-- executable-profiling: False
-- -------optimization: True
-- library-for-ghci: True
-- split-objs: False
-- executable-stripping: True
user-install: True
-- package-db:
-- flags:
-- extra-include-dirs:
-- extra-lib-dirs:
-- constraint:
-- username:
-- password: 

install-dirs user
 prefix: /home/spyros/.inst
 -- bindir: $prefix/bin
 -- libdir: $prefix/lib
 -- libsubdir: $pkgid/$compiler
 -- libexecdir: $prefix/libexec
 -- datadir: $prefix/share
 -- datasubdir: $pkgid
 -- docdir: $datadir/doc/$pkgid
 -- htmldir: $docdir/html
 -- haddockdir: $htmldir

install-dirs global
 -- prefix: /usr/local
 -- bindir: $prefix/bin
 -- libdir: $prefix/lib
 -- libsubdir: $pkgid/$compiler
 -- libexecdir: $prefix/libexec
 -- datadir: $prefix/share
 -- datasubdir: $pkgid
 -- docdir: $datadir/doc/$pkgid
 -- htmldir: $docdir/html
 -- haddockdir: $htmldir

Τέλος, με

cabal update

κατεβάζουμε από το Hackage τα υπάρχοντα πακέτα, και με

cabal install package_name

εγκαθιστούμε το πακέτο που εμείς επιθυμούμε.

Η χρήση του cabal είναι παρόμοια με το γνωστό aptitude του Debian (και άλλων package managers), έτσι δεν αποτελεί καθόλου δυσκολία η εγκατάσταση νέων πακέτων.