Panduan Upgrade GCC Gentoo Linux
1.
Pendahuluan
Upgrade GCC
Mengapa anda perlu melakukan upgrade? GCC sangat mirip dengan paket lain pada
sistem anda, hanya saja agak sedikit lebih penting. Anda harus meng-upgrade
GCC jika ada versi baru yang berisi perbaikan atas beberapa bug yang membuat
anda jengkel, fungsionalitas baru yang yang anda butuhkan, atau jika anda
hanya ingin menjaga sistem anda tetap up-to-date. Jika salah satu alasan di
atas cocok dengan anda, maka anda dapat melakukan upgrade GCC dengan aman
selama versi GCC anda didukung oleh para developer Gentoo.
Jika anda menginstal GCC versi mayor, seperti dari 3.3.6 ke 3.4.5), sistem
anda tidak akan berpindah untuk menggunakannya secara otomatis. Anda secara
eksplisit perlu melakukan proses perpindahan tersebut karena biasanya
membutuhkan beberapa langkah-langkah tambahan. Jika anda memutuskan untuk
tidak berpindah, Portage akan tetap menggunakan compiler versi lama sampai
anda berubah pikiran, atau membuang compiler lama dari sistem. Tetapi untuk
versi minor (seperti dari 3.4.5 ke 3.4.6), sistem anda akan berpindah secara
otomatis untuk menggunakan compiler baru.
Panduan ini berisi langkah-langkah yang diperlukan untuk menjalankan upgrade
compiler yang digunakan oleh sistem Gentoo. Terdapat sebuah seksi khusus untuk
upgrade dari GCC 3.3 ke 3.4 dan beberapa
masalah dengan libstdc++. Seksi khusus kedua diperuntukkan bagi para
pengguna yang baru pertama kali menginstal
Gentoo menggunakan tarbal stage3, setelah versi mayor/minor GCC dirilis.
Peringatan:
Perlu dicatat bahwa upgrade dari GCC-3.4 (atau 3.3) ke GCC-4.1 atau yang lebih
baru masih mengharuskan anda untuk mengikuti petunjuk upgrade umum, karena
GCC-3.4 dan GCC-4.1 menggunakan ABI yang sedikit berbeda.
|
2.
Petunjuk Upgrade Umum
Pendahuluan
Penting:
Jika anda memerlukan petunjuk khusus untuk upgrade dari GCC-3.3 ke GCC-3.4,
silahkan membaca seksi khusus.
|
Penting:
Jika anda memerlukan petunjuk khusus untuk upgrade GCC pada instalasi baru,
silahkan membaca seksi khusus.
|
Biasanya, melakukan upgrade ke rilis perbaikan, seperti dari 3.3.5 ke
3.3.6, sangatlah aman dilakukan -- emerge saja versi baru, perintahkan sistem
anda untuk menggunakannya lalu bangun-ulang paket yang terpengaruh, yaitu
libtool. Bagaimanapun juga, ada beberapa upgrade GCC yang merusak
kompatibilitas binari; pada kasus seperti ini, anda perlu membangun-ulang
semua paket yang terpengaruh (atau bahkan seluruh toolchain dan system).
Kami telah mengatakan bahwa anda perlu mengganti sendiri compiler anda ke
versi yang lebih baru. Bagaimanapun juga, terdapat satu pengecualian --
upgrade ke rilis perbaikan, seperti dari 3.3.5 ke 3.3.6 jika anda tidak
menggunakan fitur "multislot" yang mengizinkan beberapa versi GCC terinstal
pada sebuah sistem dalam waktu yang bersamaan. Multislot telah dinonaktifkan
secara default karena kebanyakan user tidak memerlukannya.
Daftar Kode 2.1: Upgrade GCC |
# emerge -uav gcc
# gcc-config i686-pc-linux-gnu-3.4.5
# env-update && source /etc/profile
# emerge --oneshot -av libtool
|
Sekarang mari kita bangun-ulang toolchain lalu world agar kita dapat
memanfaatkan compiler baru.
Daftar Kode 2.2: Bangun-ulang system |
# emerge -eav system
# emerge -eav world
|
Pada saat ini anda dapat membuang GCC versi lama dengan aman. Jika anda ingin
melakukannya, jalankan perintah berikut ini (seperti biasa, gantikan
=sys-devel/gcc-3.3* dengan versi yang ingin anda uninstall):
Daftar Kode 2.3: Membuang GCC versi lama |
# emerge -aC =sys-devel/gcc-3.3*
|
Penting:
harap dicatat bahwa GCC 4.1 dan yang lebih baru hanya dapat mengkompilasi
kernel 2.4.34. Jangan bang GCC versi lama anda jika anda ingin menggunakan
kernel lama.
|
Penting:
Jika anda sedang melakukan upgrade dari GCC 3.3, anda perlu menjalankan
emerge --oneshot sys-libs/libstdc++-v3 untuk mendapatkan kompatibilitas
dengan binari aplikasi C++ lama.
|
3.
Upgrade dari GCC-3.3 ke 3.4
Pendahuluan
Upgrade dari GCC-3.3 ke 3.4 agak kurang mulus disebabkan oleh perubahan ABI
C++. Terdapat sebuah masalah dengan pustaka libstdc++ yang perlu kita
urus.
Pilihan-pilihan
Penting:
Jika anda melakukan upgrade pada komputer SPARC, anda harus menjalakan
bangun-ulang sistem secara
menyeluruh disebabkan oleh perubahan beberapa ABI
internal pada penyampaian parameter GCC.
|
Anda memiliki dua pilihan dalam proses upgrade sistem anda. Metode pertama lebih cepat dan
membutuhkan penggunaan utilitas revdep-rebuild dari paket
gentoolkit. Sedangkan metode
ke dua akan membangun-ulang seluruh sistem anda dari awal agar
menggunakan fitur-fitur baru GCC. Anda bebas memilih metode manapun. Biasanya,
metode pertama sudah cukup baik.
Menggunakan revdep-rebuild
Metode ini mengharuskan anda menginstal gentoolkit jika anda belum
memilikinya. Kemudian kita akan meng-upgrade GCC lalu berpindah ke compiler
baru. Kita juga akan membangun ulang paket libtool untuk memastikan
agar toolchain dalam keadaan sempurna.
Daftar Kode 3.1: Instalasi gentoolkit dan upgrade GCC |
# emerge -an gentoolkit
# emerge -uav gcc
# gcc-config i686-pc-linux-gnu-3.4.5
# source /etc/profile
# emerge --oneshot -av libtool
|
Sekarang, kita akan melihat paket apa saja yang akan dibangun ulang oleh
revdep-rebuild. Kemudian kita akan memerintahkan revdep-rebuild untuk membangun
ulang paket-paket tersebut. Proses ini akan memakan waktu agak lama, sabarlah :)
Daftar Kode 3.2: Menggunakan revdep-rebuild |
# revdep-rebuild --library libstdc++.so.5 -- -p -v
# revdep-rebuild --library libstdc++.so.5
|
Catatan:
Anda mungkin akan mendapatkan masalah dengan versi-versi paket tertentu karena
telah usang atau telah di-mask. Jika memang begini, anda perlu menambahkan opsi
--package-names pada perintah revdep-rebuild. Opsi ini akan
mengkompilasi paket-paket berdasarkan namanya saja, bukan nama dan versi.
|
Untuk menyediakan kompatibilitas dengan aplikasi binari C++ lama dan paket-paket
yang mungkin terlewatkan oleh revdep-rebuild, sys-libs/libstdc++-v3 perlu
diinstal sebelum anda membuang GCC 3.3 dari sistem anda.
Daftar Kode 3.3: Instalasi libstdc++-v3 dan pembersihan |
# emerge --oneshot sys-libs/libstdc++-v3
# emerge -aC =sys-devel/gcc-3.3*
|
Menggunakan emerge -e
Metode ini, walaupun memakan waktu lebih lama, akan membangun-ulang seluruh
sistem anda untuk memastikan bahwa semuanya telah dibangun dengan compiler
terbaru anda, lebih aman dari metode sebelumnya. Pertama, anda perlu
meng-upgrade GCC dan libtool, lalu berpindah ke compiler baru anda.
Daftar Kode 3.4: Upgrade GCC |
# emerge -uav gcc
# gcc-config i686-pc-linux-gnu-3.4.5
# source /etc/profile
# emerge --oneshot -av libtool
|
Untuk menyediakan kompatibilitas dengan aplikasi binari C++ lama, anda perlu
menginstal sys-libs/libstdc++-v3.
Daftar Kode 3.5: Instalasi libstdc++-v3 |
# emerge --oneshot sys-libs/libstdc++-v3
|
Sekarang kita akan membangun-ulang system, kemudian world. Proses
ini akan memakan waktu cukup lama, tergantung kepada jumlah paket yang telah
terinstal, karena seluruh toolchain dan file-file pendukung sistem anda akan
dibangun-ulang, berikut seluruh paket pada sistem anda, termasuk toolchain tadi.
Proses ini diperlukan untuk memastikan agar seluruh paket telah dikompilasi
dengan toolchain baru, termasuk toolchain itu sendiri.
Daftar Kode 3.6: Membangun-ulang system dan world |
# emerge -e system
# emerge -e world
|
Pada saat ini anda dapat dengan aman membuang GCC versi lama:
Daftar Kode 3.7: Pembersihan |
# emerge -aC =sys-devel/gcc-3.3*
|
4.
Upgrade GCC pada Instalasi Pertama
Pendahuluan
Upgrade GCC pada sebuah sistem selepas instalasi dari tarbal stage3 merupakan
proses sederhana. Salah satu kelebihan yang didapatkan oleh para pengguna
dengan instalasi baru ialah, mereka belum memiliki paket-paket yang terkait
kepada GCC versi lama. Contoh berikut ini merupakan upgrade dari GCC-3.3 ke
3.4 atau yang lebih baru. Beberapa bagian mungkin akan berbeda jika anda
melakukan upgrade dari GCC versi lain. Sebagai contoh, nama pustaka yang
digunakan oleh revdep-rebuild di bawah ini hanya dimiliki oleh GCC 3.3,
seperti halnya dengan instalasi libstdc++-v3.
Jika seorang user belum pernah melakukan kustomisasi pada sistemnya, maka
hanya ada sedikit langkah yang perlu dijalankan untuk menyelesaikan proses
upgrade GCC ke versi terbaru. Untuk upgrade GCC-3.3 ke 3.4 upgrade, terdapat
beberapa pilihan. Tetapi, tidak seperti upgrade GCC-3.3 ke 3.4, yang satu ini
lebih mudah karena perbedaan di antara metode-metode yang ada lebih sedikit.
Metode pertama lebih cepat dan
memerlukan penggunaan utilitas revdep-rebuild dari paket
gentoolkit, mirip dengan prosedur di atas. Dengan menggunakan
revdep-rebuild, hanya paket-paket yang terkait langsung dengan pustaka
GCC saja yang akan dibangun-ulang, sedangkan metode ke dua akan menyebabkan seluruh
instalasi baru anda dikompilasi-ulang dengan versi GCC terbaru dan memerlukan
waktu yang lebih lama. Metode ke dua ini tidak pernah diperlukan dan
didokumentasikan hanya sebagai pelengkap.
Langkah-langkah pertama berikut ini sama untuk kedua metode, dan harus
dijalankan.
Daftar Kode 4.1: Upgrade GCC |
# emerge -uav gcc
# gcc-config i686-pc-linux-gnu-3.4.5
# source /etc/profile
# emerge --oneshot -av libtool
|
Untuk menyediakan kompatibilitas dengan aplikasi binari C++ lama, anda perlu
menginstal sys-libs/libstdc++-v3.
Daftar Kode 4.2: Instalasi libstdc++-v3 |
# emerge --oneshot sys-libs/libstdc++-v3
|
Menggunakan revdep-rebuild
Metode ini mengharuskan anda menginstal gentoolkit jika anda belum
memilikinya. Selanjutnya kita akan menjalankan revdep-rebuild untuk
memeriksa paket-paket yang perlu dibangun-ulang, kemudian membangun-ulangnya.
Daftar Kode 4.3: Instalasi gentoolkit dan Menjalankan revdep-rebuild |
# emerge -an gentoolkit
# revdep-rebuild --library libstdc++.so.5 -- -p -v
# revdep-rebuild --library libstdc++.so.5
|
Catatan:
Anda mungkin akan mendapatkan masalah dengan versi-versi paket tertentu karena
telah usang atau telah di-mask. Jika memang begini, anda perlu menambahkan opsi
--package-names pada perintah revdep-rebuild. Opsi ini akan
mengkompilasi paket-paket berdasarkan namanya saja, bukan nama dan versi.
|
Menggunakan emerge -e
Metode ini, walaupun memakan waktu lebih lama, akan membangun-ulang seluruh
sistem anda untuk memastikan bahwa semuanya telah dibangun dengan compiler
terbaru anda. Proses ini tidak diperlukan, tetapi boleh dilakukan jika anda
melakukan perubahan pada variabel CFLAGS atau yang lainnya di make.conf, yang
dapat berpengaruh pada kompilasi sistem.
Karena kita menjalankan upgrade pada instalasi awal, kita tidak perlu
mengkompilasi-ulang world. Tetapi, anda juga dapat memilih untuk
meng-update world sebagai ganti system untuk memastikan agar
semua paket ter-update.
Daftar Kode 4.4: Membangun-ulang system |
# emerge -e system
|
Pembersihan
Pada saat ini anda dapat membuang GCC versi lama dengan aman. Gantikan
VERSI_GCC_BARU_ANDA dengan versi yang baru saja anda instal:
Daftar Kode 4.5: Pembersihan |
# emerge -aC "<sys-devel/gcc-VERSI_GCC_BARU_ANDA"
|
5.
Kesalahan Umum
Anda perlu menonaktifkan distcc selama proses upgrade. Mencampur versi
compiler pada nodes anda akan mengakibatkan masalah. Hal ini tidak
berlaku untuk ccache, karena obyek cache akan menjadi tidak valid lagi.
Selalu gunakan versi GCC yang sama untuk kernel dan modul-modul kernel anda.
Ketika anda telah membangun-ulang world anda dengan GCC baru, modul-modul
eksternal (mis. app-emulation/qemu-softmmu) tidak akan dapat di-load.
Bangun-ulang kernel anda dengan GCC baru untuk memperbaikinya.
Jika anda menjalankan upgrade pada komputer SPARC, pastikan agar anda kembali
menjalankan silo -f setelah selesai membangun-ulang world untuk
menghindari masalah-masalah yang mungkin terjadi.
Pesan-pesan Error
Jika anda mendapatkan error libtool: link:
`/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/libstdc++.la' is not a valid libtool
archive, jalankan /sbin/fix_libtool_files.sh 3.3.6 (gantikan
"3.3.6" dengan nomor versi dari pesan error).
Jika anda melihat pesan error: /usr/bin/gcc-config: line 632:
/etc/env.d/gcc/i686-pc-linux-gnu-3.3.5: No such file or directory, maka
cobalah untuk menghapus /etc/env.d/gcc/config-i686-pc-linux-gnu
lalu jalankan lagi gcc-config, diikuti dengan source /etc/profile.
Tetapi hanya lakukan ini jika anda tidak memiliki cross-compilers.
Jika sebuah paket gagal ketika anda menjalankan emerge -e system atau
emerge -e world, anda dapat melanjutkan dengan emerge --resume.
Jika sebuah paket gagal berulang-kali, lewati paket tersebut dengan emerge
--resume --skipfirst. Jangan jalankan perintah emerge lain secara bersamaan
atau anda akan kehilangan informasi resume.
Jika anda mendapatkan pesan error spec failure: unrecognized spec option
ketika meng-upgrade compiler anda, cobalah untuk berpindah kembali ke compiler
default anda, unset variabel GCC_SPECS lalu jalankan lagi upgrade GCC:
Daftar Kode 5.1: Mengambalikan spec primari |
# gcc-config 1
# source /etc/profile
# unset GCC_SPECS
# emerge -uav gcc
|
Isi dokumen ini dilisensikan dengan lisensi Creative Commons -
Attribution / Share Alike.
|