ubuntuで動画を見たくて動画再生ソフトのVLCを入れてみた。

ubuntuで動画を見ることはなかったのですが、諸事情によりDVDの再生が必要になったのでVLCという動画再生ソフトをインストールしてみました。OSのバージョンは ubuntu 18.04 LTS です。SMPlayerという動画再生ソフトもあったのですがVLCのほうがダウンロード容量が少ないので、こっちにしました。

インストールする前にネットで調べてみるとVLCで動画を見るには

・ubuntu-restricted-extras
・libdvd-pkg
・libdvdcss2

・・等が必要と書いてあったり、なかったり、、です。とりあえずubuntuにインストールされているパッケージを確認してみました。

ubuntu-restricted-extras ではないけど、ubuntu-restricted-addons というものはすでに入っていました。また libdvdread4 というのも入っています。VLCを入れたらなんとか動画再生してくれるのでは?と期待しつつ、VLCのインストールをやってみました。

ubuntuソフトウェアから「オーディオ&ビデオ」を選びます。

VLCが出てくるので、それを選択します。右下の赤枠です。

「インストール」ボタンをクリックします。

インストールが終わると起動と削除のボタンが表示されます。「起動」ボタンを押下してみたのですが起動せず。。

ubuntuソフトウェアを閉じてデスクトップのアプリケーションを確認するとVLCは入っていました。

設定の「デフォルトのアプリ」を見てみると、もともと音楽とビデオの項目が空だったのが(特に何もしていないけれど)VLCメディアプレイヤーと設定されていました。

インストールは出来ているようなのでデスクトップにあるVLCのアイコンをクリックして起動させました。こんな感じの画面です。

ところがDVDをセットして動画の再生を試みましたが再生されず。。どうやらVLCを入れただけではダメみたい。VLCで何が入ったか見てみました。

何かが足りないようなので追加でインストールをします。ここは勘でしかないですが libdvd-pkg を追加で入れてみることにしました。

実行したコマンド
$ sudo apt install libdvd-pkg

その時のインストールログです。


$ sudo apt install libdvd-pkg
[sudo] user のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  adobe-flash-properties-gtk
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism libarchive-cpio-perl
  libfile-stripnondeterminism-perl libltdl-dev libmail-sendmail-perl libsigsegv2 libsys-hostname-long-perl libtool m4 po-debconf
提案パッケージ:
  autoconf-archive gnu-standards autoconf-doc dh-make dwz libtool-doc gfortran | fortran95-compiler gcj-jdk m4-doc libmail-box-perl
以下のパッケージが新たにインストールされます:
  autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism libarchive-cpio-perl libdvd-pkg
  libfile-stripnondeterminism-perl libltdl-dev libmail-sendmail-perl libsigsegv2 libsys-hostname-long-perl libtool m4 po-debconf
アップグレード: 0 個、新規インストール: 17 個、削除: 0 個、保留: 4 個。
3,092 kB のアーカイブを取得する必要があります。
この操作後に追加で 9,068 kB のディスク容量が消費されます。
続行しますか? [Y/n] 
取得:1 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 libsigsegv2 amd64 2.12-1 [14.7 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 m4 amd64 1.4.18-1 [197 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 autoconf all 2.69-11 [322 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 autotools-dev all 20180224.1 [39.6 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 automake all 1:1.15.1-3ubuntu2 [509 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 autopoint all 0.19.8.1-6ubuntu0.3 [426 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 libtool all 2.4.6-2 [194 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 dh-autoreconf all 17 [15.8 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 libfile-stripnondeterminism-perl all 0.040-1.1~build1 [13.8 kB]
取得:10 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 dh-strip-nondeterminism all 0.040-1.1~build1 [5,208 B]
取得:11 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 po-debconf all 1.0.20 [232 kB]
取得:12 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 debhelper all 11.1.6ubuntu2 [902 kB]
取得:13 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 libarchive-cpio-perl all 0.10-1 [9,644 B]                                      
取得:14 http://jp.archive.ubuntu.com/ubuntu bionic/multiverse amd64 libdvd-pkg all 1.4.2-1-1 [14.9 kB]                                       
取得:15 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 libltdl-dev amd64 2.4.6-2 [162 kB]                                             
取得:16 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 libsys-hostname-long-perl all 1.5-1 [11.7 kB]                                  
取得:17 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 libmail-sendmail-perl all 0.80-1 [22.6 kB]                                     
3,092 kB を 6秒 で取得しました (500 kB/s)                                                                                                    
パッケージを事前設定しています ...
以前に未選択のパッケージ libsigsegv2:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 170684 個のファイルとディレクトリがインストールされています。)
.../00-libsigsegv2_2.12-1_amd64.deb を展開する準備をしています ...
libsigsegv2:amd64 (2.12-1) を展開しています...
以前に未選択のパッケージ m4 を選択しています。
.../01-m4_1.4.18-1_amd64.deb を展開する準備をしています ...
m4 (1.4.18-1) を展開しています...
以前に未選択のパッケージ autoconf を選択しています。
.../02-autoconf_2.69-11_all.deb を展開する準備をしています ...
autoconf (2.69-11) を展開しています...
以前に未選択のパッケージ autotools-dev を選択しています。
.../03-autotools-dev_20180224.1_all.deb を展開する準備をしています ...
autotools-dev (20180224.1) を展開しています...
以前に未選択のパッケージ automake を選択しています。
.../04-automake_1%3a1.15.1-3ubuntu2_all.deb を展開する準備をしています ...
automake (1:1.15.1-3ubuntu2) を展開しています...
以前に未選択のパッケージ autopoint を選択しています。
.../05-autopoint_0.19.8.1-6ubuntu0.3_all.deb を展開する準備をしています ...
autopoint (0.19.8.1-6ubuntu0.3) を展開しています...
以前に未選択のパッケージ libtool を選択しています。
.../06-libtool_2.4.6-2_all.deb を展開する準備をしています ...
libtool (2.4.6-2) を展開しています...
以前に未選択のパッケージ dh-autoreconf を選択しています。
.../07-dh-autoreconf_17_all.deb を展開する準備をしています ...
dh-autoreconf (17) を展開しています...
以前に未選択のパッケージ libfile-stripnondeterminism-perl を選択しています。
.../08-libfile-stripnondeterminism-perl_0.040-1.1~build1_all.deb を展開する準備をしています ...
libfile-stripnondeterminism-perl (0.040-1.1~build1) を展開しています...
以前に未選択のパッケージ dh-strip-nondeterminism を選択しています。
.../09-dh-strip-nondeterminism_0.040-1.1~build1_all.deb を展開する準備をしています ...
dh-strip-nondeterminism (0.040-1.1~build1) を展開しています...
以前に未選択のパッケージ po-debconf を選択しています。
.../10-po-debconf_1.0.20_all.deb を展開する準備をしています ...
po-debconf (1.0.20) を展開しています...
以前に未選択のパッケージ debhelper を選択しています。
.../11-debhelper_11.1.6ubuntu2_all.deb を展開する準備をしています ...
debhelper (11.1.6ubuntu2) を展開しています...
以前に未選択のパッケージ libarchive-cpio-perl を選択しています。
.../12-libarchive-cpio-perl_0.10-1_all.deb を展開する準備をしています ...
libarchive-cpio-perl (0.10-1) を展開しています...
以前に未選択のパッケージ libdvd-pkg を選択しています。
.../13-libdvd-pkg_1.4.2-1-1_all.deb を展開する準備をしています ...
libdvd-pkg (1.4.2-1-1) を展開しています...
以前に未選択のパッケージ libltdl-dev:amd64 を選択しています。
.../14-libltdl-dev_2.4.6-2_amd64.deb を展開する準備をしています ...
libltdl-dev:amd64 (2.4.6-2) を展開しています...
以前に未選択のパッケージ libsys-hostname-long-perl を選択しています。
.../15-libsys-hostname-long-perl_1.5-1_all.deb を展開する準備をしています ...
libsys-hostname-long-perl (1.5-1) を展開しています...
以前に未選択のパッケージ libmail-sendmail-perl を選択しています。
.../16-libmail-sendmail-perl_0.80-1_all.deb を展開する準備をしています ...
libmail-sendmail-perl (0.80-1) を展開しています...
libltdl-dev:amd64 (2.4.6-2) を設定しています ...
po-debconf (1.0.20) を設定しています ...
libsigsegv2:amd64 (2.12-1) を設定しています ...
libarchive-cpio-perl (0.10-1) を設定しています ...
m4 (1.4.18-1) を設定しています ...
libsys-hostname-long-perl (1.5-1) を設定しています ...
libmail-sendmail-perl (0.80-1) を設定しています ...
autotools-dev (20180224.1) を設定しています ...
autopoint (0.19.8.1-6ubuntu0.3) を設定しています ...
libfile-stripnondeterminism-perl (0.040-1.1~build1) を設定しています ...
libtool (2.4.6-2) を設定しています ...
autoconf (2.69-11) を設定しています ...
automake (1:1.15.1-3ubuntu2) を設定しています ...
update-alternatives: /usr/bin/automake (automake) を提供するために自動モードで /usr/bin/automake-1.15 を使います
dh-autoreconf (17) を設定しています ...
debhelper (11.1.6ubuntu2) を設定しています ...
dh-strip-nondeterminism (0.040-1.1~build1) を設定しています ...
libdvd-pkg (1.4.2-1-1) を設定しています ...
libdvd-pkg: dpkg database is locked. You may need to use command "sudo dpkg-reconfigure libdvd-pkg".
libdvd-pkg: Building and installation of package(s) [libdvdcss2 libdvdcss-dev] postponed till after next APT operation.
install-info (6.5.0.dfsg.1-2) のトリガを処理しています ...
libc-bin (2.27-3ubuntu1.4) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...

途中で以下のような画面が表示されたのでリターンキーを2回押下しています。

最初に表示された画面。いきなり出てきた。

次に表示された画面。

表示された画面の中で「dpkg-reconfigure libdvd-pkg」を催促しているように思われるので、これもやってみました。

実行したコマンド
$ sudo dpkg-reconfigure libdvd-pkg

その時のログです。


$ sudo dpkg-reconfigure libdvd-pkg
libdvd-pkg: Downloading orig source...
I: libdvdcss_1.4.2
/usr/bin/wget --tries=3 --timeout=40 --read-timeout=40 --continue -O libdvdcss_1.4.2.orig.tar.bz2 \
          http://download.videolan.org/pub/libdvdcss/1.4.2/libdvdcss-1.4.2.tar.bz2 \
        || /usr/bin/uscan --noconf --verbose --rename --destdir=/usr/src/libdvd-pkg --check-dirname-level=0 --force-download --download-current-version /usr/share/libdvd-pkg/debian
--2021-04-03 21:15:57--  http://download.videolan.org/pub/libdvdcss/1.4.2/libdvdcss-1.4.2.tar.bz2
download.videolan.org (download.videolan.org) をDNSに問いあわせています... 213.36.253.2
download.videolan.org (download.videolan.org)|213.36.253.2|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 366824 (358K) [application/octet-stream]
`libdvdcss_1.4.2.orig.tar.bz2' に保存中

libdvdcss_1.4.2.orig.tar.bz2        100%[=================================================================>] 358.23K   130KB/s    時間 2.8s  

2021-04-03 21:16:01 (130 KB/s) - `libdvdcss_1.4.2.orig.tar.bz2' へ保存完了 [366824/366824]

libdvd-pkg: Checking orig.tar integrity...
/usr/src/libdvd-pkg/libdvdcss_1.4.2.orig.tar.bz2: OK
libdvd-pkg: Unpacking and configuring...
libdvd-pkg: Building the package... (it may take a while)
libdvd-pkg: Build log will be saved to /usr/src/libdvd-pkg/libdvdcss2_1.4.2-1~local_amd64.build
Current: = cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read+ep
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_wake_alarm,cap_block_suspend,cap_audit_read
Securebits: 024/0x14/5'b10100
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: yes (unlocked)
 secure-keep-caps: yes (unlocked)
uid=0(root)
gid=0(root)
groups=0(root)
libdvd-pkg: Installing...
以前に未選択のパッケージ libdvdcss-dev:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 171677 個のファイルとディレクトリがインストールされています。)
.../libdvdcss-dev_1.4.2-1~local_amd64.deb を展開する準備をしています ...
libdvdcss-dev:amd64 (1.4.2-1~local) を展開しています...
以前に未選択のパッケージ libdvdcss2:amd64 を選択しています。
.../libdvdcss2_1.4.2-1~local_amd64.deb を展開する準備をしています ...
libdvdcss2:amd64 (1.4.2-1~local) を展開しています...
libdvdcss2:amd64 (1.4.2-1~local) を設定しています ...
libdvdcss-dev:amd64 (1.4.2-1~local) を設定しています ...
libc-bin (2.27-3ubuntu1.4) のトリガを処理しています ...

このdpkg-reconfigureの途中でも以下の画面が表示されたので、リターンキーを押しています。download.videolan.org に接続してダウンロードをするみたいです。

dvdに関するパッケージが何か入ったようなので確認してみました。

libdvd-pkg、libdvdcss-dev、libdvdcss2が追加されたようです。

この状態でDVDを再生したみたところ、、、無事、再生できました!

ubuntu-restricted-extras は入れていませんが今のところ、大丈夫みたいです。また手元に動画ファイルがいくつかあったのでその再生をしてみたところ、wmvファイル、mp4ファイル、mpgファイル、m2tsファイルの再生はできました。他の動画ファイルも再生出来るのかもしれませんが、手元にないので未確認です。

CentOSにインストールしたnginxでCGIを動かしてみる。

CentOSにインストールしたnginxでCGIを動かしてみます。CGIはperlでサンプルプログラムを作ります。nginxでCGIを動かすにはfcgiwrapというパッケージが必要で、そのインストール作業からです。作業はrootユーザーで行います。

【環境】
・CentOS 7.9
・nginx 1.19.6
・perl 5.16.3

まず、インストールされるfcgiwrapを確認してみます。

# yum info fcgiwrap

バージョン1.1.0のものがあるようです。fcgiwrapをインストールします(インストールログの記載は省略します)。

# yum install fcgiwrap

インストールが終わった後の設定ですが /usr/share/doc/ 配下にfcgiwrapのSETUPの説明があるので、これを見てやってみます。

SETUPにはこのように書かれています。


Perform these steps after package installation:

1. Inspect the environment file /etc/sysconfig/fcgiwrap. Set fcgiwrap daemon
   parameters acording to your needs. See man fcgiwrap for details.

2. The systemd unit files provided with this package are instantiated and must
   be started by specifiying the desired web server user account. For example,
   when using nginx, the fgciwrap service is enabled then started like so:
      
      systemctl enable fcgiwrap@nginx.socket
      systemctl start fcgiwrap@nginx.socket

   Note the socket name is used here rather than the service name. There is no
   need to enable the service itself. Indeed one cannot enable the service on
   older versions of systemd. This is by design.

   See the systemd socket documentation for further details:
   https://www.freedesktop.org/software/systemd/man/systemd.socket.html

「1.」はパラメータの設定の記載です。パラメータの設定は /etc/sysconfig/fcgiwrap ファイルで行うようですがCGIを動かすだけならデフォルトのままでも大丈夫なのでそのままにします。

「2.」はfcgiwrapの起動に関する記載のようです。nginxはCGIのデータをファイルに書き込み、fcgiwrapはそのファイルを読み込むことでCGIのデータを取得します。この連携はソケットファイルで行います。nginxと連携するソケットファイルの作成はsystemctlコマンドで行い「fcgiwrap@」の後ろに起動ユーザー名を指定するようです。

とりあえず、やってみます。今回はnginxもfcgiwrapもnginxユーザーで動かします。ソケットファイルを作ります。

# systemctl start fcgiwrap@nginx.socket

SETUPでは「systemctl enable 〜」の記載もありますがCGIを動かしてみるだけなのでこれは省略します。ソケットファイルが実際に出来たか確認します。通常は /var/run 配下に出来ると思うのでそこを確認します。

/var/run 配下にfcgiwrapのディレクトリがあり、その下にnginxが所有者のソケットファイルが出来ていました。ソケットファイルが出来ているので、どうやらこれだけでfcgiwrapの準備は終わりのようです。あとはnginx側の設定です。

nginxではfcgiwrapに処理を引き渡す設定をdefault.confのserverディレクティブに記載します。default.confは /etc/nginx/conf.d 配下にあります。以下の記載をそのまま貼り付けてください。locationディレクティブに「〜.cgi」ファイルへのアクセスがあったときの処理を記載しています。太字部分がfcgiwrapのソケットファイルの指定になります。


location ~* \.cgi$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.cgi)(/.+)$;
    include fastcgi_params;
    fastcgi_index index.cgi;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap-nginx.sock;
}

実際のdefault.confはこのような感じです。

修正が出来たらnginxのコンフィグテストを行います。

# nginx -t

nginx.conf syntax is ok、nginx.conf test is successful、と表示されれば大丈夫です。nginx側の設定は以上です。

CGIが動くか確認するためにperlでサンプルプログラムを作ります。サンプルプログラムは以下のものです。1行目で指定しているperlの場所は環境に合わせてください。


#!/usr/bin/perl 
print "Content-Type: text/html\n\n";
print "<!DOCTYPE html>";
print "<html>";
print "<head><title>Test</title></head>";
print "<body>";
print "<h1>This is test page</h1>";
print "</body>";
print "</html>";

これをtest.cgiという名前でnginxのドキュメントルートに配置します。ドキュメントルートはdefault.confのrootディレクティブで指定しています。test.cgiには実行権限をつけてください。

ブラウザから http://nginxのIPアドレス/test.cgi でアクセスして、このような画面が表示されれば成功です。

fcgiwrapを止めるには以下のコマンドを使います。

# systemctl stop fcgiwrap@nginx.socket

これにより /var/run/fcgiwrap 配下のソケットファイルは削除されます。

ソケットファイルをnginx以外のユーザーで作成するには「fcgiwrap@」の後ろのユーザーを変えます。apacheユーザーの場合は、

# systemctl start fcgiwrap@apache.socket

となります。ソケットファイルの所有者を変える際はnginxの起動ユーザーも変更してください。nginxがソケットファイルにアクセスできないと「Permission denied」のエラーとなってしまいますので。

= = = = = = = = = =
後日談。。(追記しました)

数日後にfcgiwrapを起動してみたらエラーになりました。


# systemctl start fcgiwrap@nginx.socket
Job for fcgiwrap@nginx.socket failed. See "systemctl status fcgiwrap@nginx.socket" and "journalctl -xe" for details.

systemctl status で見てみると「Socket service fcgiwrap@nginx.service already active, refusing.」とのこと。すでに有効になっていると言っているのですがソケットファイルはありません。systemctl stop 〜 をしてソケットファイルは削除されているのですが。。

仕方がないのでOS再起動をしてからfcgiwrapを起動したらソケットファイルが出来ました。推測になりますが systemctl stop 〜 をしてソケットファイルを消してもどこかに情報が残っているようです。SETUPの説明に systemctl enable 〜 と systemctl start 〜 の2つしか書かれていないのは停止の意味がない?からなのかもしれません。ですので、fcgiwrapはずっと起動したまま(ソケットファイルは作成したらそのまま)にしておきます。また、systemctl enable 〜 も実行しておきました。