📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の8版が非表示) | |||
| 69行目: | 69行目: | ||
== GLIBC(GNU C Library)のインストール == | == GLIBC(GNU C Library)のインストール == | ||
GLIBCのビルドに必要な依存関係のライブラリをインストールする。<br> | |||
# SUSE | |||
sudo zypper install patterns-base-basesystem patterns-devel-base-devel_basis patterns-devel-C-C++-devel_C_C++ \ | |||
gcc gcc-c++ gawk bison make m4 gperf bison flex \ | |||
ncurses-devel ncurses5-devel expect expect-devel \ | |||
gdbm-devel libbz2-devel zlib-devel libdb-4_8-devel \ | |||
libopenssl-devel libopenssl-1_1-devel # OpenSSL 1を使用する場合 | |||
libopenssl-3-devel # OpenSSL 3を使用する場合 | |||
<br> | |||
現在使用しているGLIBCのバージョンを確認する。<br> | 現在使用しているGLIBCのバージョンを確認する。<br> | ||
ls -l /lib/libc-* | ls -l /lib/libc-* | ||
# 出力例 | |||
-rwxr-xr-x 1 root root 2205616 9月 13 00:35 /lib/libc-2.31.so* | |||
<br> | <br> | ||
まず、GLIBCのインストールディレクトリおよびビルドディレクトリを作成する。<br> | まず、GLIBCのインストールディレクトリおよびビルドディレクトリを作成する。<br> | ||
| 99行目: | 111行目: | ||
--enable-multi-arch \ # 32ビットを有効にする場合 | --enable-multi-arch \ # 32ビットを有効にする場合 | ||
--enable-stack-protector=strong \ | --enable-stack-protector=strong \ | ||
--enable-obsolete-rpc \ | |||
--enable-obsolete-nsl \ | |||
--enable-add-ons=libidn \ | --enable-add-ons=libidn \ | ||
--without-selinux \ # SELinuxが不要な場合 | --without-selinux \ # SELinuxが不要な場合 | ||
| 109行目: | 123行目: | ||
make localedata/install-others | make localedata/install-others | ||
<br> | <br> | ||
configureスクリプトで使用可能なオプションを、以下に示す。<br> | |||
* --enable-multi-archオプション | |||
*: マルチアーキテクチャサポートを有効にする。 | |||
*: 異なるCPUアーキテクチャ (例:x86_64, i386, Aarch64等) 向けのライブラリを同一システム上で共存させることができる。 | |||
*: <br> | |||
*: 動的リンカが実行時に最適なライブラリバージョンを選択できるようになる。 | |||
*: クロスコンパイルや異なるアーキテクチャのバイナリの実行をサポートする。 | |||
*: ロケールや文字セットのサポートを含む、アーキテクチャ固有の最適化を可能にする。 | |||
*: <br> | |||
* --enable-stack-protector=strongオプション | |||
*: 強力なスタック保護機能を有効にする。 | |||
*: <br> | |||
*: バッファオーバーフロー攻撃からの保護を強化する。 | |||
*: 関数の開始時にカナリア値 (ランダムな値) をスタックに配置して、関数終了時にこの値を確認する。 | |||
*: カナリア値が変更されていた場合、スタックの破壊が検出され、プログラムは即座に終了する。 | |||
*: strong値は、より多くの関数に対してこの保護を適用する。(サイズの小さな配列を持つ関数も含む) | |||
*: <br> | |||
* --enable-obsolete-rpcオプション | |||
*: 廃止予定のRPC(Remote Procedure Call)関連の機能を有効にする。 | |||
*: <br> | |||
*: 古いRPC関連の関数やライブラリ (例: rpc/rpc.hのヘッダファイル等) を含める。 | |||
*: 後方互換性のために必要な場合がある。 | |||
*: 新しいプログラムではこれらの機能の使用は推奨されないが、レガシーシステムとの互換性維持のために重要である。 | |||
*: <br> | |||
* --enable-obsolete-nslオプション | |||
*: 廃止予定のNSL (Network Services Library) 関連の機能を有効にする。 | |||
*: <br> | |||
*: 古いネットワークサービスライブラリ関連の関数 (例: gethostbyname関数等) を含める。 | |||
*: これらの関数は主にDNS解決に使用されていたが、現在では、getaddrinfo関数等の新しいAPIに置き換えられている。 | |||
*: レガシーソフトウェアとの互換性のために必要な場合がある。 | |||
<br> | |||
マルチアーキテクチャサポートと強力なスタック保護は、現代のシステムにおいて重要な機能である。<br> | |||
一方で、廃止予定のRPCとNSL機能の有効化は、主に古いソフトウェアとの互換性のために行われる。<br> | |||
<br> | |||
最後に、GCCのヘルパーライブラリが必要になるので、/lib64ディレクトリからコピーする。<br> | |||
これにより、/home/ユーザ名/InstallSoftware/GLIBCディレクトリにおいて、システムファイルを使用する準備が整う。<br> | |||
# パッケージ管理システムによりインストールしたGCCを使用する場合 | |||
cp -r /lib64/libgcc* /<GLIBCのインストールディレクトリ>/lib64 | |||
# ホームディレクトリにインストールしたGCCを使用する場合 | |||
cp -r /<GCCのインストールディレクトリ>/lib64/libgcc* /<GLIBCのインストールディレクトリ>/lib64 | |||
<br> | |||
Linux x86やUbuntuの場合、lib64ディレクトリではなく、libディレクトリを使用する必要がある。<br> | |||
<br><br> | |||
== Linuxカーネルヘッダのインストール (不要) == | |||
次に、[https://www.kernel.org Linuxの公式Webサイト]にアクセスして、Linuxカーネルをダウンロードする。<br> | 次に、[https://www.kernel.org Linuxの公式Webサイト]にアクセスして、Linuxカーネルをダウンロードする。<br> | ||
ダウンロードしたファイルを解凍する。<br> | ダウンロードしたファイルを解凍する。<br> | ||
| 120行目: | 180行目: | ||
Linuxのヘッダファイルをインストールする。<br> | Linuxのヘッダファイルをインストールする。<br> | ||
make -j $(nproc) headers_install INSTALL_HDR_PATH=<GLIBCのインストールディレクトリ> | make -j $(nproc) headers_install INSTALL_HDR_PATH=<GLIBCのインストールディレクトリ> | ||
<br><br> | |||
== ロケールデータ == | |||
まず、GLIBCのインストールディレクトリ内に、ロケールデータが正しく含まれているかどうかを確認する。<br> | |||
<br> | |||
/<GLIBCのインストールディレクトリ>/share/i18n/locales | |||
/<GLIBCのインストールディレクトリ>/share/i18n/charmaps | |||
<br> | <br> | ||
次に、ロケールデータを生成する。<br> | |||
# 日本語のロケールデータを生成する場合 | |||
# | mkdir /<GLIBCのインストールディレクトリ>/lib/locale | ||
/<GLIBCのインストールディレクトリ>/bin/localedef -i ja_JP -f UTF-8 /<GLIBCのインストールディレクトリ>/lib/locale/ja_JP.UTF-8 | |||
<br> | <br> | ||
必要ならば、ロケール環境変数を設定する。<br> | |||
ローカルインストールしたGLIBCを使用して任意のソフトウェアを実行する場合、以下に示す環境変数の設定が必要になる可能性がある。<br> | |||
export LOCPATH=/<GLIBCのインストールディレクトリ>/lib/locale | |||
export LOCALE_ARCHIVE=/<GLIBCのインストールディレクトリ>/lib/locale/locale-archive | |||
<br><br> | <br><br> | ||
== | == GLIBCの確認 == | ||
まず、インストールしたGLIBCのバージョンを確認する。<br> | まず、インストールしたGLIBCのバージョンを確認する。<br> | ||
strings /<GLIBCのインストールディレクトリ>/lib/libc.so.6 | grep GLIBC_ | strings /<GLIBCのインストールディレクトリ>/lib/libc.so.6 | grep GLIBC_ | ||
| 139行目: | 206行目: | ||
ビルドディレクトリにあるtestrun.shファイルを使用して、以下のようにコマンドを実行する。<br> | ビルドディレクトリにあるtestrun.shファイルを使用して、以下のようにコマンドを実行する。<br> | ||
/<GLIBCのビルドディレクトリ>/build/testrun.sh <実行するソフトウェアのパス> | /<GLIBCのビルドディレクトリ>/build/testrun.sh <実行するソフトウェアのパス> | ||
<br><br> | |||
== GLIBCを使用したソフトウェアの実行 == | |||
GLIBCを使用してソフトウェアを実行する場合、再リンクする必要がある。<br> | |||
<br> | |||
# まず、個別にインストールしたGLIBCのld-linux-x86-64.so.2ライブラリを直接実行して、パラメータとしてソフトウェアのパスを渡す。<br>これにより、ソフトウェアを再ビルドすることなく、ld-linux-x86-64.so.2ライブラリを置き換えることができる。 | |||
/<GLIBCのインストールディレクトリ>/lib/ld-linux-x86-64.so.2 \ | |||
--library-path /<GLIBCのインストールディレクトリ>/lib64:/<GLIBCのインストールディレクトリ>/lib:/usr/lib64:/usr/lib:/lib64:/lib \ | |||
<ソフトウェアの実行ファイルのパス> | |||
<br> | |||
<syntaxhighlight lang="sh"> | |||
# FileZillaを実行する場合 | |||
export PATH="/<FileZillaのインストールディレクトリ>/bin:$PATH"; \ | |||
export FZ_DATADIR="/<FileZillaのインストールディレクトリ>/share/filezilla" | |||
/<GLIBCのインストールディレクトリ>/lib/ld-linux-x86-64.so.2 \ | |||
--library-path /<GLIBCのインストールディレクトリ>/lib64:/<GLIBCのインストールディレクトリ>/lib:/usr/lib64:/usr/lib:/lib64:/lib \ | |||
/<FileZillaのインストールディレクトリ>/bin/filezilla | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||