一般ユーザーでsudoできるようにする

CentOS では wheel グループが sudo できるグループとして意図されているみたい。これを有効にするには次のようにする。

まず、visudo コマンドで編集。

[root@aybesea ~]# visudo

終わりのほうの次の行を変更して保存。

# %wheel ALL=(ALL) NOPASSWD: ALL
%wheel ALL=(ALL) ALL

それから usermod コマンドでユーザーを wheel グループに追加。

[root@aybesea ~]# usermod -G wheel takatoh

これで再起動すればOK。

CentOS 7で日本語入力できるようにする

アプリケーション → システムツール → 設定 から Region & Language を選択。入力ソースの下の + 印をクリックしてさらに日本語をクリック、リストの中から「日本語(かな漢字)」を選んで追加ボタンをクリック。これで入力ソースに「日本語(かな漢字)」が追加される。
設定を終えると、画面右上のところに ja と表示されるようになる。あとは半角/全角キーで日本語に切り替えられる。

CentOSのアップデート

root でログインする。ログイン画面の、「アカウントが見つかりませんか?」を選ぶとユーザー名を入力できるようになる。この画面で root でログインする。

左上の「アプリケーション」と書いてあるところをクリックして端末を起動。yum update コマンドでアップデート。

[root@aybesea ~]# yum update

300近いパッケージがアップデートされた。

CentOS 7のインストール

というわけで、今日は買い替えた古いほうのマシンに CentOS 7 をインストールする。

まずはインストールメディア(DVD)を作るところから。ダウンロードのページから DVD ISO イメージをダウンロードして、昨日セットアップした Windows マシン(montana)で DVD に焼いた。

さて、DVD を入れて PC を起動するとインストールメニューが出るので、「Test this media & install CentOS 7」を選ぶ。するとメディアのチェックの後、インストールが始まる。
最初は言語の設定から。インストーラは GUI になっててわかりやすい。
つぎに、インストールの概要の画面になったけど、ネットワークが接続されていない。これはちょっと気になる。設定をオンにするとつながるようになった。あと、ここでホスト名も設定する。aybesea にした。インストール先は「自動パーティション設定が選択されました」となっているのでこれはそのまま。ソフトウェアの選択も「最小限のインストール」のままとした。それから SECURITY POLICY もデフォルトのまま。これでインストール開始。

インストール中に、root のパスワードを設定。ユーザーは takatoh を作成した。

しばらくするとインストールが終了して再起動を促される。素直に再起動。ログインの画面になるけど、root でログインしようとしてもできない。なぜだ。パスワードを間違えたか?

仕方がないので、インストールの初めからやり直し。設定はさっきとほぼ一緒だけど、ソフトウェアの選択で「サーバー(GUI使用)」を選んでみたのと、ユーザーの作成をしなかったところが違う。今度はさっきよりだいぶ時間がかかる。

インストールが終わって、再起動すると GUI の画面になる。まずはライセンスに同意。そしてユーザーの作成。takatoh を作成した。設定の完了ボタンをクリック。

画面が切り替わってログイン画面になる。takatoh があるので、パスワードを入力してログイン。root はなかったな。ログインすると簡単な設定があって、デフォルトかスキップで OK。

とりあえずここまで。

[追記]

参考書を買った。

新しいPC(Windows 10)のセットアップをした

昨日の話。Windowsマシン valarie の買い替えの新しい PC のセットアップをした。Windows の更新にすげー時間がかかったせいで1日仕事だった。
セットアップ自体は特に難しいところはないんだけど、途中で Windows の更新をするところで数時間もかかってしまった。特に、「完了の割合」が 99% になってからずっと2時間くらい進まず、結局お祈りしながら強制リブートした。無事リブートしたのでよしとする。更新がどうなったかは分からないけど、今日になってみたら新しい更新がインストールされていたので、結果としては大丈夫だったようだ。
以下、インストールしたアプリケーション。

  • Norton Internet Security
  • iTunes
  • Dropbox
  • Firefox
  • Adobe Reader DC
  • Sublime Text 3
  • 秀丸
  • Git
  • RLogin
  • FFFTP
  • VirtualBox
  • B’s Recoder GOLD
  • Microsoft Office 2013
  • Ruby
  • Python
  • Node.js

とりあえずこんなところ。
あ、ホスト名は montana にした。
あと古いマシンは廃棄する前に CentOS を入れていろいろ実験してみるつもり。

ゴルーチン

ゴルーチンは、Go で並行プログラミングを実現する機能だ。Elixir のプロセスと同じようなものだと理解した。
ゴルーチンを使うには次のように関数呼び出しの前に go をつけるだけだ。これでその関数は新しいゴルーチンの中で実行され、プログラムはゴルーチンの終了を待つことなく次の処理に移る。つまりゴルーチンの処理とメインの処理が平行に動作するってわけだ。
例を見てみよう。まずは普通の(ゴルーチンを使わない)プログラム。

package main

import (
    "fmt"
    "time"
)

func test(n int, name string) {
    for i := 1; i <= n; i++ {
        fmt.Println(i, name)
        time.Sleep(500 * time.Millisecond)
    }
}

func main() {
    test(5, "foo") test(5, "bar")
}

2度呼び出されている test 関数は、それぞれ “foo” と “bar” を5回ずつ出力する。これは当然書いてある順に処理される。

^o^ > go run go_name.go
1 foo
2 foo
3 foo
4 foo
5 foo
1 bar
2 bar
3 bar
4 bar
5 bar

じゃあ、次はゴルーチンを使ってみよう。ひとつめの関数呼び出しをゴルーチンに渡してみる。こんなプログラムになる。

package main

import (
    "fmt"
    "time"
)

func test(n int, name string) {
    for i := 1; i <= n; i++ {
        fmt.Println(i, name)
        time.Sleep(500 * time.Millisecond)
    }
}

func main() {
    go test(5, "foo")
    test(5, "bar")
}

実行してみる。

^o^ > go run go_name2.go
1 bar
1 foo
2 bar
2 foo
3 bar
3 foo
4 bar
4 foo
5 bar
5 foo

“foo” と “bar” が交互に出力され、二つの関数呼び出しが平行に動作している様子がわかる。

ちなみに、メインのプログラムが終了するとゴルーチンも終了するので、2つの関数呼び出しを両方ともゴルーチンにしてしまうと、何も出力されなくなる。

Ubuntu 16.04にGolang 1.9をインストール

ググると、Ubuntu の公式パッケージにある Go は 1.6 と古いので非公式のリポジトリを登録しろ、という情報があるんだけど、apt search golang してみたら golang-1.9 というパッケージがあった。なので、これをインストールする。

takatoh@envelopes $ sudo apt install golang-1.9

ところが go version コマンドを実行しても、インストールされてない、apt install golang-go をしろ、と言われる。素直にそうしてみると、今度は Go 1.6 がインストールされてしまった。
調べてみると、/usr/lib の下に golang-1.9 と golang-1.6 があって、/usr/bin/go から 1.6 の方へリンクがはられている。ということはこのリンクを 1.9 の方へはりなおしてやればいいはず。いったん 1.6 をアンインストールしてから、リンクをはりなおした。

takatoh@envelopes $ sudo ln -s /usr/lib/go-1.9/bin/go /usr/bin/go
takatoh@envelopes $ sudo ln -s /usr/lib/go-1.9/bin/gofmt /usr/bin/gofmt

これで無事完了。

takatoh@envelopes $ go version
go version go1.9.2 linux/amd64

vsftpdのインストールと設定→解決

昨日の vsftpd が動かない問題、解決した。
話は2段階で進む。まずはじめに、vsftpd 自体が起動しない問題、これは listen ディレクティブと listen_ipv6 ディレクティブが両方 YES になっていたためだった。listen_ipv6 のほうをコメントアウトして解決。

listen=YES
#listen_ipv6=YES

これで起動するようにはなったけど、アクセスしてみると「500 OOPS: vsftpd: refusing to run with writable root inside chroot()」というエラーが出てログインできない。これが2つめ。ググるとつぎのページが見つかった。

cf. vsftpdの設定で謎のエラーにハマった – TomoProgの技術書

どうやら chroot した先に書き込み権限があるとエラーになるらしい。allow_writeable_chroot ディレクティブを追加して解決。

allow_writeable_chroot=YES

それにしても listenlisten_ipv6 はデフォルトで両方 YES になってた。デフォルトが動かない設定になってるってどういうことよ?

vsftpdのインストールと設定→動かない

メインマシン envelopes (Ubuntu 16.04) と Windowns マシン valarie とのデータのやり取りのため、envelopes に vsftpd をインストールした。

takatoh@envelopes $ sudo apt install vsftpd

設定は、基本的には以前さくらの VPS に設定した時と同じ。ただし、ASCII 転送を有効にした。あと、設定ファイルは /etc/vsftpd.conf にあった。

# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES
ascii_download_enable=YES

それから以下を追記。

userlist_deny=NO
userlist_file=/etc/vsftpd.user_list
local_root=Public

空の chroot_list ファイルを作る。

takatoh@envelopes $ sudo touch vsftpd.chroot_list

user_list ファイルを作る。

takatoh@envelopes $ sudo vim vsftpd.user_list

takatoh だけを指定した。

ポート 21 を開ける。

takatoh@envelopes $ sudo ufw allow 21/tcp
ルールを追加しました
ルールを追加しました (v6)

vsftpd をリスタート。

takatoh@envelopes $ sudo systemctl restart vsftpd

あれ?何もメッセージが出ないけどいいのかな?

takatoh@envelopes $ ps ax | grep vsftpd
18124 pts/18   S+     0:00 grep --color=auto vsftpd

ああ、やっぱり動いてない。なんでだ……

middleman deplyが動いてくれない

www.panicblanket.com にホームページを作った。とはいっても2ページしか無いんだけど。
作成には Ruby 製静的サイトジェネレータの Middleman を使った。Middleman の使い方はググればいっぱい出てくるのでここでは省略。とりあえず日本語の公式サイトへのリンクだけ載せておこう。

 cf. Middleman

基本的にはこの公式サイトの説明のとおりにやっていけば、サイトを作れる。というか作れた。
問題はサーバへのデプロイだ。デプロイは、要するにサーバの然るべきディレクトリにファイルをコピーすればいいので、FTP でも何でもいいんだけど、ファイル数が多くなればそれだけ面倒になる。で、公式サイトでは middleman-deploy というプラグインを使うといい、みたいなことが書いてあったのでそうすることにした。
ところがこれが罠だったわけだ。使い方は簡単、Gemfile に middleman-deploy を追加して、bundle install --path vendor/bundle コマンドでインストール。config.rb にデプロイのための設定を書き足して(今回は FTP を使うことにした)、bundle exec middleman deploy を実行するだけ。
で、実行したところこんなエラーが出た。

takatoh@envelopes $ bundle exec middleman deploy
/home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/extensions.rb:96:in `load': Tried to activate old-style extension: deploy. They are no longer supported. (RuntimeError)
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/extensions.rb:127:in `block in load_settings'
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/extensions.rb:125:in `each'
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/extensions.rb:125:in `load_settings'
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/extension_manager.rb:12:in `initialize'
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/application.rb:263:in `new'
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/gems/middleman-core-4.2.1/lib/middleman-core/application.rb:263:in `initialize'
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/gems/middleman-cli-4.2.1/bin/middleman:49:in `new'
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/gems/middleman-cli-4.2.1/bin/middleman:49:in `'
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/bin/middleman:23:in `load'
	from /home/takatoh/w/www.panicblanket.com/vendor/bundle/ruby/2.3.0/bin/middleman:23:in `
'

長いけど、最初のところに、「Tried to activate old-style extension: deploy. They are no longer supported. (RuntimeError)」って書いてある。deploy は古いスタイルの拡張で、すでにサポートされていない、らしい。GitHub の middleman-deploy のページを見てみると、インストールしたバージョン 1.0 がリリースされたのが 2014 年。これ以降新しいバージョンのリリースがない。そりゃ古いよなぁ。でも公式サイトに書いてあるんだぜ?どうしろってんだ。

結局、FTP でファイルをひとつずつアップした。スタイルシートを含めても3ファイルしか無いので、大したことはなかったけど、これからファイル数が増えたらなんか考えなきゃいけない。みんなどうしてるんだろう?