groupaddとuseraddのrオプションでシステムアカウントを作成する
groupaddとuseraddにrオプションを指定するとsystemアカウントになる
-r, --system create a system account
# groupadd -r r_group # groupadd -r r_group2 # grep r_group /etc/group r_group:x:998: r_group2:x:997:
IDが振られる範囲は/etc/login.defsのSYS_GID_MIN
とSYS_GID_MAX
で定義されているが、IDは降順に振られるようである
# # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 # System accounts SYS_GID_MIN 201 SYS_GID_MAX 999
普通のグループはGID_MIN
、GID_MAX
で定義されている通り、1000以降が振られる
# groupadd normal_group # grep group /etc/group normal_group:x:1000:
ユーザも同じ感じ
# useradd -r -g r_group r_user # useradd -g normal_group normal_user # grep user /etc/passwd r_user:x:999:998::/home/r_user:/bin/bash normal_user:x:1000:1000::/home/normal_user:/bin/bash
IDが振られる範囲は同じく/etc/login.defsで定義されている。
# # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 # System accounts SYS_UID_MIN 201 SYS_UID_MAX 999
普通のユーザとの違いは、/etc/shadowを見るとパスワードの有効期限がブランクになっている
r_user:!!:17528:::::: normal_user:!!:17528:0:99999:7:::
また、/etc/login.defsのCREATE_HOME
の設定を無視してホームディレクトリが作成されない
$ ls /home normal_user
ただ、ログインできてしまう。
システムユーザとして使用するには、ログインシェルは使えないようにしたい。
ログインさせないために/sbin/nologin
は知ってたけど、メッセージを返さない/bin/false
というのもあるらしい
# /sbin/nologin This account is currently not available. # echo $? 1 # /bin/false # echo $? 1
本番環境ではメッセージを返さない/bin/false
、デバッグ環境は /sbin/nologin
とか使い分けると良さそう。
# useradd -r -g r_group -s /bin/false r_user
途中まで打ったコマンドを保持しつつ別のコマンドを実行する方法
途中まで打ったけど、別のコマンドを打ちたくなった、でも打ちかけたのを消すのは惜しい。
そんな場合は Alt + q
$ docker exec -it (あれ、コンテナIDなんだっけ?)
Alt + q
を押すと一旦プロンプトがクリアされる。
$
別のコマンドを実行して、めでたくコンテナIDが分かった。打ちかけのコマンドが復元されるので続きをどうぞ。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bf0c389358f9 centos:7.4.1708 "/bin/bash" 9 hours ago Exited (0) 9 hours ago 34_redmine_1 $ docker exec -it
SQL中のVALUES
SELECT句が使える場所ならどこでもVALUESが使えるとのこと。
-- select 1,'one' union select 2,'two' union select 3,'three'と等価 postgres=# VALUES (1, 'one'), (2, 'two'), (3, 'three'); column1 | column2 ---------+--------- 1 | one 2 | two 3 | three (3 rows)
asで別名をつければテーブルを指定できるところに使える。列名はデフォルトでcolumn1, column2のようになる。
postgres=# select column1,column2 from (values ('あいうえお',1),('かきくけこ',2),('さしすせそ',3)) as t; column1 | column2 ------------+--------- あいうえお | 1 かきくけこ | 2 さしすせそ | 3 (3 rows)
列名をつけることも可能です。
select no,hiragana from (values ('あいうえお',1),('かきくけこ',2),('さしすせそ',3)) as t(hiragana,no);
readlineが7にバージョンアップされてgradleとpsqlが動かなくなった
何もした覚えがないのだが、ある日急にgradleとpsqlが動かなくなった。
$ gradle tasks dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib Referenced from: /usr/local/bin/bash Reason: image not found [1] 52259 abort gradle tasks $ psql dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib Referenced from: /usr/local/bin/psql Reason: image not found [1] 52489 abort psql
どちらもlibreadline.6.dylib がないと言ってエラーを吐いている。
あまり記憶にないけど、Homebrewでreadlineを入れていたようで、現在は7.0.3が適用されているようだ。
$ brew info readline readline: stable 7.0.3 (bottled) [keg-only] Library for command-line editing https://tiswww.case.edu/php/chet/readline/rltop.html /usr/local/Cellar/readline/6.3.6 (46 files, 2MB) Poured from bottle on 2014-05-29 at 11:25:42 /usr/local/Cellar/readline/6.3.8 (46 files, 2MB) Poured from bottle on 2014-10-18 at 05:30:37 /usr/local/Cellar/readline/7.0.3 (46 files, 2MB) Poured from bottle on 2017-02-28 at 22:25:05 From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/readline.rb ==> Caveats This formula is keg-only, which means it was not symlinked into /usr/local. macOS provides the BSD libedit library, which shadows libreadline. In order to prevent conflicts when programs look for libreadline we are defaulting this GNU Readline installation to keg-only. For compilers to find this software you may need to set: LDFLAGS: -L/usr/local/opt/readline/lib CPPFLAGS: -I/usr/local/opt/readline/include
6系のものに切り替えてみる
$ brew switch readline 6.3.8 Cleaning /usr/local/Cellar/readline/6.3.6 Cleaning /usr/local/Cellar/readline/6.3.8 Cleaning /usr/local/Cellar/readline/7.0.3 Opt link created for /usr/local/Cellar/readline/6.3.8
動いた!
$ psql --version psql (PostgreSQL) 9.4.0
おそらく7系をインストールした何かが動かなくなるんだろうなと思いつつ、とりあえず良しとする。
RedmineでSVNの差分を見ようとすると「リポジトリに、エントリ/リビジョンが存在しません。」エラーになる
Passenger+ApacheでRedmineを運用しているが、SVNのコミットの差分を見ようとすると「リポジトリに、エントリ/リビジョンが存在しません。」とエラーが表示されるようになった。
コミットメッセージなどは取得出来ているので、リビジョンが存在しないと言われても良く分からん状態なので調査してみた。
エラー「リポジトリに、エントリ/リビジョンが存在しません。」 — Redmine.JP
上記サイトにあるように、まずerror_logを見てみるとそれっぽいエラーメッセージが出力されていた。
App 32640 stderr: svn: Can't convert string from 'UTF-8' to native encoding: App 32640 stderr: svn: Index: ?\233?\155?\187?\230?\176?\151?\230?\150?\153?\233?\135?\145.txt
更に調べてみると、正に下記サイトに書いてあるとおりファイル名が日本語だとうまく変換出来ていなかったようだ。
CentOSでApacheを日本語ロケール(ja_JP.utf8)で起動する | maeda.log
/etc/sysconfig/httpd に HTTPD_LANG=ja_JP.utf8
を指定して事なきを得た。
Redmineのサーバー移設をした後に発生したので以前は設定されていたようだがノウハウが失われていたようだ。
せめてもう少しエラーメッセージが分かりやすいと良いのだが。