ぼくのかんがえたさいきょうの /etc/apt/sources.list

これ

# /etc/apt/sources.list
deb     mirror+file:/etc/apt/mirrors.txt jammy main restricted universe multiverse
deb-src mirror+file:/etc/apt/mirrors.txt jammy main restricted universe multiverse

deb     mirror+file:/etc/apt/mirrors.txt jammy-updates main restricted universe multiverse
deb-src mirror+file:/etc/apt/mirrors.txt jammy-updates main restricted universe multiverse

deb     http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
# /etc/apt/mirrors.txt
# http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/  priority:1
# http://asia-northeast1.gce.archive.ubuntu.com/ubuntu/ priority:1
https://ftp.udx.icscoe.jp/Linux/ubuntu/ priority:2
https://linux.yz.yamagata-u.ac.jp/ubuntu/   priority:3
http://archive.ubuntu.com/ubuntu/

です。

これで、

  • ftp.udx.icscoe.jp にアクセスして成功したらそれで OK
  • 失敗したら linux.yz.yamagata-u.ac.jp にアクセスして成功したらそれで OK
  • 更に失敗したら最後の砦の http://archive.ubuntu.com/ubuntu/ にアクセスする

な動作になります。

EC2 や GCE な向きは、リージョンを適宜変更して(まれによくコケる)REGION.ec2.archive.ubuntu.comREGION.gce.archive.ubuntu.com/ubuntu/ のコメントを外して最初に試行するとよいでしょう。

/etc/apt/mirrors.txt について詳しく説明すると、

  • priority の値が小さい順に試行して、失敗したら次のを試行する
  • priority の値がないのは最後に試行する
  • priority の値が同じもの同士、もしくは priority の値がないもの同士はその中からランダムで選ばれ、失敗したらその中からまたランダムで選んで試行を繰り返す
  • URL と priority の間はタブで区切る! スペースではダメ!!
    • 今回の超絶おハマりポイントです!!
    • cat -T /etc/apt/mirrors.txt^I となっているか確認しましょう
  • この機能が使えるのは apt 1.6 以上で、bionic のが 1.6.x なので bionic より古いと使えないかもです

詳細は apt-transport-mirror(1) を参照してください。

公式の apt repos のミラーの一覧はここにあるので、お好みのを選んでみてください。

ときに、爆速の ICSCoE が以前は掲載されていた記憶なんですが、公式ミラーから外れちゃったんすかね?

Ruby の net-ssh で OpenSSH 8.8 以上のサーバーにアクセスできない件

Ubuntu 22.04 LTS (Jammy) の OpenSSH 8.9 な sshd に対して、OpenSSH 7.2 以降の ssh ではアクセスできるけど Rubynet-ssh ではアクセスできない件。

理由は以下の通り。

  • OpenSSH 8.8 で ssh-rsa 署名が無効化された
  • rsa 鍵は ssh-rsa 署名の他に、rsa-sha2-256rsa-sha2-512 でも署名可能
  • 実装によっては、ネゴシエーション時に利用可能とわかれば、rsa-sha2-256rsa-sha2-512 署名を使う
    • OpenSSH は 7.2 以降で対応している
    • Rubynet-ssh は現時点の最新リリース版 6.1.0 では未対応
  • 従って、
    • OpenSSH 7.2 以降の sshrsa-sha2-512 署名を使って接続可能
    • Rubynet-sshssh-rsa 署名を使うので接続失敗

詳しい説明は、ヌーラボさんの「OpenSSHがSHA-1を使用したRSA署名を廃止、BacklogのGitで発生した問題と解決にいたるまでの道のり」とそこからリンクされているサイトを参照されたし。

Rubynet-ssh で接続するには、

これからSwitchをお迎えする人へ

年末に向け、新しく Switch をお迎えする人も多いかと思います。そんな人へ、スムーズに使い始められるようにお勧めの準備事項をまとめてみました。

(以前、某所に投稿したやつの 2021 年版です)

SDカード

ダウンロードソフトの保存先に必要なので買っときましょう。本体内蔵のは有機 EL モデルが 64GB、無印と Lite が 32GB なんであっという間にいっぱいになります。

microSDXC の 128GB 以上ならいいんでないかと。

粗悪品を掴まされないように、信頼できる販路で信頼できるメーカーのを購入しましょう。(個人的には SanDiskTranscend

ちなみにソフトの容量はこんな感じ:

  • ブレワイ: 14.4GB
  • Xenoblade DE: 13.6GB
  • スプラ2: 6.1GB
  • あつ森: 6.6GB

ニンテンドーアカウント

Switch内の「ユーザー」に「ニンテンドーアカウント」を連携させるとポイント溜まったりニンテンドーeショップでソフト買えたりできます。

ので、「ニンテンドーアカウント」は予め作っておいた方がスムーズに始められるかと。

Switch が無くても PC or スマホでここからアカウント作れます。

ちな、Nintendo Switch Online には「ニンテンドーアカウント」は必須です。

子どもアカウント

0 歳から 17 歳までのアカウントは「子どもアカウント」として登録できて、「みまもり設定」で各種制限を加えることができます。

一度「子どもアカウント」にすると 13 歳以上になるまで「一般アカウント」にすることができませんが、ボイチャ使うゲームを子どもがやらない限りはまぁ「子どもアカウント」でいいんじゃないかと思います。

Nintendo Switch Online

Nintendo Switch Online は入るのをお勧めします。

オンラインプレイだけじゃなくて、セーブデータお預かり(セーブデータのバックアップ)もできるので。

300時間のハイラルの思い出が吹っ飛んだら立ち直れませんよね?

ただ、セーブデータお預かりに対応してないゲームもあるので気をつけてください…

あとは、昔のファミコンスーファミのゲームも遊べるようになります!

個人だと 2,400 円/年。ファミリープラン(最大 8 アカウント)だと 4,500 円/年です。

NINTENDO 64 好きなら、10 月下旬に追加予定の「追加パック」も要チェック。

Proコン

必要になったらでおk

ゲームはダウンロード版?パッケージ版?

ゲームカードを入れ替えるのが地味にめんどいのでダウンロード版をお勧めします。

が、パッケージ版のメリットもあるので状況次第で。

  • 飽きたら売り飛ばしたい
  • Switchを複数台もってて、両方でプレイしたい(連携してるニンテンドーアカウントが別の場合)
  • 中古で安く買いたい
  • ご賞味したい(ゲームカードは舐めると味がします。中古の場合は抵抗ありますが…)

液晶保護フィルム

持ち運び時にキズがついたらイヤなので自分は貼ってます。

キャリングケース

持ち運ぶときにはあった方がいいかもす。

カバンに放り込んで液晶に傷がついたりスティックがぐんにゃり逝ったりすると悲しいので、かさばらないソフトケース持ってます。

あと、ケースに入れても入れなくても、持ち運ぶときは電源オフにした方がいいす! カバンの中で、スティックに何かが触れるとスリープから覚めてしばらくしてまたスリープして〜を繰り返して、さてやるか!!ってときにバッテリーが尽きてると悲しいので。(経験者)

goのtviewを使う時は、

FAQ

にも書いてあるけど、 export LC_CTYPE="en_US.UTF-8" しましょう。

じゃないと、枠線がガビガビになったり行頭の1文字が書けたりしちゃいます。

もしくは、こんな感じで環境変数をセットして再実行するのでもいいかと。

func init() {
    // https://github.com/rivo/tview/wiki/FAQ#why-do-my-borders-look-weird
    if os.Getenv("LC_CTYPE") != "en_US.UTF-8" {
        os.Setenv("LC_CTYPE", "en_US.UTF-8")
        env := os.Environ()
        if err := syscall.Exec(os.Args[0], os.Args, env); err != nil {
            panic(err)
        }
    }
}

内部NLBによるパケットの書き換えのまとめ

そういえば、内部 NLB 構成ってどうやって同一セグメントのクライアントにパケットが返ってきてるんだろ? リアルサーバーからみたときに、パケットの送信元がクライアントのになる DSR だとすると返せるのはわかるんだけど、VIP (NLBのIPアドレス) 宛のパケットを受ける設定してなくても動いてるし、NAT (DNAT) 型だとすると(クライアントが同一セグメントにいるので)戻りのパケットが NAT した NLB を経由しないんでクライアントに破棄されるだろうし??? とふと疑問を持ったので調べてみた結果です。

調べたところ、リアルサーバーに届くパケットはこんな感じでした:

  • ターゲットをインスタンスIDで指定した場合
    • src MAC = NLBのMAC
    • src IP = クライアントのIP
    • dst MAC = リアルサーバーのMAC
    • dst IP = リアルサーバーのIP
  • ターゲットをIPアドレスで指定した場合
    • src MAC = NLBのMAC
    • src IP = NLBのIP
    • dst MAC = リアルサーバーのMAC
    • dst IP = リアルサーバーのIP

まとめると:

  • 内部 NLB は NAT型 の L4LB
  • dstはリアルサーバーのMACアドレスIPアドレスに書き換えられる(DNAT)
  • srcのMACアドレスはNLBのMACアドレスに書き換えられる
    • リアルサーバーからの戻りのパケットが必ずNLBを経由するようにこうなってると思われ
    • DNATのみだと、srcはクライアントのMAC、IPになるので、リアルサーバーはNLBを経由せずに直接クライアントに戻りのパケットを送信しちゃって、クライアントは送ったのと違うところからパケットが返って来ることになるので破棄しちゃう
  • ターゲットタイプで違うのは、srcのIPアドレスのみ
  • ターゲットをインスタンスIDで指定したときの注意点

な感じでした。なるほどー

良いお年を!

MySQLで生パスワードからauthentication_stringを得る方法

SELECT PASSWORD('mypass');

mysql.user の authentication_string に格納されるのを得られるんですが、MySQL 8から PASSWORD() 関数がなくなったのでどうすればいいかというと、

SELECT CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass')))));

こうすればいいです。

と、 @yoku0825 さんに教えてもらいました!

あるファイルがn日以上更新されてないか調べる方法

find -mtime を使う

# 最終更新から 24 時間以上経過しているか
if [[ "$(find /path/to/file -mtime +0)" != "" ]]; then
  echo 'OLD!'
else
  echo 'NEW!'
fi

-mtime +0 がなぜ「24時間以上前」になるのか?について:

-mtime n
  ファイルの最終内容更新日時が、基点となる時刻から計算して n 日前に当たれば、真を返す (訳注: 基点となる時刻は、デフォルトでは find を実行している今現在である)。
  (snip)
  なお、デフォルトの動作のように、現在時刻から数えて 24 時間前から 48 時間前までを 1 日前とする

つまり、

  • 1日前 = 24時間前から48時間前

なので、

  • n日前 = n*24時間前から(n+1)*24時間前

つまり、

-mtime 0 = 最終更新が0日前 =  0時間前から24時間前
-mtime 1 = 最終更新が1日前 = 24時間前から48時間前
-mtime 2 = 最終更新が2日前 = 48時間前から72時間前

次に n の記法について。

数値の引き数は、以下の形で指定することができる。

+n
  n より大きい。
-n
  n より小さい。
n
  ちょうど n。

なので、

  • -mtime +0
  • = -mtime 1 または -mtime 2 または ...
  • = 最終更新が0日前より過去
  • = 24時間前より過去

となる。

ほかにイケてる方法があったら教えてください!!><