##はじめに
はじめまして、プログラミングを学び始めて間もない初学者です。
学んだことをQIitaでアウトプットしていきます。
記事に気になる点がありましたら、ご指摘・アドバイスよろしくお願いします。
##対象者
- 初学者
- RedHat系(CenoOSなど)を触り始めて間もない方
- yumコマンドの大雑把な概要を知りたい方
##構成
- yumの概要
- yumとは?
- パッケージとは?
- RPMとyum
- 依存関係とは?
- RPMとyumの具体例
- 主要なコマンド
- yum install
- yum update
- yum erase
- インストールできるパッケージの確認方法
- yum list
- yum list installed
- yum list updates
- yum list available
- yum list extras
- yum search
- yum info
- 外部リポジトリ
- リポジトリの確認
- 外部リポジトリの取り込み
##環境
- EC2(AWS)
- CentOS Linux 7 x86_64 HVM EBS ENA 2002_01-b7ee8a69-ee97-4a49-9e68-afaee216db2e-ami-0042af67f8e4dcc20.4(AMI名)
##yumの概要
###yumとは?
yumとは、Linuxシステム(RedHat系)のパッケージ管理を容易にしてくれるツールまたはコマンドのことです。
- JavaScriptでいうとnpm
- RubyでいうとBundler
- PHPでいうとComposer
のような存在です。
大雑把にいうとパッケージのインストールやアップデート、削除などを簡単にしてくれるものです。また、依存関係の問題も解決してくれます。
依存関係???(こちらは後述します💦)
###パッケージとは?
パッケージとは、ある機能を実現するためにまとめられたファイルたち(プログラム)のことです。
例えば
- Webサーバーの機能を実現してくれるパッケージ
- ファイルのアップロード機能を実現してくれるパッケージ
- メール送信機能を実現してくれるパッケージ
誰かが準備してくれた「便利な道具」みたいなものでしょうか。
###RPMとyum
実は、Linuxシステム(RedHat系)には、パッケージをインストール、削除などのパッケージ管理してくれるRPM(Red Hat Package Manager)というものがあります。RPMもパッケージを扱うことができるパッケージ管理コマンドです。
どうして2つもパッケージ管理コマンドがあるのでしょうか。この2つの違いは何か気になりますよね。
この2つの主な違いは、「依存関係を解決」してくれるかどうかです。
先ほど、説明すると言った「依存関係」が出てきました💦
【参考資料】
【RPM入門】Linuxのパッケージ管理システム「RPM」とは? | UX MILK
###依存関係とは?
Google Chromeで「依存」と検索すると、
「依存」とは、他人や組織、モノに愛情や支持、保護、援助を求め、それがなくては生きていけない状態であり、行為や思考のコントロール障害といわれています。自分ではやめられなくなり、精神医学の立場から病気と認められているものを「依存症」といいます。
とこのような文言がありました。簡単に言うと「君がいないと生きていけないよ状態」のことです。恋愛を想像するとわかりやすいですね👍
【参考資料】
依存について
実はこのようなことがパッケージ管理の世界でもあるのです!!!
例えば、
うまうまカレーパッケージ(機能はうまいカレーライスを作る)というパッケージがあるとします。
このうまうまカレーパッケージは、お野菜トントンパッケージ(機能は野菜を切る)とじっくりグツグツパッケージ(機能は具材を煮込む)を取り込んで実現されているパッケージです。
この関係が依存関係です。
うまうまカレーパッケージはお野菜トントンパッケージとじっくりグツグツパッケージがない場合、うまいカレーを作るという機能を実現できない状態です。
言い換えるとうまうまカレーパッケージはお野菜トントンパッケージとじっくりグツグツパッケージに「あなたがいないと生きていけない状態」ということですね。(恋愛の依存関係と一緒!!)
###RPMとyumの具体例
それでは、RPMとyumの話に戻りましょう。
yumは、依存関係を解決してくれるという話でしたね。
さきほどのパッケージをコマンドで表してみましょう!!
####RPMの場合
$ rpm -ivh お野菜トントン.rpm
$ rpm -ivh じっくりぐつぐつ.rpm
$ rpm -ivh うまうまカレー.rpm
それぞれのパッケージをインストールしなければ、うまうまカレーの機能を使用できない💦
####yumの場合
$ yum install うまうまカレー(パッケージ名)
コマンド1つでうまうまカレーを作る機能を手に入れることができます。依存している2つのパッケージは自動でインストールしてくれています。(依存関係の解決)
このように依存関係を理解して、パッケージのインストールや削除を行なってくれるのがyumなのです🎉🎉🎉
※実はyumコマンドは内部でrpmコマンドを実行しています。「RPM」を元にしたより高機能なパッケージ管理システムがyumコマンドです。rpmコマンドの便利版がyumコマンドという認識が正しいと思われます。
##主要なコマンド
###yum install
・指定したパッケージをインストールする
$ yum install パッケージ名
###yum update
・指定したパッケージをアップデートする
$ yum update パッケージ名
###yum erase
・指定したパッケージをアンインストールする
$ yum erase パッケージ名
【参考資料】
yumコマンド一覧 - Qiita
##インストールできるパッケージの確認方法
インストールやアップデートの方法が分かったので、インストールできるパッケージを確認できるようにしましょう。
###yum list
・パッケージのリストを表示する
$ yum list [installed|updates|available|extras]
[ ]で囲まれたものは、オプションです。
yum list
コマンドだけだと、パッケージが多すぎて表示しきれないので、「php」の文字列が入っているパッケージだけを例として載せておきます。
$ yum list | grep php
emacs-php-mode.noarch 1.18.2-1.el7 base
graphviz-php.x86_64 2.30.1-22.el7 base
php.x86_64 5.4.16-48.el7 base
php-bcmath.x86_64 5.4.16-48.el7 base
php-cli.x86_64 5.4.16-48.el7 base
php-common.x86_64 5.4.16-48.el7 base
php-dba.x86_64 5.4.16-48.el7 base
php-devel.x86_64 5.4.16-48.el7 base
php-embedded.x86_64 5.4.16-48.el7 base
php-enchant.x86_64 5.4.16-48.el7 base
php-fpm.x86_64 5.4.16-48.el7 base
php-gd.x86_64 5.4.16-48.el7 base
php-intl.x86_64 5.4.16-48.el7 base
php-ldap.x86_64 5.4.16-48.el7 base
php-mbstring.x86_64 5.4.16-48.el7 base
php-mysql.x86_64 5.4.16-48.el7 base
php-mysqlnd.x86_64 5.4.16-48.el7 base
php-odbc.x86_64 5.4.16-48.el7 base
php-pdo.x86_64 5.4.16-48.el7 base
php-pear.noarch 1:1.9.4-22.el7 base
php-pecl-memcache.x86_64 3.0.8-4.el7 base
php-pgsql.x86_64 5.4.16-48.el7 base
php-process.x86_64 5.4.16-48.el7 base
php-pspell.x86_64 5.4.16-48.el7 base
php-recode.x86_64 5.4.16-48.el7 base
php-snmp.x86_64 5.4.16-48.el7 base
php-soap.x86_64 5.4.16-48.el7 base
php-xml.x86_64 5.4.16-48.el7 base
php-xmlrpc.x86_64 5.4.16-48.el7 base
rrdtool-php.x86_64 1.4.8-9.el7 base
uuid-php.x86_64 1.6.2-26.el7 base
###yum list installed
・インストール済のパッケージを表示
$ yum list installed
具体例
$ yum list installed
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: d36uatko69830t.cloudfront.net
* extras: d36uatko69830t.cloudfront.net
* updates: d36uatko69830t.cloudfront.net
インストール済みパッケージ
PyYAML.x86_64 3.10-11.el7 installed
acl.x86_64 2.2.51-15.el7 @base
audit.x86_64 2.8.5-4.el7 installed
audit-libs.x86_64 2.8.5-4.el7 installed
audit-libs-python.x86_64 2.8.5-4.el7 installed
authconfig.x86_64 6.2.8-30.el7 installed
basesystem.noarch 10.0-7.el7.centos installed
bash.x86_64 4.2.46-34.el7 @base
bc.x86_64 1.06.95-13.el7 @base
bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.5 @updates
binutils.x86_64 2.27-44.base.el7 @base
btrfs-progs.x86_64 4.9.1-1.el7 installed
bzip2-libs.x86_64 1.0.6-13.el7 installed
ca-certificates.noarch 2020.2.41-70.0.el7_8 @base
centos-release.x86_64 7-9.2009.1.el7.centos @updates
checkpolicy.x86_64 2.5-8.el7 installed
chkconfig.x86_64 1.7.6-1.el7 @base
...
...
...(続く)
###yum list updates
・インストール済のパッケージでアップデート可能なパッケージを表示
$ yum list updates
###yum list available
・リポジトリ内で利用可能なパッケージを表示
$ yum list available
###yum list extras
・利用できなくなってしまったパッケージを表示
$ yum list extras
###yum search
・パッケージを検索
$ yum search パッケージ名や用語
yum search コマンドを使用すると、リポジトリ上のRPMのパッケージ名、詳細、サマリから対象のパッケージを検索する事ができます。
$ yum search php
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: d36uatko69830t.cloudfront.net
* extras: d36uatko69830t.cloudfront.net
* updates: d36uatko69830t.cloudfront.net
=================================================================================== N/S matched: php ===================================================================================
emacs-php-mode.noarch : Major GNU Emacs mode for editing PHP code
graphviz-php.x86_64 : PHP extension for graphviz
php.x86_64 : PHP scripting language for creating dynamic web sites
php-bcmath.x86_64 : A module for PHP applications for using the bcmath library
php-cli.x86_64 : Command-line interface for PHP
php-common.x86_64 : Common files for PHP
php-dba.x86_64 : A database abstraction layer module for PHP applications
php-devel.x86_64 : Files needed for building PHP extensions
php-embedded.x86_64 : PHP library for embedding in applications
php-enchant.x86_64 : Enchant spelling extension for PHP applications
php-fpm.x86_64 : PHP FastCGI Process Manager
php-gd.x86_64 : A module for PHP applications for using the gd graphics library
php-intl.x86_64 : Internationalization extension for PHP applications
php-ldap.x86_64 : A module for PHP applications that use LDAP
php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php-mysql.x86_64 : A module for PHP applications that use MySQL databases
php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
php-odbc.x86_64 : A module for PHP applications that use ODBC databases
...
...
...(続く)
###yum info
・パッケージの情報を確認
$ yum info パッケージ名
$ yum info php
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: d36uatko69830t.cloudfront.net
* extras: d36uatko69830t.cloudfront.net
* updates: d36uatko69830t.cloudfront.net
利用可能なパッケージ
名前 : php
アーキテクチャー : x86_64
バージョン : 5.4.16
リリース : 48.el7
容量 : 1.4 M
リポジトリー : base/7/x86_64
要約 : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
ライセンス : PHP and Zend and BSD
説明 : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
: non-commercial database management systems, so writing a
: database-enabled webpage with PHP is fairly simple. The most common
: use of PHP coding is probably as a replacement for CGI scripts.
:
: The php package contains the module (often referred to as mod_php)
: which adds support for the PHP language to Apache HTTP Server.
【参考資料】
【yum list】パッケージ一覧を表示・確認する | UX MILK
##外部リポジトリ
yumリポジトリは、提供しているパッケージのバージョンが古かったり、欲しいパッケージがない場合があります。その時は、外部リポジトリから欲しいパッケージをインストールすることができます。
※リポジトリとは、パッケージなどの保存場所のこと
【参考資料】
外部レポジトリとは -CentOSで用語として使われるレポジトリとはどうい- UNIX・Linux | 教えて!goo
###リポジトリの確認
現在、使用しているリポジトリを確認することができます。
$ yum repolist
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: d36uatko69830t.cloudfront.net
* extras: d36uatko69830t.cloudfront.net
* updates: d36uatko69830t.cloudfront.net
リポジトリー ID リポジトリー名 状態
base/7/x86_64 CentOS-7 - Base 10,072
extras/7/x86_64 CentOS-7 - Extras 498
updates/7/x86_64 CentOS-7 - Updates 2,552
repolist: 13,122
###外部リポジトリの取り込み
下記の記事を参考にして、外部リポジトリである「Remi's RPM repository」を追加してみます。
【参考資料】
yumリポジトリ追加リスト 完全版 - Qiita
$ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
読み込んだプラグイン:fastestmirror
remi-release-7.rpm | 23 kB 00:00:00
/var/tmp/yum-root-cvPpK7/remi-release-7.rpm を調べています: remi-release-7.9-1.el7.remi.noarch
/var/tmp/yum-root-cvPpK7/remi-release-7.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ remi-release.noarch 0:7.9-1.el7.remi を インストール
--> 依存性の処理をしています: epel-release = 7 のパッケージ: remi-release-7.9-1.el7.remi.noarch
Loading mirror speeds from cached hostfile
* base: d36uatko69830t.cloudfront.net
* extras: d36uatko69830t.cloudfront.net
* updates: d36uatko69830t.cloudfront.net
--> トランザクションの確認を実行しています。
---> パッケージ epel-release.noarch 0:7-11 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
============================================================================================================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
============================================================================================================================================================================================================
インストール中:
remi-release noarch 7.9-1.el7.remi /remi-release-7 31 k
依存性関連でのインストールをします:
epel-release noarch 7-11 extras 15 k
トランザクションの要約
============================================================================================================================================================================================================
インストール 1 パッケージ (+1 個の依存関係のパッケージ)
合計容量: 45 k
総ダウンロード容量: 15 k
インストール容量: 55 k
Is this ok [y/d/N]: y
Downloading packages:
epel-release-7-11.noarch.rpm | 15 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : epel-release-7-11.noarch 1/2
インストール中 : remi-release-7.9-1.el7.remi.noarch 2/2
検証中 : epel-release-7-11.noarch 1/2
検証中 : remi-release-7.9-1.el7.remi.noarch 2/2
インストール:
remi-release.noarch 0:7.9-1.el7.remi
依存性関連をインストールしました:
epel-release.noarch 0:7-11
完了しました!
それでは、現在使用しているリポジトリを確認してみましょう。
$ yum repolist
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 9.5 kB 00:00:00
* base: d36uatko69830t.cloudfront.net
* epel: ftp.iij.ad.jp
* extras: d36uatko69830t.cloudfront.net
* remi-safe: ftp.riken.jp
* updates: d36uatko69830t.cloudfront.net
epel | 4.7 kB 00:00:00
remi-safe | 3.0 kB 00:00:00
(1/4): epel/x86_64/group_gz | 96 kB 00:00:00
(2/4): remi-safe/primary_db | 2.0 MB 00:00:00
epel/x86_64/updateinfo FAILED
https://nrt.edge.kernel.org/fedora-buffet/epel/7/x86_64/repodata/f040f54116b01148f14d8321fada71bd850e9e667f48b4d949a884a1a2300b65-updateinfo.xml.bz2: [Errno 14] HTTPS Error 404 - Not FoundB --:--:-- ETA
他のミラーを試します。
To address this issue please refer to the below wiki article
https://wiki.centos.org/yum-errors
If above article doesn't help to resolve this issue please use https://bugs.centos.org/.
(3/4): epel/x86_64/updateinfo | 1.0 MB 00:00:00
(4/4): epel/x86_64/primary_db | 6.9 MB 00:00:00
リポジトリー ID リポジトリー名 状態
base/7/x86_64 CentOS-7 - Base 10,072
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,625
extras/7/x86_64 CentOS-7 - Extras 498
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 4,470
updates/7/x86_64 CentOS-7 - Updates 2,552
repolist: 31,217
使用できるリポジトリが増えていますね。この「Remi's RPM repository」はバージョンが新しいPHPを利用したい時に利用します。よって、php7.*やphp8.*などのパッケージがインストールできるようになりました。
$ yum list | grep php
(一部抜粋)
...
...
php74.x86_64 1.0-3.el7.remi remi-safe
php74-build.x86_64 1.0-3.el7.remi remi-safe
php74-php.x86_64 7.4.22-1.el7.remi remi-safe
php74-php-ast.x86_64 1.0.14-1.el7.remi remi-safe
php74-php-bcmath.x86_64 7.4.22-1.el7.remi remi-safe
php74-php-brotli.x86_64 0.13.1-1.el7.remi remi-safe
php74-php-cli.x86_64 7.4.22-1.el7.remi remi-safe
...
...
...
php80.x86_64 1.0-3.el7.remi remi-safe
php80-build.x86_64 1.0-3.el7.remi remi-safe
php80-php.x86_64 8.0.9-1.el7.remi remi-safe
php80-php-ast.x86_64 1.0.14-1.el7.remi remi-safe
php80-php-bcmath.x86_64 8.0.9-1.el7.remi remi-safe
php80-php-brotli.x86_64 0.13.1-1.el7.remi remi-safe
php80-php-cli.x86_64 8.0.9-1.el7.remi remi-safe
php80-php-common.x86_64 8.0.9-1.el7.remi remi-safe
php80-php-componere.x86_64 3.1.2-1.el7.remi remi-safe
...
...
...(続く)
php7.*やphp8.*などのパッケージが確認できます。このように、yumリポジトリにないパッケージも外部リポジトリを使用することによってインストールできるのです。
##おわりに
最後まで読んでいただきありがとうございます。今回の記事が少しでもyumやパッケージ管理の理解につながれば嬉しく思います。
Qiitaで初めての投稿でした。記事の作成は知識を整理しないと書けないので復習にもってこいですね。今後も定期的に記事を投稿していこうと思います。
##参考資料