2020年 11月 の投稿一覧

サブドメインを別のネームサーバで管理する

実験用のドメインで、ある特定のサブドメインだけ別のネームサーバで設定を管理することになったので、その際の作業について。

サブドメインのサブドメイン、、、を設定していたらちょっと混乱したので、基本に立ち返ってネームサーバの委任方法をメモしておきます。

特定のサブドメインだけ、別のネームサーバのレコードを参照させるには、

  • 委任するネームサーバのゾーンファイルに、委任を受けるネームサーバを、委任するサブドメイン用のNSレコードに記述する
  • 委任を受けるネームサーバのゾーンファイルに、委任を受けるネームサーバをNSレコードに記載する

の2点を行う必要があります。

文章で書くと分かりづらいですね。。。

要するに、

$ORIGIN example.com.
; ... 前略
; 親ドメインのゾーンファイルには、委任するサブドメインを管理するネームサーバを記載する
sub.example.com.        IN      NS     ns-another.example2.com.
; ... 後略
$ORIGIN sub.example.com.
; ... 前略
; サブドメインのゾーンファイルにも、同じくNSレコードを記述する
sub.example.com.          IN     NS  ns-another.example2.com.
; ... 後略

こういうことでした。

ちなみに、委任先のネームサーバが委任するサブドメイン(sub.example.com)内にある場合は、親のネームサーバのAレコードに、委任先ネームサーバのIPアドレスを記述します。

これがきちんと設定できていないと、

$ nslookup sub.example.com
** server can't find sub.example.com: NXDOMAIN

こんな感じのエラーが出ます。

サブドメインを別のネームサーバに管理させる場合は、親のネームサーバにもこのネームサーバにも、NSレコードの記述が必要という話でした。

あなたのお役に立てればうれしいです。

sshでログインできないエラー:tilde_expand_filename: No such user

新しいサーバーをつくって、ローカルPCからsshでログインしようとした際に上記のエラーが出ました。

検索してみたけど、日本語の情報があまり出てこなかったのでメモしておきます。

原因は本当にしょうもなくて、configファイルの記述ミスでした。

Host ssh-host
  HostName hostname.example.com
  User username-example
  IdentityFile ~./ssh/ssh-host/private.rsa

こんな感じで記述したところ、以下のようなエラーが。

$ ssh ssh-host
tilde_expand_filename: No such user .

sshとの関係で調べてみても、それらしい情報に出会えず。

和訳すると「チルダのファイル名展開」みたいな意味です。

チルダか~…と思いながらconfigを見直してみたら、誤入力を発見しました。

Host ssh-host
  HostName hostname.example.com
  User username-example
#  IdentityFile ~./ssh/ssh-host/private.rsa # <- ~の後ろに '.'が入っている
  IdentityFile ~/.ssh/ssh-host/private.rsa # <- '~/.ssh'に修正

普通に入力ミスでした。

No such userじゃなくて、 No such file だったらすぐに気づいたんだけど…

ちなみに、チルダの後ろの誤入力を「foobar」にしたら、ちゃんと(?)

$ ssh ssh-host
tilde_expand_filename: No such user foobar

というエラーになりました。

誤入力には気を付けましょう、という話でした。

あなたのお役に立てましたらうれしいです。

多重ポインタのインクリメントはかっこが必要

文字列のポインタのポインタ(多重ポインタ)を利用する場面で、インクリメントをしようとしたらエラーになりました。

void func(char **p)
{
  /* 1文字ずつ処理したかった */
  while (**p != '\0')
  {
    /* ここに処理 */
    *p++; // インクリメントで参照先を一つずつ移動
  }
  return ;
}

そうしたら、コンパイル時に以下のエラーが。

error: value computed is not used [-Werror=unused-value]

どうやらこの書き方だと、*(p++) と解釈されてしまうようです。

void func(char **p)
{
  /* 1文字ずつ処理したかった */
  while (**p != '\0')
  {
    /* ここに処理 */
    (*p)++; // ポインタを示すようにかっこで囲む
  }
  return;
}

このように変数部分にかっこをつける修正をしたところ、エラーが解消しました。

間接参照演算子の優先順位が、インクリメント記号よりも低いことが原因とのこと。

これ知らなかったらハマるやつですね。メモっておこう。

あなたのお役に立てれば嬉しいです。

dockerコンテナ内でNginxの起動状態を確認する : ps r コマンド

dockerコンテナ内では、 systemctl や service コマンドが利用できません。

いつものクセでコンテナ化していない環境と同じコマンドを実行するとエラーします。

# / systemctl status nginx
sh: systemctl: not found

実行プロセスの有無で起動状態かそうでないかを判断する

代わりの方法として、プロセスがあるかどうかで判断をしてみます。

# / ps r | grep nginx
    1 root      0:00 nginx: master process nginx -g daemon off;
  101 nginx     0:00 nginx: worker process
  102 nginx     0:00 nginx: worker process
  103 nginx     0:00 nginx: worker process
  104 nginx     0:00 nginx: worker process
  106 root      0:00 grep nginx

rオプションで実行中のプロセスの一覧を表示し、grepでnginxのものだけを絞り込みます。

プロセスがあればNginxが起動していて、何も表示されなければNginxが起動していない…と考えることができます。

以上、あなたのお役に立てれば嬉しいです。