投稿

ラベル(Linux)が付いた投稿を表示しています

CentOS 7でkernelモジュールを作成してロードした

Follow @venividivici830 Linuxカーネルは、ローダブルモジュールのサポートを有効にした場合、カーネルの機能の一部をモジュールとして、カーネルの動作中に動的に追加することができる。 デバイスドライバーは、カーネルモジュールとして作られることが多い。 デバイスドライバーを勉強するための前提知識として、カーネルモジュールを作成してロードしてみた。 OSは、CentOS Linux release 7.6.1810 (Core)。 作業時のOSの状態としては、CentOS-7-x86_64-Minimal-1810.isoから、デフォルトのパラメーターでインストールした直後。 モジュールのコンパイル〜挿入・削除 必要なパッケージのインストール。 sudo yum -y install kernel-devel-$(uname -r) sudo yum -y install gcc 任意のディレクトリーに、module_test.cとMakefileの2つのファイルを、同じディレクトリー下に作成。 module_test.c #include <linux/module.h> int test_init(void) { printk("module init\n"); return 0; } void test_exit(void) { printk("module exit\n"); } module_init(test_init); module_exit(test_exit); Makefile obj-m := module_test.o KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) M=$(PWD) modules コンパイル。 make make -C /lib/modules/3.10.0-957.el7.x86_64/build M=/home/myuser modules make[1]: ディレクトリ `/usr/src/kernels/3.10.0-957...

LinuxインストールDVDの内部動作 - initrd, isolinux, vmlinuz, Anacondaなど-

イメージ
普段何気なく使っているインストールDVDだが、裏では initrd、isolinux、vmlinuz、Anaconda など、様々なファイルやソフトウェアーが協調して動作している。 本稿では、LinuxインストールDVDの内部動作を追い、initrd、isolinux、vmlinuz、Anaconda などについて理解を深めることを目的とした。 コンテンツは下記のとおり。 インストールDVDの中身 基本的なブートの仕組み initrdについて インストールDVDのディレクトリー構造 インストーラーが起動するまでの流れ インストールされるシステムはどこにあるのか インストールDVDの中身 インストールDVD = インストーラーではない。 インストーラーは、インストールDVDに含まれる一部のファイルであり、 インストールプログラム(installation program) などと呼ばれる。 インストールプログラムは、インストールDVDに含まれるリソースを使いながら、実際のインストール作業を行うプログラムである。 例えば、FedoraやRed Hat系ディストリビューションでは、 Anaconda という名前のインストールプログラムが使われている。 インストールプログラムは、インストールという特別な作業を行うことを除けば、普通のプログラムと変わらない。 例えば、Anacondaは、PythonとCで書かれたプログラムである。 よって、実行するにはOSが必要である。 つまり、新しくOSをインストールするために、(既存の)OSを起動(ブート)することになる。 インストールプログラムを実行するためにブートするOSは、起動に必要なリソースとともに、インストールDVDの中に入っている。 まとめると、インストールDVDは下記を含むメディアと言える。 インストールプログラム、及びインストールに必要なリソース インストールプログラムを実行するために起動するOS、及び起動に必要なリソース 基本的なブートの仕組み 上に書いたように、インストールプログラムを実行するためには、インストールDVDの中に入っているOSを起動(ブート)することになる。 よって、インストールDVDの動作を理解するためには、ブートを理解する必要...

KickstartによるBondingの設定(CentOS 7)

イメージ
Follow @venividivici830 ボンディング(Network bonding)は、複数のネットワークインターフェイスを、1つの仮想的なNICとして扱う機能。 ネットワークの冗長性やスループット向上に寄与する。 第4章 ネットワークボンディングの設定 5.4 ネットワーク・ボンディング ボンディングにより作成された仮想的なデバイスはマスター(master)、統合される物理デバイスはスレーブ(slave)と呼ばれる。 CentOS7で作るネットワークサーバ構築ガイド1804対応第2版 本投稿では、 Kickstartにより、自動的にBondingを設定して、CentOS 7をインストール した。 PXEサーバー、PXEクライアントは、ともにVirtualBox Version 5.2.20 r125813 (Qt5.6.3)の仮想マシンで、OSはCentOS Linux release 7.6.1810 (Core)とした。 ネットワーク構成は下記のとおり。 PXEサーバーは、既に構築されていることを前提とする。 PXEにより、VirtualBoxでCentOS 7のインストーラーを起動した(図で解説あり) また、 キックスタートファイルの配置場所は、PXEサーバーの/var/share/kickstart_filesで、NFSでexportされていることを前提とする。 VirtualBoxにおけるPXEとKickstartによるCentOS 7の自動インストール PXEクライアントの作成  VirtualBoxの仮想マシンとして、CentOS Client1、CentOS Client2の2つを作成した。 それぞれの仮想マシンの設定で、下記を実施。 システム > マザーボードから、起動順序の「ネットワーク」にチェック(PXEブートを行うため) ネットワークから、アダプター1とアダプター2を、割り当て「内部ネットワーク」として作成(PXEサーバーとの通信、及びBondingのスレーブとするため) 後の作業で必要になるため、それぞれの仮想マシンのアダプター1のMACアドレスを控えた。 CentOS Client1 - 08:00:27:A3:01:0...

PXEにより、VirtualBoxでCentOS 7のインストーラーを起動した(図で解説あり)

イメージ
Follow @venividivici830 VirtualBox Version 5.2.20 r125813 (Qt5.6.3)、CentOS Linux release 7.6.1810 (Core)を用いて、PXEによるインストーラーの起動までを試した。 PXEサーバー、PXEクライアントともに、VirtualBoxの仮想マシン。 作業開始時点のPXEサーバーの状態は、Minimal ISOをインストールした直後とする。 SELinuxはEnforcing、firewalldはstopしないで必要なだけ開放した。 基本的に、 Redhatの公式ドキュメント のやり方を踏襲した。 PXEについて PXEは、ネットワークブートを実現する仕組み。 OSやインストーラーを、ネットワーク経由で起動できる。 Kickstartと組み合わせることで、Linux OSのインストールを自動化できる。 PXEに必要なサーバーは、下記の3つ。 DHCPサーバー - IPアドレス付与、TFTPサーバーとブートローダーの場所を教える  TFTPサーバー - ブートローダーを提供、インストールソースの場所を教える  ファイルサーバー(HTTP、FTP、NFSなど) - インストールソースを提供  PXEクライアントは、これら3つのサーバーとやり取りし、ネットワーク経由でのOSやインストーラーの起動に必要な情報を順次取得していく。 下図はイメージ。 青はサーバー、緑は設定ファイルまたはブートに必要なリソースで、PXEサーバーを構築するために編集や配置を行うもの。 ネットワーク設定 ネットワーク構成は下図のようにした。 VirtualBoxのゲストOSとして2台のサーバーを作り、それぞれPXEサーバー、PXEクライアントとした。 PXEサーバーには、Minimal ISOでCentOS Linux release 7.6.1810 (Core)をインストールした。 PXEサーバーは、NICを2つ設定し、1つはブリッジアダプター、もう1つは内部ネットワークとして設定した。 ブリッジアダプターはホストOSと同じネットワークに所属し、家庭のルーターからDHCPでIPアドレスが動的に割り...

CentOS 7にGuest Additionsをインストールし、VirtualBoxの共有フォルダーを設定した

イメージ
Follow @venividivici830 VirtualBoxで、ゲストOSのCentOS 7と、ホストOSのMac間で、共有フォルダーを設定した。 VirtualBoxのバージョンは、Version 5.2.20 r125813 (Qt5.6.3)。 CentOS 7のバージョンは、CentOS Linux release 7.6.1810 (Core)で、Minimal ISOからインストールしたもの。 Guest Additionsのインストール 共有フォルダーの設定には、Guest Additionsのインストールが必要 なので、 Install VirtualBox Guest Additions in CentOS, RHEL & Fedora を参考に、Guest Additionsをインストールした。 最初に、Guest Additionsのインストールに必要なパッケージの取得や、環境変数の設定を実施。 # EPELリポジトリーを追加 yum -y install epel-release # yumパッケージを最新にする yum -y update # いったん再起動 reboot # Guest Additionsのインストールに必要なパッケージをインストール yum -y install make gcc kernel-headers kernel-devel perl dkms bzip2 # KERN_DIR環境変数の設定、export export KERN_DIR=/usr/src/kernels/$(uname -r) 次に、VBoxGuestAdditions.isoをmountした。 Guest Additionsは、このISOからインストールする。 Virtualboxのメニューバーの下記のボタンから、仮想的なCDを挿入。 Devices > Insert Guest Additions CD image... 設定が変更された〜旨のダイヤログが表示されたので、「設定を再読み込み」を選択した。 下記のコマンドで仮想的なCDをmountし、Guest Additionsをインストールした。 # Guest Additions CD imageの...

SquidのDigest認証でパスワードファイルをハッシュ化する

イメージ
Follow @venividivici830 SquidでDigest認証(ダイジェストにんしょう)を設定した話。 「squid digest認証」などで検索すると、パスワードファイルにパスワードを平文として記載する例が多くヒットする(日本語のページの話)。 それだとBasic認証とたいして変わらない気がするので、パスワードファイルをハッシュ化(暗号化)しても、Digest認証できるようにした。 結論としては、squid.confのauth_param digest programで指定する認証用のコマンドで、-cオプションを付ければよかった。 auth_param digest program /usr/lib64/squid/digest_file_auth -c path_to_password_file 前提条件 プロキシサーバーは、Virtualbox バージョン 5.2.12 r122591上のCentOS-7 (1804)にインストールした、Squid Cache: Version 3.5.20。 プロキシのクライアントは、macOS High Sierra バージョン 10.13.5。 CentOSのネットワークは設定済 。 CentOSとmacOSは、同一ネットワーク192.168.11.0/24に所属し、CentOSのIPアドレスは192.168.11.77。 以下、プロンプトが#の場合は、CentOSのrootユーザー、$の場合は、macOSの一般ユーザー。 Squidのインストール〜疎通確認まで CentOS 7にsquidをyumでインストールした。 # yum -y install squid インストール後、squidの設定ファイル(デフォルトで/etc/squid/squid.conf)を編集。 # vi /etc/squid/squid.conf 筆者の自宅のネットワークは、ネットワークアドレスが192.168.11.0/24のため、下記の部分を、 acl localnet src 10.0.0.0/8     # RFC1918 possible internal network acl localnet src 172.16....

CentOS 7にOracle Database 18cをコマンドラインでインストールした

イメージ
Follow @venividivici830 仮想マシン上のCentOS 7に、Oracle Database 18cをCUIで(GUIを使わず)インストールした時の記録。 インストール後、dbcaで、これまたコマンドラインからDBを作成し、インスタンスの開始と停止ができるところまで確認した。 OracleのインストールはGUIでもハマるけど、CUIだともっとしんどい。 環境は、macOS High Sierra バージョン 10.13.5、Virtualbox バージョン 5.2.12 r122591、CentOS-7 (1804)、Oracle Database 18c (18.3)。 CentOS 7は、 Minimal ISOからインストールした もの。 このCentOS 7に対し、コマンドライン( サイレント・モード )で、X Window System(GUI)を使わずにインストールした。 MacのCPUは3.06 GHz Intel Core 2 Duo、メモリーは4 GB 1067 MHz DDR3。 VirtualboxのゲストOS(CentOS 7)には、HDD 10 GB、メモリー 1Gを割り当てた状態からスタートし、適宜拡張した。 以下、コマンドのプロンプトが#の場合は、CentOS のrootでの作業、$の場合は、特に断りがなければCentOSのユーザーoracle、oracle以外の場合は、CentOSかMacの任意の一般ユーザー。 なお、以下の手順を参考にする場合、 頻繁にスナップショット機能でイメージバックアップを取得することをおすすめする 。 ライセンス確認 このページ に下記の記述があるように、学習などの限定用途で、無償で使用できるようだ。 OTNサイト(www.oracle.com/technetwork)からダウンロードできるソフトウエアには OTN開発者ライセンスがついており、限定された用途で無償で使用できます。 OTN開発者ライセンス付きのソフトウエアは、お客様のアプリケーションの開発、テスト、プロトタイプ作成、及びデモンストレーションのみを目的として(かつ、お客様のアプリケーションが、データ処理、業務、商用又は本番利用を目的として使用されたことがない場合に限られ...