📢 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>
最後に、GCCのヘルパーライブラリが必要になるので、/lib64ディレクトリからコピーする。<br>
次に、ロケールデータを生成する。<br>
これにより、/home/ユーザ名/InstallSoftware/GLIBCディレクトリにおいて、システムファイルを使用する準備が整う。<br>
  # 日本語のロケールデータを生成する場合
  # パッケージ管理システムによりインストールしたGCCを使用する場合
  mkdir /<GLIBCのインストールディレクトリ>/lib/locale
  cp -r /lib64/libgcc* /<GLIBCのインストールディレクトリ>/lib64
  /<GLIBCのインストールディレクトリ>/bin/localedef -i ja_JP -f UTF-8 /<GLIBCのインストールディレクトリ>/lib/locale/ja_JP.UTF-8
  # ホームディレクトリにインストールしたGCCを使用する場合
cp -r /<GCCのインストールディレクトリ>/lib64/libgcc* /<GLIBCのインストールディレクトリ>/lib64
<br>
<br>
Linux x86やUbuntuの場合、lib64ディレクトリではなく、libディレクトリを使用する必要がある。<br>
必要ならば、ロケール環境変数を設定する。<br>
ローカルインストールしたGLIBCを使用して任意のソフトウェアを実行する場合、以下に示す環境変数の設定が必要になる可能性がある。<br>
export LOCPATH=/<GLIBCのインストールディレクトリ>/lib/locale
export LOCALE_ARCHIVE=/<GLIBCのインストールディレクトリ>/lib/locale/locale-archive
<br><br>
<br><br>


== glibcの確認 ==
== 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>