WSL の Ubuntu 18.04 に Utuntu 16.04 で使っていたアプリケーションをインストールし直しました

前回 WSL の Ubuntu 18.04 をインストールしたので、改めてアプリケーションをインストールし直しました。

環境

  • Windows 10 Pro 1803
  • Ubuntu 18.04 LTS
  • FFmpeg 4.0
  • Hugo 0.41
  • Node.js v8.11.2

FFmpeg

以前 FFmpeg をインストールしたときもそうだったのですが、今回も、 Download FFmpegLinux Static Builds をインストールすることにしました。

FAQ に従ってインストールしました。

Download the latest git build.

$ cd /home/john

$ wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-64bit-static.tar.xz

$ wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-64bit-static.tar.xz.md5

FAQ

ビルドされた .tar.xz ファイル と .md5 ファイルをダウンロードしました。

$ curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 19.0M  100 19.0M    0     0  1096k      0  0:00:17  0:00:17 --:--:-- 1785k
$ curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz.md5
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    69  100    69    0     0     33      0  0:00:02  0:00:02 --:--:--    33

ダウンロードできました。

With the build and the build's md5 hash downloaded you can check its integrity.

$ md5sum -c ffmpeg-git-64bit-static.tar.xz.md5
ffmpeg-git-64bit-static.tar.xz: OK

FAQ

ファイルをチェックしました。

$ md5sum -c ffmpeg-release-64bit-static.tar.xz.md5
ffmpeg-release-64bit-static.tar.xz: OK

OK でした。

Unpack the build.

$ tar xvf ffmpeg-git-64bit-static.tar.xz

FAQ

.tar.xz ファイルを展開しました。

$ tar xvf ffmpeg-release-64bit-static.tar.xz
ffmpeg-4.0-64bit-static/
ffmpeg-4.0-64bit-static/manpages/
ffmpeg-4.0-64bit-static/manpages/ffmpeg-protocols.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-scaler.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg-formats.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-resampler.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg-devices.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg-protocols.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg-all.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-utils.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-all.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg-formats.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg-devices.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-filters.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg-codecs.pdf
ffmpeg-4.0-64bit-static/manpages/ffprobe.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg-resampler.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-filters.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-bitstream-filters.txt
ffmpeg-4.0-64bit-static/manpages/ffmpeg-scaler.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-utils.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-bitstream-filters.pdf
ffmpeg-4.0-64bit-static/manpages/ffprobe.pdf
ffmpeg-4.0-64bit-static/manpages/ffmpeg-codecs.txt
ffmpeg-4.0-64bit-static/readme.txt
ffmpeg-4.0-64bit-static/ffprobe
ffmpeg-4.0-64bit-static/ffmpeg-10bit
ffmpeg-4.0-64bit-static/qt-faststart
ffmpeg-4.0-64bit-static/ffmpeg
ffmpeg-4.0-64bit-static/GPLv3.txt

展開できました。

Now I have the directory “ffmpeg-git-20180203-64bit-static”.

$ ls ffmpeg-git-20180203-64bit-static
ffmpeg  ffmpeg-10bit  ffprobe  GPLv3.txt  manpages  model  qt-faststart  readme.txt

FAQ

展開したディレクトリーの中にこれらがあるみたいです。

$ ls ffmpeg-4.0-64bit-static/
GPLv3.txt  ffmpeg  ffmpeg-10bit  ffprobe  manpages  qt-faststart  readme.txt

ffmpeg-git-20180203-64bit-static と ffmpeg-release-64bit-static.tar.xz(20180526) を比較すると model がなくなっているようです。 model ってなんだろう?

Move the static binaries ffmpeg and ffprobe into the shell's path.

$ sudo mv ffmpeg-git-20180203-64bit-static/ffmpeg ffmpeg-git-20180203-64bit-static/ffprobe /usr/local/bin/

$ whereis ffmpeg
ffmpeg: /usr/local/bin/ffmpeg

$ whereis ffprobe
ffprobe: /usr/local/bin/ffprobe

FAQ

パスの通っているディレクトリーにファイルを移動します。 FAQ を見ると ffmpeg, ffprobe の 2 つのファイルだけ移動すればいいみたいです。 ffmpeg しか使ったことないですけれども。

環境変数の $PATH を確認してみました。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Users/user/AppData/Local/Microsoft/WindowsApps:/mnt/c/Program Files/Microsoft VS Code/bin:/snap/bin

うーん、 Ubuntu 16.04 LTS は ~/bin や ~/.local/bin にもパスが通っていたようでしたが、 Ubuntu 18.04 LTS は通っていないみたいでした。

なので /usr/local/bin にファイルを移動することにします。

$ sudo mv ffmpeg-4.0-64bit-static/ffmpeg ffmpeg-4.0-64bit-static/ffprobe /usr/local/bin/
[sudo] password for user:
$ ls /usr/local/bin/
ffmpeg  ffprobe
$ whereis ffmpeg
ffmpeg: /usr/local/bin/ffmpeg
$ whereis ffprobe
ffprobe: /usr/local/bin/ffprobe

移動できたみたいです。

Now ffmpeg is globally installed and you're done!

$ ffmpeg
ffmpeg version N-89948-ge3d946b3f4-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.4.0 (Debian 6.4.0-11) 20171206
  (snipped output to save space)

FAQ

これで ffmpeg コマンドが使えます。

$ ffmpeg
ffmpeg version 4.0-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516

ffmpeg コマンドが使えました。

Uninstall.

$ sudo rm /usr/local/bin/ffmpeg /usr/local/bin/ffprobe

FAQ

アンインストールする場合は sudo rm でファイルを削除してあげればいいみたいです。

Hugo

Quick Install を参考にインストールしてみます。

Quick Install

Binary (Cross-platform)

Download the appropriate version for your platform from Hugo Releases. Once downloaded, the binary can be run from anywhere. You don’t need to install it into a global location. This works well for shared hosts and other systems where you don’t have a privileged account.

Ideally, you should install it somewhere in your PATH for easy use. /usr/local/bin is the most probable location.

Quick Install

以前と同じように Binary (Cross-platform) をインストールしようと思います。

Releases · gohugoio/hugo · GitHub から、最新のビルドされたバイナリーファイルをダウンロードすることができるみたいです。

ファイルをダウンロードしました。

$ curl -LO https://github.com/gohugoio/hugo/releases/download/v0.41/hugo_0.41_Linux-64bit.deb
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   615    0   615    0     0    362      0 --:--:--  0:00:01 --:--:--   362
100 5933k  100 5933k    0     0   442k      0  0:00:13  0:00:13 --:--:--  941k
$ curl -LO https://github.com/gohugoio/hugo/releases/download/v0.41/hugo_0.41_checksums.txt
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   613    0   613    0     0    421      0 --:--:--  0:00:01 --:--:--   421
100  1993  100  1993    0     0    832      0  0:00:02  0:00:02 --:--:--  243k

GitHub ではリダイレクトされるので -L オプションをつけてリダイレクト先のファイルをダウンロードしています。 ダウンロードできました。

ファイルをチェックしました。

$ shasum -c hugo_0.41_checksums.txt
…略…
hugo_0.41_Linux-64bit.deb: OK
…略…

OK みたいです。

-i|–install <.deb file name> … | -R|–recursive

dpkg --help

パッケージをインストールしました。

$ sudo dpkg -i hugo_0.41_Linux-64bit.deb
[sudo] password for user:
Selecting previously unselected package hugo.
(Reading database ... 28477 files and directories currently installed.)
Preparing to unpack hugo_0.41_Linux-64bit.deb ...
Unpacking hugo (0.41) ...
Setting up hugo (0.41) ...

インストールできました。

-L|–listfiles … List files ‘owned’ by package(s).

dpkg --help

次のファイルがインストールされたみたいです。

$ dpkg -L hugo
/.
/usr
/usr/local
/usr/local/bin
/usr/local/bin/hugo
/usr/share
/usr/share/doc
/usr/share/doc/hugo
/usr/share/doc/hugo/changelog.gz

bin は /usr/local/bin なのに、 doc は /usr/share/doc なのですね。 /usr/local/share/doc じゃないんだ。

ちゃんとコマンドも実行できました。

$ hugo version
Hugo Static Site Generator v0.41 linux/amd64 BuildDate: 2018-05-25T16:57:20Z

-r|–remove … | -a|–pending

dpkg --help

アンインストールする場合は次のコマンドを入力すればいいみたいです。

$ sudo dpkg -r hugo

dpkg -L hugo で表示されたファイルが消えていればいいのかな。

Node.js

以前と同じように Download | Node.js の Linux Binaries (x86/x64) の 64-bit をダウンロードしました。

$ curl -O https://nodejs.org/dist/v8.11.2/node-v8.11.2-linux-x64.tar.xz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10.8M  100 10.8M    0     0  2361k      0  0:00:04  0:00:04 --:--:-- 2361k

ダウンロードできました。

下の方に “Signed SHASUMS for release files” もあったのでダウンロードしました。

$ curl -O https://nodejs.org/dist/v8.11.2/SHASUMS256.txt.asc
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4240    0  4240    0     0   2815      0 --:--:--  0:00:01 --:--:--  2815

ダウンロードできました。

Current, LTS, and Nightly download directories all contain a SHASUMS256.txt file that lists the SHA checksums for each file available for download.

The SHASUMS256.txt can be downloaded using curl.

$ curl -O https://nodejs.org/dist/vx.y.z/SHASUMS256.txt

To check that a downloaded file matches the checksum, run it through sha256sum with a command such as:

$ grep node-vx.y.z.tar.gz SHASUMS256.txt | sha256sum -c -

Verifying Binaries

ファイルをチェックしました。

$ grep 'node-v8.11.2-linux-x64.tar.xz' SHASUMS256.txt.asc | sha256sum -c -
node-v8.11.2-linux-x64.tar.xz: OK

grep することでチェックしたいファイルだけチェックすることができるようでした。 OK みたいです。

  • FUNCTION LETTERS
    Main operation mode:
    • -x, –extract, –get
      extract files from an archive
  • OTHER OPTIONS
    Operation modifiers:
    • -f, –file ARCHIVE
      use archive file or device ARCHIVE
    • -J, –xz
    • -v, –verbose
      verbosely list files processed

man tar

ファイルを展開しました。

$ tar -xJvf node-v8.11.2-linux-x64.tar.xz
…略…
node-v8.11.2-linux-x64/include/node/zlib.h
node-v8.11.2-linux-x64/include/node/uv-unix.h
node-v8.11.2-linux-x64/include/node/zconf.h

コンソールにたくさん出力されました。

最初、オプションを man tar の順番に -xfJv のように指定したら “tar: Jv: Cannot open: No such file or directory”, “tar: Error is not recoverable: exiting now” のようなエラーになりました。 -f のオプションは引数をとるので後ろに連続してオプションをつなげてはいけないようでした。 初めて知りました。

展開されたファイルです。

$ ls -l node-v8.11.2-linux-x64
total 192
-rw-rw-r-- 1 user user 53894 May 16 04:14 CHANGELOG.md
-rw-rw-r-- 1 user user 59059 May 16 04:14 LICENSE
-rw-rw-r-- 1 user user 27429 May 16 04:14 README.md
drwxrwxr-x 1 user user  4096 May 16 04:14 bin
drwxrwxr-x 1 user user  4096 May 16 04:14 include
drwxrwxr-x 1 user user  4096 May 16 04:14 lib
drwxrwxr-x 1 user user  4096 May 16 04:14 share

bin, include, lib, share を /usr/local/ の中に移動してあげればいいみたいです。

最初に /usr/local/ の中を確認しておきました。

$ ls -l /usr/local/
total 0
drwxr-xr-x 1 root root 4096 Apr 26 14:10 bin
drwxr-xr-x 1 root root 4096 Apr 26 14:10 etc
drwxr-xr-x 1 root root 4096 Apr 26 14:10 games
drwxr-xr-x 1 root root 4096 Apr 26 14:10 include
drwxr-xr-x 1 root root 4096 Apr 26 14:10 lib
lrwxrwxrwx 1 root root    9 Apr 26 14:10 man -> share/man
drwxr-xr-x 1 root root 4096 Apr 26 14:10 sbin
drwxr-xr-x 1 root root 4096 Apr 26 14:10 share
drwxr-xr-x 1 root root 4096 Apr 26 14:10 src
$ ls -l /usr/local/bin/
total 175040
-rwxr-xr-x 1 user user 63012968 Apr 23 04:33 ffmpeg
-rwxr-xr-x 1 user user 62914664 Apr 23 04:33 ffprobe
-rwxr-xr-x 1 root root 17781952 May 26 01:57 hugo
$ ls -l /usr/local/include/
total 0
$ ls -l /usr/local/lib/
total 0
drwxrwsr-x 1 root staff 4096 Apr 26 14:10 python3.6
$ ls -l /usr/local/share/
total 0
drwxr-xr-x 1 root root 4096 Apr 26 14:10 ca-certificates
drwxr-xr-x 1 root root 4096 Apr 26 14:10 man
$ ls -l /usr/local/share/man/
total 0

コピーしました。

$ sudo cp -r node-v8.11.2-linux-x64/bin/ node-v8.11.2-linux-x64/include/ node-v8.11.2-linux-x64/lib/ node-v8.11.2-linux-x64/share/ /usr/local/
$

コピーできたみたいです。

/usr/local/ の中を確認しました。

$ ls -l /usr/local/
total 0
drwxr-xr-x 1 root root 4096 May 30 19:14 bin
drwxr-xr-x 1 root root 4096 Apr 26 14:10 etc
drwxr-xr-x 1 root root 4096 Apr 26 14:10 games
drwxr-xr-x 1 root root 4096 May 30 19:02 include
drwxr-xr-x 1 root root 4096 May 30 19:11 lib
lrwxrwxrwx 1 root root    9 Apr 26 14:10 man -> share/man
drwxr-xr-x 1 root root 4096 Apr 26 14:10 sbin
drwxr-xr-x 1 root root 4096 May 30 19:13 share
drwxr-xr-x 1 root root 4096 Apr 26 14:10 src
$ ls -l /usr/local/bin/
total 174340
-rwxr-xr-x 1 user user 63012968 Apr 23 04:33 ffmpeg
-rwxr-xr-x 1 user user 62914664 Apr 23 04:33 ffprobe
-rwxr-xr-x 1 root root 17781952 May 26 01:57 hugo
-rwxr-xr-x 1 root root 34799826 May 30 19:14 node
lrwxrwxrwx 1 root root       38 May 30 19:14 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxrwxrwx 1 root root       38 May 30 19:14 npx -> ../lib/node_modules/npm/bin/npx-cli.js
$ ls -l /usr/local/include/
total 0
drwxr-xr-x 1 root root 4096 May 30 19:02 node
$ ls -l /usr/local/lib/
total 0
drwxr-xr-x 1 root root  4096 May 30 19:11 node_modules
drwxrwsr-x 1 root staff 4096 Apr 26 14:10 python3.6
$ ls -l /usr/local/share/
total 0
drwxr-xr-x 1 root root 4096 Apr 26 14:10 ca-certificates
drwxr-xr-x 1 root root 4096 May 30 19:13 doc
drwxr-xr-x 1 root root 4096 May 30 19:13 man
drwxr-xr-x 1 root root 4096 May 30 19:13 systemtap
$ ls -l /usr/local/share/man/
total 0
drwxr-xr-x 1 root root 4096 May 30 19:13 man1

node コマンドを使ってみました。

$ node -p "'hello'.toUpperCase()"
HELLO

ちゃんと動かせました。

終わり

今回の FFmpeg や Node.js みたいに自分でファイルを配置するような場合、 mv コマンドを使うのか、 cp コマンドを使うのか、よくわからないです。

mv コマンドはもとのファイルのオーナー、グループをそのままに移動してしまうので、 /usr/local のオーナーが root であっても、その下のファイルのオーナーが user になってしまうのが気になりました。

cp コマンドはコピー先のディレクトリーのオーナー、グループを引き継ぐみたいで、ファイルのオーナーが root になっていたので個人的にはスッキリしています。