MediaWikiでインターウィキの編集を出来るようにする

MediaWiki では、デフォルトでインターウィキ機能が使えるようになっているけど、接頭辞の追加とか編集とかはデータベースを直接操作する必要があるらしい。
そこでエクステンション(拡張機能)を有効にして、特別ページでインターウィキの編集を出来るようにする。

具体的には LocalSettings.php ファイルの末尾に次のように追記する。

require_once('extensions/Interwiki/Interwiki.php');
$wgGroupPermissions['*']['interwiki'] = false;
$wgGroupPermissions['sysop']['interwiki'] = true;

こうすることで、管理者でログインすると、特別ページに「インターウィキデータの閲覧と編集」というページができて、インターウィキの追加・編集・削除ができるようになる。

Nginxを使って仮想サーバーをたてる

先日作った Sinatra アプリに、sombrero という仮想サーバー名でアクセスできるようにする。
Nginx の仮想サーバーの設定は、/etc/nginx/conf.d 以下に「仮想サーバー名.conf」という設定ファイルを作ることで行う。
というわけで、今回は /etc/nginx/conf.d/sombrero.conf ファイルを作る。

[takatoh@aybesea ~]$ cd /etc/nginx/conf.d
[takatoh@aybesea conf.d]$ sudo vim sombrero.conf

ファイルの内容は次の通り:

upstream unicorn-sombrero {
    server 127.0.0.1:9000;
}

server {
    # port
    listen 80;

    # server name
    server_name sombrero;

    client_max_body_size 8M;

    # log files
    access_log /var/log/nginx/sombrero/access.log combined;
    error_log /var/log/nginx/sombrero/error.log warn;

    keepalive_timeout 60;
    proxy_connect_timeout 60;
    proxy_read_timeout 60;
    proxy_send_timeout 60;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://unicorn-sombrero;
    }
}

80 番ポートで待ち受けて、アプリの動いている 9000 番ポートへ転送している。

ログファイルのためのディレクトリを作る。

[takatoh@aybesea conf.d]$ sudo mkdir /var/log/nginx/sombrero

これで OK のはず。Nginx をリスタート。

[takatoh@aybesea conf.d]$ sudo systemctl restart nginx

別のマシンから http://sombrero/ にアクセスしてみると、ちゃんと動作していることが確認出来た。

CentOS 7にNginxをインストールする

Nginx は CentOS 7 の標準リポジトリでは提供されていないので、まずは EPEL リポジトリを登録する。

[takatoh@aybesea ~]$ sudo yum install epel-release.noarch

Nginx をインストール。

[takatoh@aybesea ~]$ sudo yum install nginx

firewalld の設定とリスタート。

[takatoh@aybesea ~]$ sudo firewall-cmd --add-service=http --zone=public --permanent
[takatoh@aybesea ~]$ sudo systemctl restart firewalld

Nginx の起動と自動起動の設定。

[takatoh@aybesea ~]$ sudo systemctl enable nginx
[takatoh@aybesea ~]$ sudo systemctl start nginx

これでとりあえずは OK。他のマシンからもアクセスできることを確認した。

SinatraアプリをCentOSで動かす(2)

前のエントリで、単純に動かすことには成功したので、今度はデーモンとして動かすことにチャレンジする。一部内容が重複するけど御勘弁。

まずは専用のユーザーを作る。

[takatoh@aybesea ~]$ sudo useradd sombrero
[sudo] takatoh のパスワード:
[takatoh@aybesea ~]$ sudo passwd sombrero
ユーザー sombrero のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードには一部に何らかの形でユーザー名が含まれています。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[takatoh@aybesea ~]$ sudo usermod -G wheel sombrero
[takatoh@aybesea ~]$ sudo usermod -aG staff sombrero

よくないパスワードと言われてるけど無視。
ここで新しいユーザーでログインし直す。

アプリの clone から セットアップまで。

[sombrero@aybesea ~]$ git clone https://github.com/takatoh/sombrero.git
[sombrero@aybesea ~]$ cd sombrero

と思ったら bundler のインストールでつまづいた。

[sombrero@aybesea sombrero]$ gem install bundler
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/local/rbenv/versions/2.4.3/lib/ruby/gems/2.4.0 directory.

指摘されているディレクトリのパーミッションを見てみると、bill のものになっている。

[sombrero@aybesea sombrero]$ ls -l /usr/local/rbenv/versions/2.4.3/lib/ruby/gems
合計 0
drwxr-xr-x. 8 bill bill 100  1月  2 10:11 2.4.0

これは bill で rbenv global したせいだろうけど、このパーミッション設定は良くないよな。
変えてしまえ。

[sombrero@aybesea sombrero]$ sudo chgrp -R staff /usr/local/rbenv/versions/2.4.3
[sombrero@aybesea sombrero]$ sudo chmod -R 775 /usr/local/rbenv/versions/2.4.3

これでどうか。

[sombrero@aybesea sombrero]$ gem install bundler
Fetching: bundler-1.16.1.gem (100%)
Successfully installed bundler-1.16.1
Parsing documentation for bundler-1.16.1
Installing ri documentation for bundler-1.16.1
Done installing documentation for bundler after 5 seconds
1 gem installed

OK。つづき。

[sombrero@aybesea sombrero]$ bundle install
[sombrero@aybesea sombrero]$ cp config.yaml.example config.yaml
[sombrero@aybesea sombrero]$ rake setup

ここでいったん起動してみる。

[sombrero@aybesea sombrero]$ bundle exec rackup config.ru

OK。

unicorn のインストール。

[sombrero@aybesea sombrero]$ bundle exec gem install unicorn

unicorn の設定ファイル unicorn.conf を書く。

listen "9000"
worker_processes 2
pid "./unicorn.pid"
stderr_path "./unicorn.log"
stdout_path "./unicorn.log"

もう一度、今度は unicorn で起動。

[sombrero@aybesea sombrero]$ bundle exec unicorn -c unicorn.conf
bundler: failed to load command: unicorn (/usr/local/rbenv/versions/2.4.3/bin/unicorn)
Gem::Exception: can't find executable unicorn for gem unicorn. unicorn is not currently included in the bundle, perhaps you meant to add it to your Gemfile?
  /usr/local/rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/bundler-1.16.1/lib/bundler/rubygems_integration.rb:458:in `block in replace_bin_path'
  /usr/local/rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/bundler-1.16.1/lib/bundler/rubygems_integration.rb:478:in `block in replace_bin_path'
  /usr/local/rbenv/versions/2.4.3/bin/unicorn:23:in `'

あれ?Gemfile に書き足さなきゃいけないのか。じゃ、そうしてからもう一度。

[sombrero@aybesea sombrero]$ bundle update
[sombrero@aybesea sombrero]$ bundle exec unicorn -c unicorn.conf

今度はOK。

UNIT ファイルを書く。

[sombrero@aybesea sombrero]$ sudo vim /etc/systemd/system/sombrero.service
[Unit]
Description=Sombrero service

[Service]
Type=forking
PIDFile=/home/sombrero/sombrero/unicorn.pid
ExecStart=/usr/local/rbenv/shims/bundle exec unicorn -c unicorn.conf -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -QUIT $MAINPID
WorkingDirectory=/home/sombrero/sombrero
User=sombrero
Group=sombrero

[Install]
WantedBy=multi-user.target

これでいってみよう。

[sombrero@aybesea sombrero]$ sudo systemctl start sombrero

ブラウザで確認……OK!!!!!
start したり stop したりしてもちゃんと動いていることが確認出来た。

最後は、自動起動するようにして、外部からもアクセスできるようにポートを開ければ完了。

[sombrero@aybesea sombrero]$ sudo systemctl enable sombrero
Created symlink from /etc/systemd/system/multi-user.target.wants/sombrero.service to /etc/systemd/system/sombrero.service.
[sombrero@aybesea sombrero]$ sudo firewall-cmd --add-port=9000/tcp --zone=public --permanent
success

これでマシンを再起動してみよう。

他のマシンから確認。ちゃんと動作していることが確認出来た。これで完了。

SinatraアプリをCentOSで動かす

ImageMagick を使うのでインストール。

[takatoh@aybesea ~]$ sudo yum install ImageMagick

GitHub から clone。

[takatoh@aybesea ~]$ cd w
[takatoh@aybesea w]$ git clone [email protected]:takatoh/sombrero.git

依存するライブラリをインストール。bundler はインストール済み。

[takatoh@aybesea w]$ cd sombrero
[takatoh@aybesea sombrero]$ bundle install

設定ファイルを作る。実験なのでデフォルトのまま。

[takatoh@aybesea sombrero]$ cp config.yaml.example config.yaml

アプリのセットアップ。データベースや必要なディレクトリなど。

[takatoh@aybesea sombrero]$ rake setup

これで一応の準備は済んだはず。rackup してみる。

[takatoh@aybesea sombrero]$ bundle exec rackup config.ru

これで localhost:9292 で待ち受ける。ブラウザで確認したら OK だった。

外部からアクセスするにはポートを開けてやる必要がある。

[takatoh@aybesea sombrero]$ sudo firewall-cmd --add-port=9292/tcp --zone=public --permanent
[sudo] takatoh のパスワード:
success

さらにアプリを起動するときにも -o 0.0.0.0 オプションが必要。これは Sinatra の仕様。

[takatoh@aybesea sombrero]$ bundle exec rackup -o 0.0.0.0 config.ru

これでアクセスできるはず……できないな。
firewalld をリスタートさせてみる。

[takatoh@aybesea sombrero]$ sudo systemctl restart firewalld
[sudo] takatoh のパスワード:
[takatoh@aybesea sombrero]$ sudo firewall-cmd --list-ports
9292/tcp

今度は大丈夫。外部からもアクセスできて、期待どおりに動作していることが確認出来た。

WindowsからSambaの共有フォルダにコピーするときエラーが発生するようになってしまった

Samba で共有フォルダを作っている Ubuntu マシン(wplj)の外付け HDD を ext4 にフォーマットしたところ、Windows からファイルをコピーするときに、頻繁にエラーが発生するようになってしまった。
そもそも wplj の共有フォルダは Windows マシンのデータバックアップに使っていたもので、もとは NTFS のまま使っていた。そこに robocopy コマンドでバックアップをとっていた。例えば次のように。

robocopy /mir F:\softwares P:\

F: は Windows マシンの外付け HDD、P: は wplj の共有フォルダをネットワークドライブとして割り当てたものだ。wplj の外付け HDD が NTFS のときはこれで何の問題もなくバックアップできていたんだけど、ext4 にしたら「予期しないネットワークエラー」が頻繁に発生するようになってしまった、というわけ。robocopy コマンドだけでなく、エクスプローラーを使ってコピーしてみても状況は同じだった。まったくコピーができないわけじゃないので、ますますわからない。Web を見ながらいくつか解決方法を試してみたけれど、状況は変わらず。それで困っている。

ところで、よくわからないんだけど、CentOS マシン(aybesea)にたてた Samba の共有フォルダでは、上記のようなエラーは起こらない。なぜだろう?

UbuntuマシンのUSB外付けHDDをext4にフォーマットする

先日、CentOS マシン(aybesea)の外付け HDD を ext4 にしてうまくいったので、今度は Ubuntu マシン(wplj)のを ext4 にしてみる。
wplj には外付け HDD が2台あって片方はストレージ用、もう片方をバックアップ用にしている。どちらも NTFS だ。これを順次、ext4 にフォーマットし直そうというわけだ。

まずは現状の確認。

takatoh@wplj $ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           385M   37M  349M  10% /run
/dev/sda2       454G   16G  416G   4% /
tmpfs           1.9G  9.7M  1.9G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sdc2       2.8T  1.2T  1.6T  42% /media/aysheaia
/dev/sdb2       2.8T  1.2T  1.6T  42% /media/opabinia
/dev/sda1       511M  3.4M  508M   1% /boot/efi
tmpfs           385M  108K  385M   1% /run/user/1000
tmpfs           385M   12K  385M   1% /run/user/1001
tmpfs           385M   12K  385M   1% /run/user/1003
tmpfs           385M   12K  385M   1% /run/user/1002

/media/aysheaia にマウントされている /dev/sdc2 がストレージ用、/media/opabinia にマウントされている /dev/sdb2 がバックアップ用。幸いバックアップをとっているので、片方ずつならデータを消してしまっても構わない。

それじゃ、いってみよう。まずは /media/aysheaia をアンマウント。

takatoh@wplj $ sudo umount /media/aysheaia
[sudo] takatoh のパスワード: 
umount: /media/aysheaia: target is busy
        (In some cases useful info about processes that
         use the device is found by lsof(8) or fuser(1).)

あれ、samba で使ってるからダメなのか?samba を止めてみるか。

takatoh@wplj $ sudo /etc/init.d/samba stop
[ ok ] Stopping samba-ad-dc (via systemctl): samba-ad-dc.service.
[ ok ] Stopping smbd (via systemctl): smbd.service.
[ ok ] Stopping nmbd (via systemctl): nmbd.service.
takatoh@wplj $ sudo umount /media/aysheaia
takatoh@wplj $ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           385M   36M  349M  10% /run
/dev/sda2       454G   16G  416G   4% /
tmpfs           1.9G   15M  1.9G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sdb2       2.8T  1.2T  1.6T  42% /media/opabinia
/dev/sda1       511M  3.4M  508M   1% /boot/efi
tmpfs           385M  104K  385M   1% /run/user/1000
tmpfs           385M   12K  385M   1% /run/user/1001
tmpfs           385M   12K  385M   1% /run/user/1003
tmpfs           385M   12K  385M   1% /run/user/1002

今度はうまくいった。

つぎ、fdisk でパーティションを切り直す。

takatoh@wplj $ sudo fdisk /dev/sdc

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): p
Disk /dev/sdc: 2.7 TiB, 3000592977920 bytes, 5860533160 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: BCDABA26-A73C-4D65-9C8D-18C86DF92F90

デバイス    Start 最後から  セクタ  Size タイプ
/dev/sdc1      34     262177     262144  128M Microsoft reserved
/dev/sdc2  264192 5860532223 5860268032  2.7T Microsoft basic data

Partition 1 does not start on physical sector boundary.

コマンド (m でヘルプ): d
パーティション番号 (1,2, default 2): 1

Partition 1 has been deleted.

コマンド (m でヘルプ): d
Selected partition 2
Partition 2 has been deleted.

コマンド (m でヘルプ): p
Disk /dev/sdc: 2.7 TiB, 3000592977920 bytes, 5860533160 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: BCDABA26-A73C-4D65-9C8D-18C86DF92F90

コマンド (m でヘルプ): n
パーティション番号 (1-128, default 1): 
First sector (34-5860533126, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-5860533126, default 5860533126): 

Created a new partition 1 of type 'Linux filesystem' and of size 2.7 TiB.

コマンド (m でヘルプ): p
Disk /dev/sdc: 2.7 TiB, 3000592977920 bytes, 5860533160 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: BCDABA26-A73C-4D65-9C8D-18C86DF92F90

デバイス   Start 最後から  セクタ  Size タイプ
/dev/sdc1   2048 5860533126 5860531079  2.7T Linux filesystem

コマンド (m でヘルプ): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

そして mkfs で ext4 にフォーマット。

takatoh@wplj $ sudo blkid
/dev/sda1: UUID="D17D-DA22" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="6fa2ce8f-fa84-4c97-8280-e58107f1f5f7"
/dev/sda2: UUID="55c35560-7f0d-42ea-895c-5522c3b0a757" TYPE="ext4" PARTUUID="2e419080-c527-4316-b546-f404b2974dc6"
/dev/sda3: UUID="fe038a20-aa4e-48d9-b98c-f8932b715370" TYPE="swap" PARTUUID="8383fce1-4445-419d-a75d-1e002ac985ef"
/dev/sdb2: LABEL="OPABINIA" UUID="962EDE6A2EDE42C3" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="70fb4b85-f7aa-4b55-b359-8a954bc7a0fc"
/dev/sdb1: PARTLABEL="Microsoft reserved partition" PARTUUID="f94bfbc2-2dd6-4f5a-bcd0-41fa20509112"
/dev/sdc1: PARTUUID="33288db2-8046-449d-ae4f-03f23c3864b3"
takatoh@wplj $ sudo mkfs -t ext4 /dev/sdc1
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 732566384 4k blocks and 183148544 inodes
Filesystem UUID: 4bd2ad4c-1acf-4468-847b-1dd0a0c474a2
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000, 214990848, 512000000, 550731776, 644972544

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

3TB の HDD でもあっという間に終わるんだな。これほんとにフォーマットしてるのか?
まあいい。マウントしてみて、書き込みのテスト。

takatoh@wplj $ sudo mount --types ext4 /dev/sdc1 /media/aysheaia
takatoh@wplj $ touch /media/aysheaia/test
touch: '/media/aysheaia/test' に touch できません: 許可がありません
takatoh@wplj $ sudo touch /media/aysheaia/test
takatoh@wplj $ ls /media/aysheaia
test

大丈夫そうだ。

/etc/fstab に情報を書き込んで、再起動。

# USB HDD AYSHEAIA
UUID=4bd2ad4c-1acf-4468-847b-1dd0a0c474a2 /media/aysheaia ext4 defaults 0 0

はたして再起動した結果:

takatoh@wplj $ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           385M  6.8M  378M   2% /run
/dev/sda2       454G   16G  416G   4% /
tmpfs           1.9G   29M  1.9G   2% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sdb1       2.7T   73M  2.6T   1% /media/aysheaia
/dev/sda1       511M  3.4M  508M   1% /boot/efi
/dev/sdc2       2.8T  1.2T  1.6T  42% /media/opabinia
tmpfs           385M   52K  385M   1% /run/user/1000

うまくマウントされたようだ。なんかデバイス名が変わってるけど……

あとはバックアップからコピーして、今度はバックアップ用の HDD を ext4 にフォーマットしなおせば OK。

もう一度rbenvを使ってRubyをインストールする(システムワイド)→成功

先日、システムワイドにインストールしようとした時には失敗したけど、ググっていたらヒントになりそうな記事を見つけた。

cf. Centos7にNginx + UnicornでRedmine3.3構築方法 – Qiita

つまり、/usr/local/rbenv のパーミッションの問題を解決してやればいいんではないか。

前提

/usr/local/rbenv 以下には、先日インストール(というか git clone)したファイルが残っている。

新しいユーザーとグループの作成

takatoh にはユーザーローカルに rbenv がインストールされてしまっていて、ここで作業するとややこしい事になりそうなので、別のユーザーを作ることにする。

[takatoh@aybesea ~]$ sudo useradd bill
[sudo] takatoh のパスワード:
[takatoh@aybesea ~]$ sudo passwd bill
ユーザー bill のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは 8 未満の文字列です。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

新しいグループ staff を作って、いま作ったユーザー bill を所属させる。

[takatoh@aybesea ~]$ sudo groupadd staff
[sudo] takatoh のパスワード:
[takatoh@aybesea ~]$ sudo usermod -G staff bill

ついでに wheel グループにも所属させておこう。

[takatoh@aybesea ~]$ sudo usermod -G wheel bill

さて、ここからはユーザー bill での作業。

rbenvの設定とインストール

/etc/profile.d/rbenv.sh をつぎのとおりに作成。

export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init --no-rehash -)"

/usr/local/rbenv のグループと権限を変更。

[bill@aybesea ~]$ sudo chgrp -R staff /usr/local/rbenv
[bill@aybesea ~]$ sudo chmod -R 755 /usr/local/rbenv

/etc/profile.d/rbenv.sh を読み込んだあと、ruby-build をインストール。

[bill@aybesea ~]$ source /etc/profile.d/rbenv.sh
[bill@aybesea ~]$ cd /usr/local/rbenv/plugins/ruby-build
[bill@aybesea ruby-build]$ sudo ./install.sh

さあ、これでどうだ。rbenv がインストールされているか、確認。

[bill@aybesea ruby-build]$ rbenv -v
rbenv 1.1.1-28-gb943955
[bill@aybesea ruby-build]$ which rbenv
/usr/local/rbenv/bin/rbenv

Rubyのインストール

いよいよ Ruby のインストール。先日の 2.5.0 と間違わないように 2.4.3 をインストールしてみる。

[bill@aybesea ~]$ rbenv install 2.4.3
Downloading ruby-2.4.3.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.3.tar.bz2
Installing ruby-2.4.3...
mkdir: ディレクトリ `/usr/local/rbenv/versions/2.4.3' を作成できません: 許可がありません

BUILD FAILED (CentOS Linux 7 using ruby-build 20171226)

Inspect or clean up the working tree at /tmp/ruby-build.20180102092705.32107
Results logged to /tmp/ruby-build.20180102092705.32107.log

Last 10 log lines:
/tmp/ruby-build.20180102092705.32107 /usr/local/rbenv/plugins/ruby-build
/tmp/ruby-build.20180102092705.32107/ruby-2.4.3 /tmp/ruby-build.20180102092705.32107 /usr/local/rbenv/plugins/ruby-build

ああ、ダメだ。なんでだ?
もう一度、/usr/local/rbenv のパーミッションを確認してみる。

[bill@aybesea ~]$ ls -l /usr/local | grep rbenv
drwxr-xr-x. 12 root staff 263 12月 31 05:58 rbenv

あ、ディレクトリのパーミッションが 755 になってる。多分このせいだ。さっき間違えたようだ。

[bill@aybesea ~]$ sudo chmod -R 775 /usr/local/rbenv
[sudo] bill のパスワード:

これでもう一度インストールにチャレンジ。

[bill@aybesea ~]$ rbenv install 2.4.3
Downloading ruby-2.4.3.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.3.tar.bz2
Installing ruby-2.4.3...
mkdir: ディレクトリ `/usr/local/rbenv/versions/2.4.3' を作成できません: 許可がありません

BUILD FAILED (CentOS Linux 7 using ruby-build 20171226)

Inspect or clean up the working tree at /tmp/ruby-build.20180102094304.32661
Results logged to /tmp/ruby-build.20180102094304.32661.log

Last 10 log lines:
/tmp/ruby-build.20180102094304.32661 ~
/tmp/ruby-build.20180102094304.32661/ruby-2.4.3 /tmp/ruby-build.20180102094304.32661 ~

ああ、これでもダメか。
bill のグループを確認してみる。

[bill@aybesea ~]$ groups
bill wheel

あれ?staff グループに所属してない。
調べたところ usermod -G コマンドでは2次グループに所属させることはできるが、複数回実行すると2次グループが置き換えられるようだ。所属するグループを3つ以上にするには usermod -aG コマンドを使うようだ。
なので、次のようにする。

[bill@aybesea ~]$ sudo usermod -aG staff bill
[sudo] bill のパスワード:
[bill@aybesea ~]$ groups
bill wheel

あれ、追加されてない?id コマンドで見てみよう。

[bill@aybesea ~]$ id bill
uid=1002(bill) gid=1002(bill) groups=1002(bill),10(wheel),1003(staff)

こっちには追加されている。

それじゃ、もう一度インストールにチャレンジ。

[bill@aybesea ~]$ rbenv install 2.4.3
Downloading ruby-2.4.3.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.3.tar.bz2
Installing ruby-2.4.3...
mkdir: ディレクトリ `/usr/local/rbenv/versions/2.4.3' を作成できません: 許可がありません

BUILD FAILED (CentOS Linux 7 using ruby-build 20171226)

Inspect or clean up the working tree at /tmp/ruby-build.20180102095649.535
Results logged to /tmp/ruby-build.20180102095649.535.log

Last 10 log lines:
/tmp/ruby-build.20180102095649.535 ~
/tmp/ruby-build.20180102095649.535/ruby-2.4.3 /tmp/ruby-build.20180102095649.535 ~

まだダメか。
いったん、ログアウトしてからログインし直してみよう。それからまたチャレンジ。

[bill@aybesea ~]$ rbenv install 2.4.3
Downloading ruby-2.4.3.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.3.tar.bz2
Installing ruby-2.4.3...
Installed ruby-2.4.3 to /usr/local/rbenv/versions/2.4.3

[bill@aybesea ~]$ rbenv versions
  2.4.3
[bill@aybesea ~]$ rbenv global 2.4.3
[bill@aybesea ~]$ ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-linux]

今度はうまくいった!

これで完了。

[追記]

ユーザー takatoh での設定も変更しておく。.bash_profile から rbenv 関係の記述を削除してログインし直したところ、次のようになった。

[takatoh@aybesea ~]$ rbenv -v
rbenv 1.1.1-28-gb943955
[takatoh@aybesea ~]$ which rbenv
/usr/local/rbenv/bin/rbenv
[takatoh@aybesea ~]$ rbenv versions
* 2.4.3 (set by /usr/local/rbenv/version)
[takatoh@aybesea ~]$ rbenv version
2.4.3 (set by /usr/local/rbenv/version)

ユーザーローカルでインストールした 2.5.0 は現れず、さっきシステムワイドにインストールした 2.4.3 を使うようになっている。
~/.rbenv 以下はもう要らないので削除。

[takatoh@aybesea ~]$ rm -rf .rbenv

Ruby を使うだけならこれでいいけど、他のバージョンのインストールができないので、staff グループに所属させておく。

[takatoh@aybesea ~]$ sudo usermod -aG staff takatoh

もう一度ログインし直せば完了。

CentOS 7にSambaサーバをたてる

Windows とのファイル共有のために、Samba サーバをインストールし、その後 firewalld と SELinux の設定を行う。

インストール

[takatoh@aybesea ~]$ sudo yum install samba samba-client samba-winbind samba-winbind-clients

firewalldの設定

firewalld の詳しい説明はまた別の機会に。ここでは、samba サーバにアクセスできるようにだけする。

[takatoh@aybesea ~]$ sudo firewall-cmd --add-service samba --zone public --permanent
success
[takatoh@aybesea ~]$ sudo firewall-cmd --add-service samba-client --zone public --permanent
success

smb.confの編集

誰でもアクセスできる共有フォルダを作る。/etc/samba/smb.conf ファイルを次のように編集。globa セクション。

[global]
workgroup = PANICBLANKET
security = user

passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw

dos charset = CP932
unix charset = UTF-8
display charset = UTF-8
map to guest = Bad User

共有フォルダのセクション。ここでは share という共有フォルダを作った。

[share]
path = /mnt/wiwaxia/share
writable = yes
force create mode = 0666
force directory mode = 0777
guest ok = yes
guest only = yes

共有用ディレクトリの作成

[takatoh@aybesea ~]$ cd /mnt/wiwaxia
[takatoh@aybesea wiwaxia]$ sudo mkdir share

自動定と起動

[takatoh@aybesea wiwaxia]$ sudo systemctl enable smb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
[takatoh@aybesea wiwaxia]$ sudo systemctl enable nmb
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.
[takatoh@aybesea wiwaxia]$ sudo systemctl enable winbind
Created symlink from /etc/systemd/system/multi-user.target.wants/winbind.service to /usr/lib/systemd/system/winbind.service.
[takatoh@aybesea ~]$ sudo systemctl start smb
[takatoh@aybesea ~]$ sudo systemctl start nmb
[takatoh@aybesea ~]$ sudo systemctl start winbind

Windowsから確認

ここでいったん、Windows 側からアクセスできるかどうか確認してみたところ、ダメだった。たぶん SELinux のせいだ。

SELinuxの設定

SELinux についても詳しいことは別の機会にして、ここでは必要そうな設定だけをする。

[takatoh@aybesea ~]$ sudo setsebool -P allow_smbd_anon_write=on
[takatoh@aybesea ~]$ sudo setsebool -P samba_share_nfs=on
[takatoh@aybesea ~]$ sudo setsebool -P samba_export_all_rw=on
[takatoh@aybesea ~]$ sudo sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

さて、これでもう一回試してみたけどダメだった。

何がいけない?

firewalld をもう一度確認してみる。

[takatoh@aybesea ~]$ sudo firewall-cmd --list-service
ssh dhcpv6-client

あれ?samba が追加されてない。

[takatoh@aybesea ~]$ sudo cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="samba"/>
  <service name="samba-client"/>
</zone>

ゾーンの設定ファイルには反映されている。何故だ?
firewalld をリスタートさせてみる。

[takatoh@aybesea ~]$ sudo systemctl restart firewalld
[takatoh@aybesea ~]$ sudo firewall-cmd --list-service
ssh dhcpv6-client samba samba-client

今度は反映された。
もう一度 Windows からアクセスしてみると、共有フォルダは見つかったものの書き込みができない。
共有用ディレクトリのパーミッションを確認してみると、root 以外は書き込みができないようになっていたので、これを変更してみる。

[takatoh@aybesea ~]$ cd /mnt/wiwaxia
[takatoh@aybesea wiwaxia]$ ls -l
合計 20
drwx------. 2 root root 16384 12月 30 21:21 lost+found
drwxr-xr-x. 2 root root  4096  1月  1 17:52 share
[takatoh@aybesea wiwaxia]$ sudo chmod 777 share
[takatoh@aybesea wiwaxia]$ ls -l
合計 20
drwx------. 2 root root 16384 12月 30 21:21 lost+found
drwxrwxrwx. 2 root root  4096  1月  1 18:31 share

これでめでたく、共有フォルダに読み書きできるようになった。

CentOS 7のsshd

CentOS 7 では標準で sshd が動いているようだ。Ubuntu マシンからアクセスした様子を示す。

takatoh@envelopes $ ssh takatoh@aybesea
takatoh@aybesea's password: 
Last login: Sun Dec 31 08:28:12 2017
[takatoh@aybesea ~]$ ls
Desktop    Downloads              Music     Public     Videos  w
Documents  Firefox_wallpaper.png  Pictures  Templates  bin

envelopes が Ubuntu マシンで、aybesea が CentOS マシンね。なんにもしてなくても、ちゃんとアクセスできる。これは楽でいい。