NEWS
Linux的なIBM i の使い方 Linux的なIBM i の使い方
2024.08.13

【Linux】第5回「OSS Part-2」

【Linux】第5回「OSS Part-2」

1. はじめに

前回は「OSS Part-1」と題して、RPMとyumの話、ACSを使用したOSS環境の導入、bashを使用するにあたっての必須の設定等について解説しました。今後の連載でsshにて操作する場合はこの環境設定が前提となりますので、可能な限り設定等を実施しておいください。

各章で、プロンプト「bash-5.2$」で始まるコマンドの実行とその結果を説明した箇所がありますが、前回の環境設定を終えたsshでの接続を前提にしています。解説部分を確認するには、事前にsshで接続した上で該当のコマンドを実行してください。

既にお話した通り、RPMとyumもOSSなので、使用に役立つ様々な情報はインターネットや書籍など多くのソースから取得できます。とはいえ、最低限の仕組みや使い方などのガイドはやはり必要だと思います。そこで、第5回の連載では、yumを使った新しいパッケージのインストール方法や更新方法、そして、検索するリポジトリに関する仕組みについての触りの部分をOSS Part-2として解説します。これらを理解していただくことで、IBM i におけるOSSの全体像を俯瞰できるとともに、可能なことや不可能なことなど少し踏み込んで理解していただけるはずです。

それでは始めていきましょう。

2. OSSツールの更新および新規インストール方法

yumを使用したOSS パッケージの更新および新規インストールを行ってみましょう。ここでは、libz1(圧縮ライブラリー)の更新と、vim(テキスト・エディタ)の新規インストールを行っていきます。

その前に、yumが内部でどのようなことを行っているかを解説し、その後でパッケージの更新と新規インストールを行います。

yumが内部で行っていること

yumは前回の記事で解説した通り、パッケージソフトウェアを依存関係を解決しながらダウンロードおよびインストールを行うツールです。パッケージソフトウェアは、rpmという形式のファイルでサーバー上に保管されているので、これから導入しようとしているパッケージはどのサーバーにあって、なんという名前で、前提パッケージが必要か、必要ならばそれはどこにあるかをわかっていないとインストールできません。本来はこの作業をすべて手作業で行うのですが、これを自動化してくれるのがyumです。では、yumはどのようにしてこの複雑な作業を実行しているのでしょうか。

まず、パッケージ管理を行っているRPMの仕組みをおさらいしておきましょう。RPMは、以下ディレクトリにて、インストール済みのパッケージの情報を管理しています。

 /QOpenSys/var/lib/rpm

rpmコマンドをqaオプションで実行すると、上記ディレクトリの内容を参照してインストールされているパッケージの一覧を取得できます

 bash-5.2$ rpm -qa
 ncurses-terminfo-6.0-9.ppc64
 charset-alias-1.14-6.ppc64
 file-magic-5.32-7.ppc64
 :
 rpm-4.13.1-15.ppc64
 python2-rpm-4.13.1-15.ppc64
 coreutils-pase-dummy-7.3-1.ppc

このコマンドではすべてのパッケージが一覧表示されるので、例えばpythonがインストールされているかどうかを知りたい場合は、以下のようにパイプとgrepを組み合わせてください。

 bash-5.2$ rpm -qa | grep python
 python3-3.6.15-1.ppc64
 python2-2.7.18-7.ppc64
 python2-iniparse-0.4-2.noarch
 python2-pycurl-7.43.0-4.ppc64
 python2-urlgrabber-3.10.2-3.noarch
 python2-rpm-4.13.1-15.ppc64

RPMでパッケージをインストールする場合は、以下を実施します。

  • パッケージファイル(.rpm)をダウンロードして入手する
  • rpmコマンドを使用してインストールする

では、自分がインストールしたい機能のパッケージ・ファイルはどこからダウンロードすれば良いのでしょうか。そもそも欲しい機能がパッケージとして存在しているのでしょうか。

おそらく2007年頃だったと思いますが、Linuxのことなど全く知らない状態で、社内サーバーを構築するためにfedoraサーバーをPCにインストールし、立ち上げたいサーバー機能をインストールする際に、必要なパッケージ名をネットでひとつひとつ検索しながら試行錯誤を繰り返してダウンロードしたことが思い出されます。当時はRPMの仕組みも知らず、ただネットに書かれていることをそのまま実行し、トライ・アンド・エラーを繰り返しながらサーバーを構築していました。当時の社内サーバーは、現在はdockerのコンテナに形を変えて現役で稼働中です。

閑話休題、自分が欲しい機能のパッケージ・ファイル名と、ダウンロードできるサイトのURLが判明し、該当のパッケージ・ファイル(拡張子が .rpm)を無事ローカルにダウンロードできたとします。続いて実行するのは、rpmコマンドです。

rpmコマンドは、現在インストールしようとしているパッケージの前提として必要なパッケージ等の確認も行います。例えば、Aパッケージをインストールしようとしているが、これを動かすためにはBパッケージが必要な場合、Bパッケージがシステムにインストールされているかがチェックされます。もし、Bパッケージがインストールされていなければ、Aパッケージはインストールできないので、Aパッケージのインストールは失敗します。

おそらくこの段階で、Bパッケージの名前は教えてくれるのですが、Bパッケージはどこにあるのかまでは教えてくれません。いずれにしても、Bパッケージをインストールしなくてはならないので、最初に戻ってBパッケージを入手できる場所を確認するところから始めます。そして、運良くBパッケージをインストールできれば、ようやくAパッケージをRPMでインストールできるようになる、といった具合です。

RPMでパッケージをインストールするには、当然ながらこのようなパッケージ間の依存関係に起因する課題の解消が必要なので、上記手順を繰り返し手動で行う必要がでてきます。

  • インストール可能なパッケージは何か
  • それはどこからダウンロードするか
  • 依存関係の解決が必要な場合
    – そのパッケージは何か
    – それはどこからダウンロードするか

RPMでは必須となる上記の作業を、わかりやすく自動で行う機能を提供してくれるのが yumです。

yumでは、あらかじめパッケージ・ファイルが登録されているサイト(リポジトリ)を登録しておき、そのリポジトリ情報を参照することにより、上記内容をすべて解決することができます。

yumは、以下のファイルおよびディレクトリにて情報を管理しています。

  • /QOpenSys/etc/yum/yum.conf(ファイル)
  • /QOpenSys/etc/yum/repos.d(ディレクトリ)
  • /QOpenSys/var/cache/yum(ディレクトリ)

yumはyum.confを参照し、リポジトリ情報が格納されているディレクトリ名を取得します。デフォルトではファイル内に明示的にディレクトリ名は記載されていないので、省略値の値として /QOpenSys/etc/yum/repos.d が参照されます。このディレクトリ内には1つあるいは複数のファイル(.repo)が存在しています。IBM i 関連のリポジトリ・ファイルとしては以下があります。

  • ibm.repo
  • ibmi-base.repo
  • ibmi-release.repo

iWorldの記事【OSS】第7回「新しいIBM i RPMリポジトリについて知っておくべきこと」に詳細の解説がありますが、ibm.repoは古いリポジトリのみ参照するので、ibmi-base.repoおよび ibmi-release.repoが必要になります。もし、この2つのファイルが存在していない場合は、yumでインストールしておきましょう。

 bash-5.2$ yum install ibmi-repos

では、ibmi-base.repo ファイルの中身を見てみましょう。ツールは、後述する vim もしくは DSPF コマンドを使用してください。

 [ibmi-base]
 name=IBM i base
 baseurl=https://public.dhe.ibm.com/software/ibmi/products/pase/rpms/repo-base-7.3/
 enabled=1
 gpgcheck=0
 skip_if_unavailable=1

ここでは、baseurlとenabledに注目してください。

まず、baseurlは、パッケージファイルなどが保管されているサイトのURLです。このサイトからインストール可能なパッケージ一覧の情報を取得したり、実際の .rpmファイルをダウンロードします。

enabledはこのリポジトリを yum コマンドで有効にするかどうかのスイッチです。1が指定されていると yum 実行時に対象となります。

では、ibmi-release.repo も見てみましょう。

 [ibmi-release]
 name=IBM i $releasever
 baseurl=https://public.dhe.ibm.com/software/ibmi/products/pase/rpms/repo-$releasever/
 enabled=1
 gpgcheck=0
 skip_if_unavailable=1

$releaseverという変数が使用されていますが、これは実行時に IBM i のバージョン番号に置き換わります。例えば、7.4の場合は実際のbaseurlは以下と解釈されます。

 baseurl=https://public.dhe.ibm.com/software/ibmi/products/pase/rpms/repo-7.4/

利用可能なリポジトリ一覧はyumコマンドで確認することができます。

 bash-5.2$ yum repolist
 repo id                        repo name                     status
 ibmi-base                      IBM i base                    1130
 ibmi-release                   IBM i 7.4                        2
 repolist: 1132

enabled の値が 0 の場合は、上記リストには表示されませんので注意しましょう(後述)。

libz1(圧縮ライブラリー)の更新

では、libz1をyumで更新する際の内部的な動きを簡単にみていきましょう。

まず、libz1が導入されているかどうかを確認します。

 bash-5.2$ yum list installed | grep libz1
 libz1.ppc64                           1.2.13-1                        @ibmi-base

libz1はこのシステムにインストールされており、バージョンは1.2.13-1で、リポジトリはibmi-baseであることが確認できました。このコマンド実行時、yumは内部的に rpm コマンドを実行して、libz1がインストールされているかを確認します。

次に、新しいバージョンが公開されているかを確認します。

 bash-5.2$ yum check-update | grep libz1
 libz1.ppc64                               1.3-1                        ibmi-base

ibmi-baseリポジトリに1.3-1という新しいバージョンの libz1 が確認できました。このコマンド実行時は以下が内部的に行われます。

  • /QOpenSys/var/cache/yum/ibmi-base および ibmi-base.repo内のbaseurlに指定されたサイトにアクセスして必要な情報を取得する

更新可能なバージョンがあることがわかったので実際に更新してみましょう。

 bash-5.2$ yum update libz1
 Setting up Update Process
 Resolving Dependencies
 --> Running transaction check
 ---> Package libz1.ppc64 0:1.2.13-1 will be updated
 ---> Package libz1.ppc64 0:1.3-1 will be an update
 --> Finished Dependency Resolution

 Dependencies Resolved

 ==============================================================================
 Package         Arch            Version            Repository           Size
 ==============================================================================
 Updating:
  libz1           ppc64           1.3-1              ibmi-base            71 k

 Transaction Summary
 ==============================================================================
 Upgrade       1 Package
 
 Total download size: 71 k
 Is this ok [y/N]: y
 Downloading Packages:
 libz1-1.3-1.ibmi7.3.ppc64.rpm                              |  71 kB  00:00:00
 Running Transaction Check
 Running Transaction Test
 Transaction Test Succeeded
 Running Transaction
   Updating   : libz1-1.3-1.ppc64                                          1/2
   Cleanup    : libz1-1.2.13-1.ppc64                                       2/2

 Updated:
   libz1.ppc64 0:1.3-1

 Complete!
	

「Resolving Dependencies」という文字が確認できますね。yumコマンドで依存関係をチェックし、必要な .rpmファイルの一覧を表示したうえで、インストールするかどうかを確認、yで答えることにより .rpmファイルがダウンロードされてインストールが完了しました。libz1のバージョンが1.3-1になっていることを確認しましょう。

 bash-5.2$ yum list installed | grep libz1
 libz1.ppc64                           1.3-1                           @ibmi-base

再度更新のチェックをすると何も表示されないはずです。

 bash-5.2$ yum check-update | grep libz1
 bash-5.2$

vim(テキスト・エディター)の新規インストール

では、新しいパッケージをインストールしてみましょう。今回は、テキスト・エディターのvimをインストールします。ssh で接続した状態でテキスト・ファイルの内容確認や編集をする際に使用します。必須のツールなのでここでインストールしておきましょう。

まず、vim が導入されているか確認します。

 bash-5.2$ yum list installed | grep vim
 bash-5.2$

インストールされていないことがわかったので、インストールするバージョンを確認してみましょう。

 bash-5.2$ yum list available | grep vim
 vim.ppc64                                         8.1-3                ibmi-base

リポジトリibmi-baseに、8.1-3があることがわかりました。では、インストールします。

 bash-5.2$ yum install vim
 Setting up Install Process
 Resolving Dependencies
 --> Running transaction check
 ---> Package vim.ppc64 0:8.1-3 will be installed
 --> Finished Dependency Resolution

 Dependencies Resolved

 ==============================================================================
 Package        Arch             Version           Repository            Size
 ==============================================================================
 Installing:
  vim            ppc64            8.1-3             ibmi-base            8.6 M

 Transaction Summary
 ==============================================================================
 Install       1 Package

 Total download size: 8.6 M
 Installed size: 8.6 M
 Is this ok [y/N]: y
 Downloading Packages:
 vim-8.1-3.ibmi7.2.ppc64.rpm                            | 8.6 MB  00:00:21
 Running Transaction Check
 Running Transaction Test
 Transaction Test Succeeded
 Running Transaction
   Installing : vim-8.1-3.ppc64                                           1/1

 Installed:
   vim.ppc64 0:8.1-3

 Complete!

インストールされたかを確認しましょう。

 bash-5.2$ yum list installed | grep vim
 vim.ppc64                             8.1-3                           @ibmi-base

ACS では、上記の機能を一覧表示で確認して、マウス操作で実行できます。

このウィンドウではタブが3つあります。それぞれ、

  • インストール済みパッケージ
  • 使用可能な更新
  • 使用可能なパッケージ

です。ssh 接続後、yum コマンドを使うよりもこちらのほうが全体が見えて操作もわかりやすいかもしれません。必要に応じて使いやすいインターフェースをそれぞれ選んでください。

3. IBM i リポジトリの内部

yumコマンドを使用したパッケージの更新やインストールを通して、yumが参照するリポジトリ・ファイル内にあるbaseurlに書かれたURLにアクセスして、パッケージ情報や .rpmファイルを取得している様子は、大体お分かりいただけたと思います。

では、ここでそのサイト内がどうなっているのか、更に内部を見ていきましょう。

ibmi-baseおよびibmi-releaseリポジトリ

第2章で2つのリポジトリのbaseurlを確認しました。

両リポジトリとも同じサイトのディレクトリをそれぞれ参照しているので、ブラウザーでhttps://public.dhe.ibm.com/software/ibmi/products/pase/rpmsにアクセスして内容を確認してみましょう。

名称 種類 最終更新日時 リポジトリ 備考
README.md ファイル 2019-03-01 10:49
bootstrap-7.1/ ディレクトリ 2020-11-09 12:49 なじみ
bootstrap-7.2/ ディレクトリ 2021-12-09 11:45
bootstrap.sh ファイル 2023-12-01 10:52
bootstrap.sql ファイル 2018-04-18 13:51
bootstrap.tar.Z 圧縮ファイル 2023-12-01 10:52
ibm-7.3.repo ファイル 2021-03-31 18:49
ibm.repo ファイル 2020-11-11 11:50
repo-7.1archive/ ディレクトリ 2020-11-11 11:50
repo-7.2/ ディレクトリ 2021-03-31 16:49
repo-7.3/ ディレクトリ 2024-04-03 08:52 ibmi-release バージョン 7.3 固有のRPM
repo-7.4/ ディレクトリ 2024-04-03 08:52 ibmi-release バージョン 7.4 固有のRPM
repo-7.5/ ディレクトリ 2024-04-03 08:52 ibmi-release バージョン 7.5 固有のRPM
repo-7.6/ ディレクトリ 2024-04-03 08:52 ibmi-release バージョン 7.6 固有のRPM
repo-base-7.3/ ディレクトリ 2023-10-16 15:53 ibmi-base サポートしている最も古いリリース用
repo/ ディレクトリ 2023-10-16 15:52 ibmi-repo 古いリポジトリ(更新されない)
rpm-small.png イメージ・ファイル 2018-12-19 14:47

IBMが提供するリポジトリは上記表のディレクトリですが、7.3以降で共通で利用できる rpmはrepo-base-7.3に、各バージョン固有のrpmはrepo-7.x/ディレクトリにそれぞれ保存され、yumによって参照されます。

2024年8月4日現在、repo-7.x/ディレクトリはすべて内容が同じで、かつrpmファイルは存在しないので、IBM i で利用するパッケージはrepo-base-7.3/ディレクトリにのみ存在することになります。

最新バージョンについて

上記リポジトリに保存されている各パッケージは、常に最新バージョンが保存されているわけではないので注意が必要です。例えば、2024年8月4日現在のgitの最新バージョンは2.46.0ですが、ibmi-baseリポジトリ内のパッケージは2.39.3-3です。すべてのパッケージが自動的に最新になるわけではなく、AIX環境で実行できるようにするためにポーティング作業が必要になるので、IBMがポーティング作業を実施するのを待つか、あるいはOSSなのでソースを自分で取得してAIX環境にポーティングして使用するかのどちらかになると思います。

実際は個別のポーティング作業は大変なので、新しいバージョンがリポジトリに登録されるのを待つ、という運用になるケースがほとんどではないでしょうか。

OSSはツール系、アプリケーション系、言語系とありますが、業務に組み込んで利用する場合は、それぞれのバージョンにも気をつけながら、利用するかどうかの判断を心がけるようにしましょう。

4. vimの使い方

先ほどyumを使って、vimというツールをインストールしました。ここでは簡単にvimとは何か、vimの簡単な使い方について解説していきます。

vimとは

vimは、多くのLinuxディストリビューションに標準でインストールされている vi(エディター)の拡張版です。マウスを使わず、キーボード操作のみで利用可能なため、高速に扱うことができることから、古くから技術者に愛されてるエディタです。しかし、操作方法が独特ということもあり、使いこなすまでには相当の努力が必要と言われているツールでもあります。

IBM i のIFSに保存されたテキスト・ファイルを5250画面で参照および編集するツールはEDTFです。このコマンドは IBM i ユーザー(特にプログラマーの方)が使用するSEUと同じような操作用法で利用可能です。

一方で、IBM i をLinux的に利用する際のインターフェースはsshが中心となりますが、構成ファイルの中を確認したり修正する際に、都度都度、5250画面に切り替えてEDTFコマンドを実行するのは大変です。一方、vimがあれば、簡単な修正はsshインターフェースのみで完結します。今回は、yumのリポジトリ・ファイルの修正を通して、vimの簡単な使い方を解説したいと思います。

ibmi-release.repoファイルの修正

さきほど、.repoファイルにはenabledオプションがあり、「1」か「0」を指定することで有効・無効を設定することが可能と説明しました。このオプションの変更を、vimを使って実際に行ってみましょう。

まず、vimで、/QOpenSys/etc/yum/repos.d/ibmi-release.repoを開きます。

 bash-5.2$ cd /QOpenSys/etc/yum/repos.d
 bash-5.2$ vim ./ibmi-release.repo

すると、以下のようなvimの画面が表示されます。

vimには以下の4つのモードがあり、最初はノーマル・モードで始まります。

モード 機能 ノーマルからの移行
ノーマル 表示、カーソル移動など
入力 編集する際に使用 i
コマンド 編集結果の保存や破棄、vimの終了 :
ビジュアル 範囲指定やテキスト選択 v

入力・コマンドおよびビジュアルの各モードからノーマル・モードに戻るには esc キーを押します。

最も基本的な使い方としては、

  1. ノーマル・モードで内容の確認
  2. 編集する場合は i を押して入力モードに移行
  3. 編集が終わったら esc でノーマル・モードに戻る
  4. 必要に応じて 2-3 を繰り返す
  5. 終了するには : を押してコマンド・モードに移行する
  6. 必要なコマンドを実行する

という流れで作業します。では、ibmi-reliease.repo内のenambledオプションを「0」に変更して保存してみましょう。

まず、ノーマル・モードで修正したい箇所までカーソルを移動し、「i」を押して編集モードに移行します(現在のモードは画面左下に表示)。

カーソル位置に、enabledオプション「1」があるので、削除キーで削除したあと「0」を入力します。

編集が終わったので、escを押してノーマル・モードに戻りましょう。

終了するにはコマンド・モードにて上書き保存を実行し、その後終了コマンドを実行します。

コマンド・モードで良く利用するコマンドは以下の通りです。

コマンド 機能 備考
q vimを終了する 保存していない変更がある場合は警告が表示される
w 上書き保存 編集結果を保存する際に使用
q! 強制終了 変更があっても保存せずに vim を終了する

それでは、「:」を押してコマンド・モードに移行しましょう。画面下に、「:」が表示されるので「w」と入力して、Enterキーを押すと上書き保存されます。

続けて終了するには、再度「:」を押してコマンド・モードに移行し、「q」を入力して Enterキーを押します。

では、実際に変更が有効になったかを、yumコマンドで確認してみましょう。

 bash-5.2$ yum repolist
 repo id                        repo name                     status
 ibmi-base                      IBM i base                    1130
 repolist: 1130

ibmi-release が表示されなくなったことが確認できましたね。

vimを使って、例えばプログラムのソースコードを記述する必要がある場合は、より多くのvimの機能を知る必要がありますが、簡単な修正であれば上記の操作方法を覚えていただければ対応可能です。

vimの使い方に関しては、参考になるWebサイトを最後の参考文献で紹介しています。ネットではこの他にも数多くの有益なサイトがありますので、そちらも参照して、vimを使いこなせるようになってください。

5. おわりに

今回は、IBM i でのOSSパッケージの更新とインストールを通して、yumコマンドの詳細を解説しました。RPMとyumコマンドを各章の様々な場所で使用したので、改めて代表的なコマンドをここでまとめておきます。

RPMおよびyumコマンド一覧

コマンド 意味 ACSで実行可能
rpm -qa インストールされているパッケージ一覧を表示
yum install パッケージをインストール
yum repolist リポジトリ一覧を表示 ×
yum list installed インストールされているパッケージを表示
yum check-update アップデート可能なインストール済パッケージ一覧を表示
yum update パッケージをアップデート
yum list available 利用可能なパッケージ一覧を表示
yum install パッケージをインストール

上記コマンドで、多くの情報が表示される場合は、パイプとgrepを組み合わせて表示内容を限定し、必要な情報を素早く見つけるようにしましょう。

RPMおよびyumコマンドは、ssh接続したあとシェル経由で実行するものですが、ACSを使用すれば GUI画面でマウスを使用して簡単に行うことが可能なので、そちらもぜひ試してみてください。

今回で、IBM i をLinux的に使用する基本的な事柄はほぼ解説しました。次回からは、より具体的な使い方をOSSツールの解説を交えながら紹介していく予定です。次回はファイルの転送について解説します。

それでは次回の連載でお会いしましょう!

参考文献

いいねと思ったらシェア
twitter
facebook
hatena
Linux的なIBM i の使い方 目次を見る

この連載は…

Linux的なIBM i の使い方
関連記事
【Linux】第2回「ssh の仕組みをきちんと理解する」
【Linux】第2回「ssh の仕組みをきちんと理解する」
【Linux】第6回「ファイル転送」
【Linux】第6回「ファイル転送」
【Linux】第3回「シェルと基本コマンド」
【Linux】第3回「シェルと基本コマンド」
あなたにオススメの連載
できるIBM i 温故知新編
9記事
できるIBM i 温故知新編
IBM i の”新”必須言語 〜FFRPG入門〜
14記事
IBM i の”新”必須言語 〜FFRPG入門〜
IBM i アプリの第二の柱 OSS
15記事
IBM i アプリの第二の柱 OSS
PAGE TOP