Biên dịch Trình biên dịch Haskell của Glasgow trên Fedora 22


1

Vì vậy, tôi muốn nâng cấp "GHC 7.8.4-45" được đóng gói sẵn với Fedora 22 (lịch sự của Fedora Haskell SIG ) đến GHC 7.10.2 (mới nhất).

Làm thế nào để làm điều đó dễ dàng?


Fedora 24 vẫn còn trên GHC 7.8.4 ... chính xác hơn : "F.
David Tonhofer

Một cách thuận lợi, người ta có thể có được các phiên bản mới hơn thông qua trang SIG Fedora Haskell . Ở phía dưới được liệt kê những gì được gọi là "quân đoàn Haskell" ( copr dường như là hệ thống xây dựng liên tục, sau đó?). Đây là một copr cho 7.10.3 được xây dựng bởi " petersen ". Kho copr được kích hoạt bằng dnf copr enable petersen/ghc-7.10.3Nhưng làm cách nào để cài đặt phiên bản nâng cấp này?
David Tonhofer

Đây là cách: 1) Kích hoạt " dnf copr enable petersen/ghc-7.10.3 2) Loại bỏ đệ quy tất cả các gói được kéo trong gói fedora haskell-platform sử dụng dnf (thay vì rpm, không cung cấp tùy chọn đó): " dnf erase haskell-platform "3) Thêm lại các gói có thể có ích sau này:" dnf install ncurses-c++-libs freeglut-devel "vv 4) Chỉ cần chạy" dnf install ghc ". dnf sẽ lấy ghc mới nhất từ ​​kho lưu trữ petersen-ghc-7.10.3 và lấy bất kỳ phụ thuộc nào từ repora fedora (vì nó vẫn được bật), trong trường hợp của tôi ncurses-devel vv 5) Giành chiến thắng!
David Tonhofer

Câu trả lời:


1

Tài liệu & amp; Liên kết

Nguồn thông tin khởi đầu là tại haskell.org

Người ta có thể cài đặt bằng cách:

Hơn nữa:

Vì thế...

Chúng ta sẽ xây dựng Trình biên dịch Haskell của Glasgow ghc sử dụng Nền tảng Haskell trình cài đặt.

Sửa một số thư viện

Chúng tôi sẽ phải sử dụng tiền biên dịch, mới nhất Cabal công cụ gói thay vì hệ thống Cabal. Thật không may, nó chỉ có 32-bit.

Bạn có thể muốn gỡ cài đặt hiện có Cabal (chúng tôi sẽ thiết lập PATH đến cái mới Cabal sau đó, vì vậy điều này không thực sự cần thiết)

# as root
dnf erase cabal-install cabal-install-static ghc-Cabal-devel

Trên hệ thống 64 bit, chúng tôi cần phiên bản thư viện 32 bit cho cái mới Cabal:

# as root
dnf install glibc.i686 zlib.i686 gmp-devel.i686 gmp.i686

Để biên dịch ghc, chúng tôi cần 64-bit gmp-devel:

# as root
dnf install gmp-devel.x86_64

Kiểm tra xem cả 32 bit và 64 bit được cài đặt bằng cách sử dụng:

rpm --query gmp-devel
> gmp-devel-6.0.0-9.fc22.i686
> gmp-devel-6.0.0-9.fc22.x86_64

Được biên dịch trước ghc cho CentOS, mà chúng tôi sẽ tải xuống sau, sẽ tìm kiếm libgmp.3 tại một số điểm, vì vậy chúng tôi cần một liên kết tượng trưng:

# as root
cd /usr/lib64
ln -s libgmp.so.10.2.0 libgmp.so.3

Cài đặt các gói bổ sung

Sẽ có khiếu nại về các thư viện Z và thư viện 3D bị thiếu. Vì thế:

# as root
dnf install zlib-devel
dnf install freeglut freeglut-devel

Và có thể:

# as root
dnf install ncurses-devel libffi-devel

"Libffi" (giao diện chức năng nước ngoài) có vẻ thú vị.

Dù sao, bạn cần make (GNU tạo):

# as root
dnf install make

Thêm người dùng đặc biệt, người sẽ chạy quá trình xây dựng

Chúng tôi sẽ xây dựng như người dùng builder, không phải như root:

# as root
useradd builder

Thêm cũ ghc đi kèm với gói Fedora 22

Chúng tôi cần ghc đi kèm với Fedora 22 để bắt đầu biên soạn. Theo Platform Sẵn sàng , ghc phải là & gt; 7.4 (Fedora có ghc 7.8.4).

# as root
dnf install ghc

Điều này kéo theo 55 gói, bao gồm libffi-devel nếu nó chưa ở đó

Bạn cũng cần:

# as root
dnf install ghc-split

Hoặc bạn sẽ nhận được lỗi:

> cabal: At least the following dependencies are missing:
> hastache >=0.6.0, shake >=0.14, split -any, text -any

Thêm một tiền biên dịch mới Cabal

Như đã đề cập. bạn phải cài đặt tiền biên dịch Cabal để thay thế cái cũ đi kèm với Fedora 22.

Thực sự sử dụng Cabal 1.18.1.0 đi kèm với Fedora cuối cùng sẽ báo lỗi:

> ghc: ghc no longer supports single-file style package databases
> (dist/package.conf.inplace) use 'ghc-pkg init' to create the
> database with the correct format.

Trở thành người dùng builder:

su - builder

Nhận cái mới Cabal từ trang tải về cabal , nhưng như đã nói ở trên, nó hiện chỉ có trong 32-bit.

# as builder
cd
wget https://www.haskell.org/cabal/release/cabal-install-1.22.0.0/cabal-1.22.0.0-i386-unknown-linux.tar.gz
# 3.84 MiB; just contains the "cabal" binary
tar xzf cabal-1.22.0.0-i386-unknown-linux.tar.gz 
mkdir cabalbin
mv cabal cabalbin/

Thêm một tiền biên dịch gần đây ghc

Chúng ta cần một "liên kết" đóng gói sẵn ghc ) để biên dịch, được truyền dưới dạng đối số cho Haskell Platform.

Cái mới nhất có thể được tìm thấy đây - lấy cái "CentOS".

# as builder
cd
wget http://downloads.haskell.org/~ghc/7.10.2/ghc-7.10.2-x86_64-unknown-linux-centos66.tar.bz2

Không cần giải nén hoặc gỡ bỏ tarball 131.82 MiB.

Giai điệu Platform

Kiểm tra Sẵn sàng :

Nếu bạn đang xây dựng một hệ thống như Posix (Linux hoặc BSD), thì bạn có thể thêm tùy chọn dòng lệnh --prefix để chỉ định vị trí, trên hệ thống đích, cây của những thứ được xây dựng sẽ được đặt. Nó mặc định là "/ usr / local / haskell". Bản dựng sẽ bao gồm một thư mục khác có tên "ghc-x.y.z-arch" và mọi thứ sẽ được cài đặt bên dưới.

... vì vậy chúng tôi không điều chỉnh bất cứ điều gì bởi vì /usr/local/haskell âm thanh chính xác như những gì chúng ta muốn.

Và cũng:

Thêm -j [n] vào lệnh gọi xây dựng sẽ cho phép xây dựng trên nhiều lõi cùng một lúc.

Nó đã thử điều này nhưng dường như nó không hoạt động ...

Được Platform

Bản sao Platform từ github vào thư mục ".sav". Điều này là cần thiết bởi vì việc biên dịch có thể thất bại, và trong trường hợp đó bạn chỉ muốn thổi bay những gì đã làm và bắt đầu lại:

# as builder
cd
git clone https://github.com/haskell/haskell-platform
mv haskell-platform haskell-platform.sav

Sửa lỗi PATH của người dùng builder! Tại một số điểm, mới nhất, biên soạn ghc phải được sử dụng thay vì đi kèm với hệ thống!

Là người dùng builder, chỉnh sửa của bạn ~/.bash_profile và thêm:

PATH=$HOME/cabalbin/:$HOME/haskell-platform/build/ghc-bindist/local/bin/:$PATH:$HOME/.local/bin:$HOME/bin

Như đã thiết lập trước đó $HOME/cabalbin chứa một tươi Cabal và đôi khi $HOME/haskell-platform/build/ghc-bindist/local/bin/ sẽ chứa mới nhất ghc.

Đăng xuất / Đăng nhập để sử dụng PATH mới.

Xây dựng

Bây giờ bắt đầu xây dựng bằng cách sử dụng

# as builder
cd
/bin/rm -rf haskell-platform 
cp -a haskell-platform.sav haskell-platform 
cd haskell-platform
./platform.sh ../ghc-7.10.2-x86_64-unknown-linux-centos66.tar.bz2

Quá trình xây dựng này thực sự sẽ thành công nhưng có thể mất khoảng 20 phút trên một máy không chậm. Sau đó, bạn thấy:

> To install this build:
> 1) copy build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz to the target machine
> 2) untar it (creates files in the working directory)
> 3) as root, run the script ./install-haskell-platform.sh
> Build completed in 22:54m
> # tar (for build/product/hp-usr-local.tar.gz)
> # cp (for build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz)
> # tar (for build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz)

cài đặt, dựng lên

Tiến hành như mô tả ở trên

# as root
cp ~builder/haskell-platform/build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz ~
cd
tar xzf haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz
./install-haskell-platform.sh

Bạn thấy:

> Unpacking ./hp-usr-local.tar.gz to /...
> Running /usr/local/haskell/ghc-7.10.2-x86_64/bin/activate-hs ...
> 
> Haskell set to:
> GHC         /usr/local/haskell/ghc-7.10.2-x86_64
> Haddocks    file:///usr/local/haskell/ghc-7.10.2-x86_64/doc/frames.html
> Other doc   file:///usr/local/haskell/ghc-7.10.2-x86_64/share/doc/ghc/html/index.html
> 
> Symlinks for command line tools (ghc, cabal, etc..) added to:
> /usr/local/bin

Symlinks sẽ được cài đặt để /usr/local/bin/:

> activate-hs -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/activate-hs
> alex -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/alex
> cabal -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/cabal
> ghc -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc
> ghc-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc-7.10.2
> ghci -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghci
> ghci-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghci-7.10.2
> ghc-pkg -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc-pkg
> ghc-pkg-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc-pkg-7.10.2
> haddock -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/haddock
> haddock-ghc-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/haddock-ghc-7.10.2
> happy -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/happy
> hp2ps -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/hp2ps
> hpc -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/hpc
> hsc2hs -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/hsc2hs
> HsColour -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/HsColour
> runghc -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/runghc
> runghc-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/runghc-7.10.2
> runhaskell -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/runhaskell

Về nguyên tắc, chúng ta có thể thoát khỏi các gói hiện có của ghc (lệnh dưới đây chỉ hoạt động nếu bạn đưa ra -y để dnf erase )

rpm --query --all | grep -e '^ghc-' | xargs dnf erase

Chạy bộ thử nghiệm

Đó là một ý tưởng tốt để chạy bộ thử nghiệm.

Thật vậy, tôi đang gặp một số lỗi hiện tại ...

Những thứ này sẽ đi vào Nhà GHC Trắc

Xem " chạy thử nghiệm "Tại haskell.org để được hướng dẫn chung.

Để chạy thử nghiệm, người ta phải cài đặt nguồn bộ thử nghiệm từ trang này "trên đầu trang" cây nguồn được tạo bởi bản dựng:

# as builder
cd
# the '..' below is not a typo!
cd ./haskell-platform/build/ghc-bindist/ghc-7.10.2/..
wget http://downloads.haskell.org/~ghc/7.10.2/ghc-7.10.2-testsuite.tar.bz2
bunzip2 ghc-7.10.2-testsuite.tar.bz2
tar xf ghc-7.10.2-testsuite.tar

Bạn có thể muốn cài đặt các gói cabal bổ sung để chạy các thử nghiệm nhất định. Một số có thể đã được cài đặt. Chạy:

# as builder
## To install hmatrix you will probably have to perform, as root:
## dnf install blas-devel lapack-devel
# Linear systems, matrix decompositions, and other numerical computations
cabal install hmatrix 
# Monad classes using functional dependencies
cabal install mtl
# This package provides a library for parallel programming.
cabal install parallel
# Parsec is designed as an industrial-strength parser library.
cabal install parsec 
# various primitive memory-related operations
cabal install primitive
# library for random testing of program properties.
cabal install QuickCheck
# provides a basic random number generation library
cabal install random
# one module layer over regex-posix to replace Text.Regex
cabal install regex-compat  
# the generics system described in the "Scrap Your Boilerplate" papers
cabal install syb
# A UTF8 layer for Strings
cabal install utf8-string 
# An efficient implementation of Int-indexed arrays
cabal install vector 

Chạy cabal info $PACKAGE để có được thông tin gói. Cấu hình gói đi đến ~/.ghc/x86_64-linux-7.10.2/package.conf.d/, nội dung gói đi đến ~/.cabal/lib/x86_64-linux-ghc-7.10.2/$PACKAGE.

Sau đó bắt đầu kiểm tra . Chúng tôi sẽ nắm bắt đầu ra để ~/test_output.txt:

# as builder
cd
cd ./haskell-platform/build/ghc-bindist/ghc-7.10.2
make test 2>&1 | tee ~/test_output.txt

Sau một thời gian, bạn nhận được đầu ra:

> Unexpected results from:
> TEST="T9203 T9961 parsing001 T9675 T6048"
> 
> OVERALL SUMMARY for test run started at Mon Oct 26 17:52:52 2015 CET
>  0:33:17 spent to go through
>     4142 total tests, which gave rise to
>    15728 test cases, of which
>    11883 were skipped
> 
>       45 had missing libraries
>     3754 expected passes
>       41 expected failures
> 
>        0 caused framework failures
>        0 unexpected passes
>        0 unexpected failures
>        5 unexpected stat failures
> 
> Unexpected stat failures:
>    perf/compiler    T6048 [stat not good enough] (optasm)
>    perf/compiler    T9675 [stat not good enough] (optasm)
>    perf/compiler    T9961 [stat not good enough] (normal)
>    perf/compiler    parsing001 [stat too good] (normal)
>    perf/should_run  T9203 [stat too good] (normal)

Chấp nhận câu trả lời của riêng tôi ở đây. Câu hỏi này chắc chắn là gặp gỡ với sự thờ ơ ...
David Tonhofer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.