zainstaluj najnowszą gcc na rhel 6 x86_64


13

Mam serwer RHEL 6 z gcc w wersji 4.4.7. Chciałem zaktualizować wersję gcc (myślę, że bieżąca to 4.8). Aktualizacja Yum nie działa. Również odpowiedzi SO na podobne pytanie w CentOS nie działają. Postępowałem zgodnie z metodami w zaakceptowanej odpowiedzi, wynikiem jest „Błąd pobierania danych repozytorium do testowania-1.1-devtools-6, repozytorium nie znaleziono”. Nie jestem też pewien, czy powinienem stosować metody CentO.

Czy ktoś zaktualizował gcc na serwerze RHEL 6 x86_64?


Czy próbowałeś zainstalować go z tego repozytorium? hop5.in/yum/el6/repoview/gcc.html . Są to kompilacje binarne wersji 4.8.2. Prawdopodobnie będziesz musiał mieć 6,4 CentOS, aby je zainstalować, co może być twoim problemem.
slm

Czy instalacja ze źródła jest opcją?
MKK

tak, mogę zainstalować ze źródła w razie potrzeby.
rivu

dobre pytanie. Kto jest zwycięzcą? :(
Otheus

Najwyraźniej hop5.in nie jest już poprawnym repozytorium el6 niczego. @slm
Otheus

Odpowiedzi:


4

Jak dotąd najłatwiejszą metodą jest skorzystanie z kompilacji binarnej udostępnianej przez repozytorium YUM. Jedną z takich opcji byłoby użycie repozytorium hop5.in. W szczególności ta strona: gcc - Różne kompilatory (C, C ++, Objective-C, Java, ...) . Zapewniają wersję 4.8.2, która powinna współpracować z CentOS 6.3 lub 6.4. Przed aktualizacją możesz chcieć wykonać aktualizację:

$ sudo yum update

Inną opcją byłoby skorzystanie z zestawu narzędzi dla programistów , a konkretnie wersji dołączonej przez Scientific Linux.

Postępując zgodnie z instrukcjami instalacji , zasadniczo wykonasz następujące 2 kroki:

dodaj repozytoria
$ sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo \
    http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo
$ wget -O /etc/yum.repos.d/slc5-devtoolset.repo \
    http://linuxsoft.cern.ch/cern/devtoolset/slc5-devtoolset.repo
zainstaluj devtoolset
$ sudo yum install devtoolset-2

Aktualizacja nr 1

Wydaje się, że repozytorium hop5.in YUM zostało usunięte, więc jedynym wyjściem jest skorzystanie z wyżej opisanej metody devtoolset.

Dodatkowe przykłady instalacji przez devtoolset są wyróżnione w GitHub Gist: Instalowanie gcc 4.8 i Linuxbrew na CentOS 6 .


3
Próbowałem zainstalować rpm pobrane z pierwszego linku, mówi „błąd: nieudane zależności: cpp = 4.8.2-8.el6 jest wymagany przez gcc-4.8.2-8.el6.x86_64 ...”. W przypadku zestawu narzędzi dla programistów jest napisane: „ people.centos.org/tru/devtools-1.1/6Server/x86_64/RPMS/repodata/… : [Errno 14] PYCURL ERROR 22 -„ Żądany adres URL zwrócił błąd: 404 nie znaleziono ”. Myślę, że problem polega na tym, że w łączu jest 6Server zamiast 6. Nie wiem, jak to naprawić
rivu 21.04.2014

hop.in nie ma już tego, co myślę, że ma.
Otheus

1
Konieczny może być dodatkowy krok: Pobieranie i importowanie klucza cern http://ftp.scientificlinux.org/linux/scientific/5x/x86_64/RPM-GPG-KEYs/RPM-GPG-KEY-cern. Uwielbiam to, że strona nie ma https. Way to go scilinux. Po pobraniu (katalog tmp lub gdziekolwiek) zaimportuj go za pomocą, rpm --import RPM-GPG-KEY-cerna następnie zróbyum install.
Otheus

@Otheus - dziękuję, nienawidzę, gdy repos gryzą kurz w ten sposób, niszczy mnóstwo treści na interwebach 8-).
slm

1
Warto wspomnieć, że devtoolset-2-gcc(przynajmniej dla mnie) zainstalowałem tuzin pakietów i pobrano 35 MB, w porównaniu z 280 pakietami i pobranymi 575 MB yum install devtoolset-2.
miken32


2

Zbudowałem nowsze wersje gcc dla rhel6 dla kilku wersji teraz (od 4.7.x do 5.3.1).

Proces ten jest dość łatwy dzięki kompilacjom gcc Jakuba Jelinka z Redhat znalezionym na koji

Po prostu pobierz najnowsze src rpm dla dowolnej wersji, której potrzebujesz (np. 5.3.1 ).

Zasadniczo zaczynasz od określenia wymagań kompilacji poprzez wydanie rpm -qpR src.rpmszukania dowolnych wymagań wersji:

rpm -qpR gcc-5.3.1-4.fc23.src.rpm | grep -E '= [[:digit:]]'
binutils >= 2.24
doxygen >= 1.7.1
elfutils-devel >= 0.147
elfutils-libelf-devel >= 0.147
gcc-gnat >= 3.1
glibc-devel >= 2.4.90-13
gmp-devel >= 4.1.2-8
isl = 0.14
isl-devel = 0.14
libgnat >= 3.1
libmpc-devel >= 0.8.1
mpfr-devel >= 2.2.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
systemtap-sdt-devel >= 1.3

Teraz pojawia się żmudna część - każdy pakiet, który ma wersję wyższą niż dostarczona przez yum z twojej dystrybucji, należy pobrać z koji i powtarzać proces rekurencyjnie, aż zostaną spełnione wszystkie wymagania dotyczące zależności.

Oszukuję, btw.
Zwykle przepakowuję rpm, aby zawierał prawidłowe drzewo kompilacji za pomocą narzędzia GNU, aby użyć poprawnie umieszczonych i nazwanych wymagań, więc gmp / mpc / mpfr / isl (cloog nie jest już wymagany) są pobierane i odkładane na właściwą ścieżkę, a nowa (wzdęty) tar jest przebudowywany na nowy src rpm (z niewielkimi zmianami w pliku spec) bez zależności od ich wersji pakietowej (rpm). Ponieważ nie znam nikogo, kto używa ADA, po prostu usuwam fragmenty dotyczące komara z pliku specyfikacji, co dodatkowo upraszcza proces kompilacji, pozostawiając mi tylko binutils, o które trzeba się martwić.
Gcc może budować ze starszymi binutils, więc jeśli się spieszysz, dokonaj dalszej edycji pliku specyfikacji, aby wymagać wersji binutils, która jest już obecna w twoim systemie. Spowoduje to nieco kaleką gcc, ale w większości będzie działać wystarczająco dobrze.
Działa to całkiem dobrze głównie.

AKTUALIZACJA 1

Najprostszym sposobem na otwarcie src rpm jest prawdopodobnie yum, zainstaluj rpm i uzyskaj dostęp do wszystkiego pod ~ / rpmbuild, ale wolę

mkdir gcc-5.3.1-4.fc23
cd gcc-5.3.1-4.fc23
rpm2cpio ../gcc-5.3.1-4.fc23.src.rpm | cpio -id
tar xf gcc-5.3.1-20160212.tar.bz2
cd gcc-5.3.1-20160212
contrib/download_prerequisites
cd ..
tar caf gcc-5.3.1-20160212.tar.bz2 gcc-5.3.1-20160212
rm -rf gcc-5.3.1-20160212
# remove gnat
sed -i '/%global build_ada 1/ s/1/0/' gcc.spec
sed -i '/%if !%{build_ada}/,/%endif/ s/^/#/' gcc.spec
# remove gmp/mpfr/mpc dependencies
sed -i '/BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8.1/ s/.*//' gcc.spec
# remove isl dependency
sed -i '/BuildRequires: isl = %{isl_version}/,/Requires: isl-devel = %{isl_version}/ s/^/#/' gcc.spec
# Either build binutils as I do, or lower requirements
sed -i '/Requires: binutils/ s/2.24/2.20/' gcc.spec
# Make sure you don't break on gcc-java
sed -i '/gcc-java/ s/^/#/' gcc.spec

Masz również możliwość ustawienia prefiksu, aby ta rpm zainstalowała się obok siebie bez przerywania rpm dystrybucji (ale wymaga zmiany nazwy i pewnych modyfikacji wewnętrznych nazw pakietów). Zazwyczaj dodaję moduł środowiska, aby w razie potrzeby ładować i zwalniać ten gcc (podobnie jak działają kolekcje) jako część rpm (więc dodam nową zależność).

Na koniec utwórz drzewo rpmbuild i umieść pliki tam, gdzie powinien iść, i skompiluj:

yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec

AKTUALIZACJA 2

Zwykle nie powinno się używać systemu „serwerowego” do programowania - dlatego masz Fedorę, która jest już dostarczana z najnowszym gcc. Mam pewne szczególne wymagania, ale naprawdę powinieneś rozważyć użycie odpowiedniego narzędzia do zadania - rhel / centos do uruchamiania aplikacji produkcyjnych, fedora do tworzenia tych aplikacji itp.


Podawanie przyczyny jest grzeczne, gdy głosuje się w dół.
Dani_l

0

Cześć, oto co zrobiłem (kompilacja od zera). Bez obrazy dla innej odpowiedzi Jestem pewien, że to działa, ale GCC jest szczególnie ważna dla bezpieczeństwa, więc wolę kompilować z oryginalnego i oficjalnego źródła:

yum -y install gmp-devel mpfr-devel libmpc-devel glibc-devel glibc-devel.i686 zip unzip jar
wget http://mirrors.kernel.org/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.gz
tar -zxvf gcc-5.5.0.tar.gz
cd gcc-5.5.0
./configure
make
make install
yum remove gcc
rm -rf /usr/bin/gcc
rm -rf /usr/bin/c++
rm -rf /usr/bin/cc
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-gcc-5.5.0 /usr/bin/gcc
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-c++ /usr/bin/c++
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-gcc /usr/bin/cc

Źródło: http://realtechtalk.com/GCC_5_on_Centos_6_How_To_Install-1965-articles


Bezpieczeństwo to wielka sprawa, ale instalujesz z lokalizacji innej niż HTTPS :)?
dhag

W tym czasie na stronie mirrors.kernel.org nie włączono SSL, ale myślę, że jeśli nie możemy ufać kernel.org, mamy większe problemy :).
Areeb Soo Yasir,

-1

możesz wypróbować źródło gcc buid. GCC wymaga MPC, MPFR i GMP jako wymagań wstępnych. W przypadku GCC 4.8 zależność wersji to MPC 0.8 GMP 6.0 MPFR 2.4.2. Załaduj pakiety źródłowe i zainstaluj wszystkie pakiety w / usr / lib Kolejność instalacji to gmp, mpfr, mpc

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.