お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
OS::Linux::Ubuntu

WSL2環境などでinit.dを書かざるを得ないときのために。

確認環境

Ubuntu 22.04.5 LTS

書き方

細かいことは書いていないので適当に解釈すること。

  1. /etc/init.dに所有者root、パーミッション755とかでサービス名のファイルを作成
  2. 作成したファイルに以下のようなコードを書く

    #! /usr/bin/env bash
    ### BEGIN INIT INFO
    # Provides:          gitea
    # Required-Start:    $syslog $network
    # Required-Stop:     $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: A self-hosted Git service written in Go.
    # Description:       A self-hosted Git service written in Go.
    ### END INIT INFO
    
    # Do NOT "set -e"
    
    # PATH should only include /usr/* if it runs after the mountnfs.sh script
    PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
    DESC="Gitea - Git with a cup of tea"
    NAME=gitea
    SERVICEVERBOSE=yes
    PIDFILE=/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    WORKINGDIR=/var/lib/$NAME
    DAEMON=/usr/local/bin/$NAME
    DAEMON_ARGS="web -c /etc/$NAME/app.ini"
    USER=git
    STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/1/KILL/5}"
    
    # Read configuration variable file if it is present
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
    
    # Exit if the package is not installed
    [ -x "$DAEMON" ] || exit 0
    
    do_start()
    {
        GITEA_ENVS="USER=$USER GITEA_WORK_DIR=$WORKINGDIR HOME=/home/$USER"
        GITEA_EXEC="$DAEMON -- $DAEMON_ARGS"
        sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
            --background --chdir $WORKINGDIR --chuid $USER \\
            --exec /bin/bash -- -c '/usr/bin/env $GITEA_ENVS $GITEA_EXEC'"
    }
    
    do_stop()
    {
        start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PIDFILE --name $NAME --oknodo
        rm -f $PIDFILE
    }
    
    do_status()
    {
        if [ -f $PIDFILE ]; then
            if kill -0 $(cat "$PIDFILE"); then
                echo "$NAME is running, PID is $(cat $PIDFILE)"
            else
                echo "$NAME process is dead, but pidfile exists"
            fi
        else
            echo "$NAME is not running"
        fi
    }
    
    case "$1" in
        start)
            echo "Starting $DESC" "$NAME"
            do_start
            ;;
        stop)
            echo "Stopping $DESC" "$NAME"
            do_stop
            ;;
        status)
            do_status
            ;;
        restart)
            echo "Restarting $DESC" "$NAME"
            do_stop
            do_start
            ;;
        *)
            echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
            exit 2
            ;;
    esac
    
    exit 0
    
  3. 後は条件分岐に書かれているコマンドに沿ってserviceを蹴れば動くようになる。止めたりするときはinit.dに定義したものを使う(init.dそのものは単にコマンド名で分岐処理しているだけ)
    sudo service <作成したファイル名> start
    

手順

前提としてSSDは端末に取り付けているものとする。

  1. 取り付けたディスクがあるかどうかを確認する
    sudo fdisk -l
    
    /dev/sdaとかになっているはずなので、あとは容量などのプロパティを見て確認
  2. パーティションを作る
    sudo fdisk /dev/sda
    
    1. pで確認
    2. nで新規パーティションを作成
    3. あとはエンター連打
  3. フォーマットする
    sudo mkfs.ext4 /dev/sda
    
  4. マウント先を作る
    sudo mkdir /mnt/sda1
    
  5. マウントする
    sudo mount /dev/sda /mnt/sda1
    
  6. 自動マウントの設定をする
    1. SSDのUUIDを取得
      sudo blkid
      
    2. fstabに定義を追加
      sudo nano /etc/fstab
      
      blkidで拾ったUUIDを記述し、以下の内容を追記する
      UUID=243a3867-xxxx-xxxx-xxxx-xxxxxxxx /mnt/sda1 ext4 defaults 0 0
  7. OSを再起動
  8. マウントされていることを確認
    df -T
    

おまけの増設シーン

サブ機にNAS機能を持たせたかったので、SSDを買って増設したシーン。

今回購入したのはSanDisk SATA III SDSSDA-2T00-J26だ。今時SATA?という感じだが、サブ機のNVMeスロットは既に埋まっているのだ。

20250316_221024601.JPG

サブ機は普段は部屋の片隅に棚の代わりに置いているのだが、久々に引き出したら埃まみれだった。

20250316_221947184.JPG

しかしフロントのフィルターが優秀で中にはそこまで埃が入っておらず掃除の手間は少なかった。

20250316_222010584.JPG
20250316_222313180.JPG

このPCケースはキューブ型で、全ての面が取り外せるようになっておりメンテナンス性がいい。

20250316_222924849.JPG

しかしここでSSDの固定にネジが必要なことに気づき、ヨドバシでネジを注文し、一回休み。

PCを戻すのが面倒だったのだが、そのままだとLAN線がルーターに届かなかったので応急処置でティッシュ箱を置いた。一時期袋ティッシュにしていたのだが簡易定規や孫の手の代わりにならないため箱に戻したのだが大正解だった。余談だがティッシュの空箱があると、部屋に入ってきたカメムシを捕まえて部屋の外に逃がすのにも便利だ。

20250316_224927454.JPG

翌日になりネジが届き再開。ヨドバシの商品写真だと2個入りに見えたので、今後も見据えて4つ買ったのだが、まさかの10個入だった…。

20250317_233755870.JPG

ネジを止めて完成。このケースはMiniITX用ケースなのだが2.5インチと3.5インチに両対応したドライブベイがあって便利だ。しかも、このベイも取り外せるためメンテナンス性がいい。

20250317_234550350.JPG
20250317_235529293.JPG

ティッシュ箱でどうにかしていたネットワーク機器群も無事に元の高さに戻り事なきを得た。

20250318_002800745.JPG

実はSSD増設前もNASとして使っており、メイン機からマウントしているのだが、オフラインの間はExplorerやファイル参照ダイアログ周りがしょっちゅうフリーズして不便だった。マイクロソフトはWindows 11にずっと存在するこの問題をいい加減何とかしてほしい。

あとがき

今はまだマウントしただけで権限設定とかをしておらず、NASとしてもアクセスできないため、また整備を続けていきたい。

このコマンドをcronとかで回し続けてれば行けそう

事前準備

Value-Domainのコンパネから登録対象のDNSレコードにaaaaレコードを足しておく。

コマンド

ipaddr=$(ip a | grep 'scope global temporary dynamic' | perl -ne '/inet6 ([^\/]+)/; print $1')
echo 'https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=<ドメイン>&p=<パスワード>&h=<ホスト名>&i='$ipaddr

凡例

項目
ドメイン example.comみたいなルートドメイン
パスワード Value-DomainのDDNSパスワード
ホスト名 sub.example.comのsubの部分

参考

投稿日:
OS::WindowsOS::Linux::Ubuntuソフトウェア::WSL

基本はこのコマンドを流せば行けるはず

sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo do-release-upgrade

トラブルシュート

「There is no development version of an LTS available.」というエラーが出る

sudo do-release-upgradeの実行時に-dオプションを外す

サービスをstop出来ないみたいなエラーが出る

自動起動していない場合、PowerShellなどからWSLを殺せば解決する

wsl --shutdown

サードパーティのリポジトリ周りでこける

コケてるリポジトリを消せばよい。以下は一例

ls -la /etc/apt/sources.list.d
sudo rm -Rf /etc/apt/sources.list.d/grafana.list*

「Some third party entries in your sources.list were disabled. You can re-enable them after the upgrade with the 'software-properties' tool or your package manager.」というエラーが出る

無視してよい

WSL上のUbuntuで動作するnginxでHTTPSに対応したサーバーを作る方法。実機でも同様の手順でいける

確認環境

Env Ver
nginx nginx/1.18.0 (Ubuntu)
mkcert v1.4.4
Ubuntu 20.04.6 LTS
Windows 11 22621.3880

手順

  1. Windows側にmkcertを入れる
  2. mkcertで証明書を作る
    • mkcert sandbox.test
  3. 以下のpemファイルが生成される
    • sandbox.test.pem
    • sandbox.test-key.pem
  4. 生成されたpemファイルを/etc/nginx/conf.d/ssl/に移動する
  5. /etc/nginx/conf.d/sandbox.test.confを作成し、以下のような記述をする

    server {
        listen       443 ssl;
        client_max_body_size 100m;
        server_name  sandbox.test;
    
        ssl_certificate     conf.d/ssl/sandbox.test+1.pem;
        ssl_certificate_key conf.d/ssl/sandbox.test+1-key.pem;
    
        access_log   /var/log/nginx/sandbox.access.log;
        error_log    /var/log/nginx/sandbox.error.log;
    
        # ファイルホスト用
        #  location / {
        #    root /usr/share/nginx/html/sandbox;
        #    index index.html;
        #    try_files $uri /index.html =404;
        #  }
    
        # APサーバーへのリバプロ用
        location ~ ^/.*$ {
            rewrite ^/.*$ / break;
            proxy_set_header X-Request-Path $request_uri;
            proxy_set_header X-Host $host;
            proxy_pass  http://127.0.0.1:9999;
        }
    
        # fastcgi用
        location ~ \.php$ {
            root  /usr/share/nginx/html/sandbox;
            fastcgi_pass unix:/run/php/php8.0-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }
    }
    
  6. nginxを再起動する
    • sudo service nginx restart

他の端末に証明書を撒く方法

mkcertのRoot CAをエクスポートして他の端末に突っ込めば、他の端末でもpemが流用できる