ラベル git の投稿を表示しています。 すべての投稿を表示
ラベル git の投稿を表示しています。 すべての投稿を表示

2023年2月16日木曜日

ホームサーバーの環境移行(3)

仮想化の検討

今後の可用性も考えて、サーバーに載せているサービスの仮想化やコンテナ化を考えてみる。
対象はなんだろう

  • samba
  • gogs
  • nextcloud
  • mydns/グローバルIP監視
  • ログインログアウト監視(Slack連携)
  • MariaDB
  • webmin

gogs

まずはgogs

現状

よかったメモしておいて
https://continue-to-challenge.blogspot.com/search?q=gogs

adeno@blackcube:/home/git$ systemctl status gogs
● gogs.service - Gogs (Go Git Service)
   Loaded: loaded (/etc/systemd/system/gogs.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2023-01-23 04:00:09 JST; 1h 47min ago
 Main PID: 2548 (gogs)
    Tasks: 8 (limit: 4915)
   CGroup: /system.slice/gogs.service
           └─2548 /home/git/gogs/gogs web

 1月 23 05:43:38 blackcube gogs[2548]: [Macaron] 2023-01-23 05:43:38: Started GET /admin/config for 192.168.1.37
 1月 23 05:43:38 blackcube gogs[2548]: [Macaron] 2023-01-23 05:43:38: Completed GET /admin/config 200 OK in 21.32905ms
 1月 23 05:43:38 blackcube gogs[2548]: [Macaron] 2023-01-23 05:43:38: Started GET /assets/font-awesome-4.6.3/fonts/fontawesome-webfont.woff2?
 1月 23 05:43:38 blackcube gogs[2548]: [Macaron] [Static] Serving /assets/font-awesome-4.6.3/fonts/fontawesome-webfont.woff2
 1月 23 05:43:38 blackcube gogs[2548]: [Macaron] 2023-01-23 05:43:38: Started GET /img/favicon.png for 192.168.1.37
 1月 23 05:43:38 blackcube gogs[2548]: [Macaron] [Static] Serving /img/favicon.png
 1月 23 05:43:38 blackcube gogs[2548]: [Macaron] 2023-01-23 05:43:38: Completed GET /img/favicon.png 200 OK in 2.466123ms
 1月 23 05:43:38 blackcube gogs[2548]: [Macaron] 2023-01-23 05:43:38: Completed GET /assets/font-awesome-4.6.3/fonts/fontawesome-webfont.woff
 1月 23 05:43:40 blackcube gogs[2548]: [Macaron] 2023-01-23 05:43:40: Started GET /admin/repos for 192.168.1.37
 1月 23 05:43:40 blackcube gogs[2548]: [Macaron] 2023-01-23 05:43:40: Completed GET /admin/repos 200 OK in 107.448955ms

たぶん、ここを参考にservice化したのだろう
https://github.com/gogs/gogs/blob/main/scripts/systemd/gogs.service

adeno@blackcube:/home/git$ cat /etc/systemd/system/gogs.service
[Unit]
Description=Gogs (Go Git Service)
After=syslog.target
After=network.target
After=mysqld.service

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/gogs
ExecStart=/home/git/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git

[Install]
WantedBy=multi-user.target

dockerでやってみる

https://github.com/gogs/gogs/tree/main/docker

sudo docker pull gogs/gogs
mkdir -p /mnt/workarea/gogs
sudo docker run --name=gogs -p 10022:22 -p 3000:3000 -v /mnt/workarea/gogs:/data gogs/gogs

久しぶりのdockerで使い方忘れてる
あと、gogsのデータの引っ越しはどうやるんだっけ?

adeno@blackcore:~$ sudo docker ps -a
[sudo] adeno のパスワード:          
CONTAINER ID   IMAGE       COMMAND                  CREATED      STATUS                  PORTS     NAMES
5c8dba490d7e   gogs/gogs   "/app/gogs/docker/st…"   9 days ago   Exited (0) 8 days ago             gogs

データの移行

https://github.com/gogs/gogs/discussions/6876

./gogs backup

で、書き出す。gogs-backup-20230123060827.zipが生成された。
/mnt/workarea/gogsに保存すると、docker内では/dataからアクセスできる。

adeno@blackcore:~$ sudo docker exec -it gogs /bin/bash
bash-5.1# ls
data    docker  gogs    log
bash-5.1# ./gogs -v
Gogs version 0.13.0+dev
bash-5.1# ls data/
gogs-backup-20230123060827.zip  gogs.db                         sessions
bash-5.1# 
bash-5.1# ./gogs restore --from="data/gogs-backup-20230123060827.zip" 
2023/01/31 16:28:35 [ INFO] Restoring backup from: data/gogs-backup-20230123060827.zip
2023/01/31 16:28:38 [FATAL] [gogs.io/gogs/gogs.go:40 main()] Failed to start application: init configuration: user configured to run Gogs is "git", but the current user is "root"
bash-5.1# 

カレントユーザーがrootになっているので、ユーザーgitで実行する

docker-compose

なんか難しそうなので、docker-composeを使ってみる

sudo apt install docker-compose

version: '3'
services:
  gogs:
    image: gogs/gogs:latest
    container_name: gogs
    restart: always
    ports:
      - 3000:3000
    volumes:
      - ./data:/data
    links:
      - mariadb:db

  mariadb:
    image: mariadb:latest
    restart: always
    ports:
      - 13306:3306
    environment:
      - MARIADB_ROOT_PASSWORD=************
      - MARIADB_DATABASE=gogs
      - MARIADB_USER=gogs
      - MARIADB_PASSWORD=************

    volumes:
      - ./mariadb/data:/var/lib/mysql
      - ./mariadb/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./mariadb/sql:/docker-entrypoint-initdb.d

sudo docker-compose up -d
sudo docker-compose ps
sudo docker-compose stop

https://qiita.com/wasanx25/items/d47caf37b79e855af95f
https://mebee.info/2020/08/05/post-15924/

データの引っ越し

  • データベース
  • gogs-repositories
  • config
データベース
mysqldump -u git -p gogs_git > gogs.sql.bak
mysql -u gogs -p gogs --port=13306 < /home/adeno/gogs.sql.bak 
gogs-repositories

data/gogs/data/gogs-repositoriesにコピー

config
[repository]
ROOT = /app/gogs/data/gogs-repositories

結局

gogs backup

を使わなかった。

初期設定でのデーターベース設定は以下を参考にした。
https://mebee.info/2020/08/05/post-15924/

ホスト名をgogs_mariadb_1にする

adeno@blackcore:/mnt/backuparea/gogs$ sudo  docker-compose ps
     Name                   Command                  State                      Ports               
----------------------------------------------------------------------------------------------------
gogs             /app/gogs/docker/start.sh  ...   Up (healthy)   22/tcp, 0.0.0.0:3000-              
                                                                 >3000/tcp,:::3000->3000/tcp        
gogs_mariadb_1   docker-entrypoint.sh mariadbd    Up             0.0.0.0:13306->3306/tcp,:::13306-  
                                                                 >3306/tcp                          

rootで実行される

気になる。
rootで実行するし、作成されるファイルも所有者はroot
でもコンテナ内はgitになっている。

adeno@blackcore:/mnt/backuparea/gogs$ ls -l data/gogs/data/
合計 12
drwxr-xr-x 6 root root 4096  2月  6 12:34 gogs
drwxr-xr-x 7 root root 4096  2月  6 12:34 gogs-repositories
drwx------ 3 root root 4096  2月  6 12:34 sessions
sudo docker exec -it gogs /bin/bash
0f3d4c05ae00:/app/gogs# ls -l data/
total 12
drwxrwxr-x    6 git      git           4096 Feb  5 15:59 gogs
drwxr-xr-x    7 git      git           4096 Feb  5 15:59 gogs-repositories
drwx------    4 git      git           4096 Feb  6 03:35 sessions

https://qiita.com/yitakura731/items/36a2ba117ccbc8792aa7

気になる。

なにか方法があるのか

  • rootless
  • rootless + SELinux
  • Podman

https://e-penguiner.com/rootless-docker-for-nonroot/
https://matsuand.github.io/docs.docker.jp.onthefly/engine/security/rootless/
https://matsuand.github.io/docs.docker.jp.onthefly/engine/security/userns-remap/
https://docs.docker.jp/desktop/install/linux-install.html#linux-install-file-sharing

docker rootlessを試してみる

いろいろ試行錯誤したのを一旦整理

まずは普通のインストール

https://docs.docker.com/engine/install/ubuntu/

以下の手順のみLinux Mintでは異なるので注意

3.Use the following command to set up the repository:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ lsb_release -cs
vanessa

UbuntuのOSバージョンを表示させるにはUBUNTU_CODENAMEが必要

$ cat /etc/os-release 
NAME="Linux Mint"
VERSION="21 (Vanessa)"
ID=linuxmint
ID_LIKE="ubuntu debian"
PRETTY_NAME="Linux Mint 21"
VERSION_ID="21"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=vanessa
UBUNTU_CODENAME=jammy

なので

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

としちゃう。

動作確認

これで、普通モードの動作確認ができる

sudo docker run hello-world

rootlessモード

ユーザーを作る

  • ユーザー:gogs_docker 1003
  • グループ:gogs-rtls-docker 10099

サブ UID/サブ GIDの設定

$ cat /etc/subuid
gogs_docker:100000:65536

$ cat /etc/subgid
gogs_docker:100000:65536

インストール

https://matsuand.github.io/docs.docker.jp.onthefly/engine/security/rootless/

gogs_docker@blackcore:~$ dockerd-rootless-setuptool.sh install
[INFO] systemd not detected, dockerd-rootless.sh needs to be started manually:

PATH=/home/gogs_docker/bin:/sbin:/usr/sbin:$PATH dockerd-rootless.sh 

[INFO] Creating CLI context "rootless"
Successfully created context "rootless"
[INFO] Use CLI context "rootless"
Current context is now "rootless"
Warning: DOCKER_HOST environment variable overrides the active context. To use "rootless", either set the global --context flag, or unset DOCKER_HOST environment variable.

[INFO] Make sure the following environment variables are set (or add them to ~/.bashrc):

# WARNING: systemd not found. You have to remove XDG_RUNTIME_DIR manually on every logout.
export XDG_RUNTIME_DIR=/home/gogs_docker/.docker/run
export PATH=/home/gogs_docker/bin:$PATH
Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///home/gogs_docker/.docker/run/docker.sock

.bashrcに書くのを忘れない

export XDG_RUNTIME_DIR=/home/gogs_docker/.docker/run
export PATH=/home/gogs_docker/bin:$PATH

動作確認

gogs_docker@blackcore:~$ systemctl --user start docker
Failed to connect to bus: そのようなファイルやディレクトリはありません

gogs_docker@blackcore:~$ systemctl --user status
Failed to connect to bus: そのようなファイルやディレクトリはありません

あれ?

XDG_RUNTIME_DIR=/run/user/$(id -u gogs_docker) systemctl --user status
● blackcore
    State: degraded
     Jobs: 0 queued
   Failed: 2 units
    Since: Sun 2023-02-12 01:52:28 JST; 9h ago
   CGroup: /user.slice/user-1003.slice/user@1003.service
<<略>>

XDG_RUNTIME_DIR=/run/user/$(id -u gogs_docker) systemctl --user start docker
Failed to start docker.service: Unit docker.service not found.

ほう。docker.serviceがないのか・・・。

docker.serviceを手動で作る

仕方がないので
.config/systemd/user/docker.service
を手動で作成した。

[Unit]
Description=Docker Application Container Engine (Rootless)
Documentation=https://docs.docker.com/go/rootless/

[Service]
Environment=PATH=/home/gogs_docker/bin:/sbin:/usr/sbin:/home/gogs_docker/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ExecStart=/home/gogs_docker/bin/dockerd-rootless.sh 
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
Type=notify
NotifyAccess=all
KillMode=mixed

[Install]
WantedBy=default.target

今度こそ
まずはsudoできるユーザーで確認

adeno@blackcore:~$ sudo -u gogs_docker XDG_RUNTIME_DIR=/run/user/$(id -u gogs_docker) systemctl --user status
[sudo] adeno のパスワード:          
● blackcore
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Sun 2023-02-12 12:56:38 JST; 8h ago
   CGroup: /user.slice/user-1003.slice/user@1003.service
           ├─session.slice 
           │ └─pipewire.service 
           │   └─1188 /usr/bin/pipewire
           ├─app.slice 
           │ ├─docker.service 
           │ │ ├─16301 rootlesskit --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin>
           │ │ ├─16310 /proc/self/exe --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=buil>
           │ │ ├─16328 slirp4netns --mtu 65520 -r 3 --disable-host-loopback --enable-sandbox --enable-seccomp 16310 tap0
           │ │ ├─16336 dockerd
           │ │ └─16363 containerd --config /run/user/1003/docker/containerd/containerd.toml --log-level info
           │ └─dbus.service 
           │   └─1234 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
           └─init.scope 
             ├─1140 /lib/systemd/systemd --user
             └─1149 (sd-pam)

sudo -u gogs_docker XDG_RUNTIME_DIR=/run/user/$(id -u gogs_docker) systemctl --user start docker

よし。
次に、dockerを実行したい一般ユーザーで確認

XDG_RUNTIME_DIR=/run/user/$(id -u gogs_docker) systemctl --user status
● blackcore
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Sun 2023-02-12 12:56:38 JST; 8h ago
   CGroup: /user.slice/user-1003.slice/user@1003.service
           ├─session.slice 
           │ └─pipewire.service 
           │   └─1188 /usr/bin/pipewire
           ├─app.slice 
           │ ├─docker.service 
           │ │ ├─16301 rootlesskit --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin>
           │ │ ├─16310 /proc/self/exe --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=buil>
           │ │ ├─16328 slirp4netns --mtu 65520 -r 3 --disable-host-loopback --enable-sandbox --enable-seccomp 16310 tap0
           │ │ ├─16336 dockerd
           │ │ └─16363 containerd --config /run/user/1003/docker/containerd/containerd.toml --log-level info
           │ └─dbus.service 
           │   └─1234 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
           └─init.scope 
             ├─1140 /lib/systemd/systemd --user
             └─1149 (sd-pam)

良いね。状態取れた。
サンプルを実行してみる

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

よし。

gogs_docker@blackcore:/mnt/backuparea/gogs_rootless$ docker-compose up
gogs_rootless_mariadb_1 is up-to-date
Starting gogs ... done
Attaching to gogs_rootless_mariadb_1, gogs
<<略>>

OK gogs動いた!

自動起動

 systemctl --user enable docker
 sudo loginctl enable-linger $(whoami)
  • メモ
XDG_RUNTIME_DIR=/run/user/$(id -u gogs_docker) systemctl --user enable docker
Created symlink /home/gogs_docker/.config/systemd/user/default.target.wants/docker.service → /home/gogs_docker/.config/systemd/user/docker.service.

が、再起動後にPSで実行中のコンテナが見れなくなってしまった。

gogs_docker@blackcore:/mnt/backuparea/gogs_rootless$ docker ps -a
Cannot connect to the Docker daemon at unix:///home/gogs_docker/.docker/run/docker.sock. Is the docker daemon running?

sockの場所を明示すると動いた

docker -H unix:///run/user/1003/docker.sock ps
CONTAINER ID   IMAGE              COMMAND                   CREATED       STATUS                 PORTS                                               NAMES
c6a2687906f9   gogs/gogs:latest   "/app/gogs/docker/st…"   3 hours ago   Up 3 hours (healthy)   22/tcp, 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   gogs
2b74ddf55d44   mariadb:latest     "docker-entrypoint.s…"   3 hours ago   Up 3 hours             0.0.0.0:13306->3306/tcp, :::13306->3306/tcp         gogs_rootless_mariadb_1
$ docker-compose ps
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 394, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib/python3.10/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.10/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3/dist-packages/docker/transport/unixconn.py", line 30, in connect
    sock.connect(self.unix_socket)
FileNotFoundError: [Errno 2] No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 755, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 532, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3/dist-packages/six.py", line 718, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 394, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib/python3.10/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.10/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3/dist-packages/docker/transport/unixconn.py", line 30, in connect
    sock.connect(self.unix_socket)
urllib3.exceptions.ProtocolError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 214, in _retrieve_server_version
    return self.version(api_version=False)["ApiVersion"]
  File "/usr/lib/python3/dist-packages/docker/api/daemon.py", line 181, in version
    return self._result(self._get(url), json=True)
  File "/usr/lib/python3/dist-packages/docker/utils/decorators.py", line 46, in inner
    return f(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 237, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 555, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 200, in perform_command
    project = project_from_options('.', options)
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 60, in project_from_options
    return get_project(
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 152, in get_project
    client = get_client(
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 41, in get_client
    client = docker_client(
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 170, in docker_client
    client = APIClient(use_ssh_client=not use_paramiko_ssh, **kwargs)
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 197, in __init__
    self._version = self._retrieve_server_version()
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 221, in _retrieve_server_version
    raise DockerException(
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 153, in apport_excepthook
    with os.fdopen(os.open(pr_filename,
FileNotFoundError: [Errno 2] No such file or directory: '/var/crash/_usr_bin_docker-compose.1003.crash'

Original exception was:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 394, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib/python3.10/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.10/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3/dist-packages/docker/transport/unixconn.py", line 30, in connect
    sock.connect(self.unix_socket)
FileNotFoundError: [Errno 2] No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 755, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 532, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3/dist-packages/six.py", line 718, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 394, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib/python3.10/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.10/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.10/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3/dist-packages/docker/transport/unixconn.py", line 30, in connect
    sock.connect(self.unix_socket)
urllib3.exceptions.ProtocolError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 214, in _retrieve_server_version
    return self.version(api_version=False)["ApiVersion"]
  File "/usr/lib/python3/dist-packages/docker/api/daemon.py", line 181, in version
    return self._result(self._get(url), json=True)
  File "/usr/lib/python3/dist-packages/docker/utils/decorators.py", line 46, in inner
    return f(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 237, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 555, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 200, in perform_command
    project = project_from_options('.', options)
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 60, in project_from_options
    return get_project(
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 152, in get_project
    client = get_client(
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 41, in get_client
    client = docker_client(
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 170, in docker_client
    client = APIClient(use_ssh_client=not use_paramiko_ssh, **kwargs)
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 197, in __init__
    self._version = self._retrieve_server_version()
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 221, in _retrieve_server_version
    raise DockerException(
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))

こちらも同様

docker-compose -H unix:///run/user/1003/docker.sock ps
         Name                        Command                  State                            Ports                      
--------------------------------------------------------------------------------------------------------------------------
gogs                      /app/gogs/docker/start.sh  ...   Up (healthy)   22/tcp, 0.0.0.0:3000->3000/tcp,:::3000->3000/tcp
gogs_rootless_mariadb_1   docker-entrypoint.sh mariadbd    Up             0.0.0.0:13306->3306/tcp,:::13306->3306/tcp      

.bashrcに書いた

export XDG_RUNTIME_DIR=/home/gogs_docker/.docker/run
が余計だったのかな・・・。

これをコメントアウトして試してみる

これで

export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
docker-compose ps
         Name                        Command                  State                            Ports                      
--------------------------------------------------------------------------------------------------------------------------
gogs                      /app/gogs/docker/start.sh  ...   Up (healthy)   22/tcp, 0.0.0.0:3000->3000/tcp,:::3000->3000/tcp
gogs_rootless_mariadb_1   docker-entrypoint.sh mariadbd    Up             0.0.0.0:13306->3306/tcp,:::13306->3306/tcp      

今度こそ大丈夫そう。

改めてデータの引っ越しをする。

データの引っ越し

  • データベース
  • gogs-repositories
  • config
データベース
mysqldump -u git -p gogs_git > gogs.sql.bak
mysql -u gogs -p gogs --port=13306 < /home/adeno/gogs.sql.bak 
gogs-repositories

data/gogs/data/gogs-repositoriesにコピー
データの所有者を100999(コンテナ内のgit(10000)相当)にしておく

config
[repository]
ROOT = /app/gogs/data/gogs-repositories

ホスト名をgogs_mariadb_1にする

これでOKOK

更新ができない

なぜか、もともとの/home/git/gogs-repositoriesを参照しようとする。
困ったので、最終手段でシンボリックリンクを張った。

gogs_docker@blackcore:/mnt/backuparea/gogs$ docker exec -it gogs /bin/bash

c6a2687906f9:/home/git/gogs-repositories# mkdir -p /home/git/gogs/gogs
6a2687906f9:/home/git/gogs-repositories# cd /home/git/gogs/gogs/
c6a2687906f9:/home/git/gogs/gogs# ln -s /app/gogs/data/gogs-repositories/gogs-repositories gogs-repositories
c6a2687906f9:/home/git/gogs/gogs# ls -l
total 0
lrwxrwxrwx    1 root     root            50 Feb 15 16:18 gogs-repositories -> /app/gogs/data/gogs-repositories/gogs-repositories

2021年7月25日日曜日

ChromeBookを使ってみる

入手したのは、これ
https://www.asus.com/jp/Laptops/For-Home/Chromebook/ASUS-Chromebook-Detachable-CM3-CM3000/

本当は、この機会にiPadでも良かったんだけど、自分の使用用途を考えたら、こっちのほうがいいような気がした。
物書きしたり、サーバーに接続したり、pdf閲覧して手書きするくらい。
なので、2in1とペン入力が標準でついているCM3が丁度いいと思った。

気づいたら、身の回りものがASUSになっていく

環境構築をメモがてら

セットアップ

googleのアカウントが必要。
特に、ハマるところはない。

マイクラウド環境(NextCloud)への接続

nextcloudアプリと、カレンダー同期用にopensyncを入れた。
スマホのときと変わらず。違和感なし。
大きい画面でカレンダー見れたり。とても便利。

物書き・手書きとして

squidをインストールしてみた。
手書きメモは、絵を書くわけではないので筆圧感知を無効にした。

linux仮想環境

これも試してみたかったやつ。可能性が広がるね。

サーバー接続用

スマホのときはconnecBotを使用していたけど
この環境ではどうしようか。

結果的にはconnectBotを使わなくてもやりたいことができた。

linuxシェルから

ssh -L 3000:localhost:3000 username@servername -p port

で、linuxからもchromeのブラウザからもlocalhost:3000にアクセスできた!
これはとても便利だ。

VS Code

この手順の通り
https://code.visualstudio.com/blogs/2020/12/03/chromebook-get-started

ダウンロードするときに、ARM64のdebパッケージを選択しないとハマる。

日本語化はコマンドパレットから「Configure Display Language」
日本語入力は以下を参考にした
https://gotoblog.org/chromebook-vscode-japanese/

エクステンション

とりあえず

  • MPE Markdown Pereview Enhanced
  • Paste Image

あとは、使い続けて試行錯誤していこう。

git

gitとgit-guiをインストール
こちらもふつーに使えた。嬉しい。


その他

誰か指摘している方がいたが、音量の最小でも大きい。
特にヘッドホン使用時もう少し小さくしたいことがある。
多分なにかやり方あるんだろうけど、まだわからない。

2020年3月19日木曜日

メインPCの環境移行-1

夜中、朦朧としながらアップデートやらなんやらをやっていたらXWindow?が起動できなくなった。
さらに、無線LANルーターも調子が悪く、IPv6で繋がらなかったり、通信ができない状態になってしまった。
ルーターの方は再起動でだましだまし使っていたけど、毎日再起動しないといけない状況になったので、諦めて新調することにした。
ノートパソコンも誤って落としちゃうし、最近ついてない?不注意が続いている。

スペック

今まで使っていたPC

No カテゴリ メーカー 名称 備考
1 CPU Intel i7-4770 3.40GHz 第4世代(Haswell)2013年ごろ
2 M/B ASUS B85M-G 2013年ごろ
3 メモリ 16GB
4 グラボ - オンボード
5-1 SSD TOSHIBA THNSNH256 256GB
5-2 SSD KingSpec P3-256 256GB
6 HDD WD WD10EADS 1TB
7 ケース IN WIN IW-CE685/300H シンプルで気に入っている
8 電源 - ケースに付属 300W
9-1 モニタ MITSUBISHI RDT223WM WSXGA 2008年ごろ
9-2 モニタ iiyama ProLite XB2783HSU FullHD
10 ODD Pioneer BDR-209
最近立ち上げたような気がしたけど、実は7年くらい前なんだね。
液晶に関しては12年前・・・よく持ってるわ。
そりゃ愛着も湧くわ。
ハードスペックの確認
https://qiita.com/DaisukeMiyamoto/items/98ef077ddf44b5727c29

新しい環境

何かに使うかもしれないので一覧にしておこう
No カテゴリ メーカー 名称 備考
1 CPU AMD Ryzen 5 3600
2 M/B ASUS TUF B450M-PLUS GAMING MicroATX
3 メモリ Corsair CMK32GX4M2B3000C15 32GB
4 グラボ MSI Radeon RX 570 ARMOR 8G J
5 SSD Crucial CT500MX500SSD1 500GB x2個
6 HDD WD WD4005FZBX WD Black!
7 ケース COOLER MASTER MasterBox NR400 MCB-NR400-KG5N-S00
8 電源 玄人志向 KRPW-N600W/85+ 600W
9-1 モニタ IODATA GigaCrysta EX-LDGCQ271DB WQHD
9-2 モニタ iiyama ProLite XB2783HSU FullHD
10 ODD Pioneer BDR-209
久しぶりのAMDで嬉しい。
これで5年くらい戦えないかな・・・。

CPUこれで良かった?

最初は、グラフィック内蔵の3400Gで、グラボなしと思っていたけど、いろいろ構成を調べていたら気になるページを見つけた。
3400G + TUF B450M-PLUSで、USBが使えない!?
https://picico.net/computer/b450m-ryzen3400g/
えーやだなー。
M/B変えるか?と思ったけど、身の回りのものがASUS化が進行しているので、ASUSにしたかった。なので、3600にして、グラボもつことになった。

ゲーミングPCなの?

PCケースとかM/BとかLEDピカピカ系が多いけど、ちょっと馴染めなかったので、できるだけ落ち着いたものにした。
M/Bにはゲーミングって書いてあるけど
基板も黒で統一されてかっこいいね。
ケースの側面がガラスなのもわかるわ。
マザボのRGBLEDは、初期設定では電源OFF時にもゆっくり点滅するようになっていたけど
BIOSの詳細設定で、電源ON時のみにできたので満足!もちろん点滅しないようにもできる。いいね。

メモリ

相性とかで悩むのも面倒なので、動作確認ずみのやつにした。
https://www.asus.com/jp/Motherboards/TUF-B450M-PLUS-GAMING/HelpDesk_QVL/

モニタ

最初、ViewSonicやJapannextの安いやつで、4Kとかありかなーと思ったけど、自分に合わなかったときのショックが大きいような気がしたので、(自分的に)ワンランク上のGigaCrysta EX-LDGCQ271DBにした。その代わりWQHDだけどね。

良かった点

  • ドット抜けなさそう
  • 設定を特に変えなくても大丈夫そうな色味
  • Displayportケーブル付属がありがたい
  • シンプルなデザイン
  • 高さ調整できる!マルチディスプレイではありがたい

悪かった点

  • 隣のモニタもこれにしたくなる
今の自分には、このサイズが一番しっくり来た。とてもいい感じ。

SDDとHDD

OSとデータを分けたかったから500GBを2個。
それに加えて、バックアップ用に4TBのHDD。WD Black。
これは何かに使ってたやつ。なんだっけ?
コリコリうるさいから、外すかも。

環境の移行(OSのインストール)

もともとMint18系を使っていて、気軽に19にしようとしていたことを思いだした。
今回は19.3 Cinnamonにした、GPU積んでるし。

インストール

昔と違って、CDやDVDでインストールディスク作らなくて良いんだね。USBメモリをブータブルメディアとして使う。
isoをもってきて
sudo mintstick -m iso
イメージ: /linuxmint-19.3-cinnamon-64bit.iso
USB メモリ: /dev/sda
/linuxmint-19.3-cinnamon-64bit.iso から /dev/sda にコピーを開始しています
イメージの書き込みに成功しました。
でOK

設定

今のところ、マルチディスプレイの設定くらい。

GPUのベンチマーク

せっかくGPU積んだので、ベンチマーク取ってみた。
https://benchmark.unigine.com/heaven?lang=en
すると、、、

これって、低いよね多分。。。GPU modelがUnknownになっているし

AMDのグラフィックドライバ

AMDのグラフィックドライバを入れてみる
https://www.amd.com/ja/support/previous-drivers/graphics/radeon-500-series/radeon-rx-500-series/radeon-rx-570
https://amdgpu-install.readthedocs.io/en/latest/install-installing.html
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0471
手順どおりやって
sudo ./amdgpu-pro-install
deb [ trusted=yes ] file:/var/opt/amdgpu-pro-local/ ./
((中略))
vulkan-amdgpu-pro:i386 はすでに最新バージョン (19.30-934563) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
WARNING: amdgpu dkms failed for running kernel
あれ、なんか失敗している。
https://askubuntu.com/questions/1040474/warning-amdgpu-dkms-failed-for-running-kernel-on-both-16-04-18-04
https://unix.stackexchange.com/questions/501267/how-to-fix-amdgpu-dkms-failed-for-running-kernel-when-installing-amd-gpu-drive
linux-headersがいるの?
uname -a
Linux drakorange 5.3.0-40-generic #32~18.04.1-Ubuntu SMP Mon Feb 3 14:05:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Linux 5.3.0-40で、Ubuntuの18.04.1ベースなのね。
sudo apt-get install linux-image-5.3.0-40-generic linux-modules-extra-5.3.0-40-generic linux-headers-5.3.0-40-generic
状況変わらないねー。
3/16時点で、最新は
Radeon™ Software for Linux® Driver for Ubuntu 18.04.3
Revision Number 19.50
はこちらのバージョンよりも新しい
少し前で試してみる。
Radeon™ Software for Linux® Driver for Ubuntu 18.04.1
Revision Number 18.50
これも試したけど変わらず。
さらに探してたら
https://askubuntu.com/questions/1212256/warning-amdgpu-dkms-failed-for-running-kernel-solved
Linux 5.x系では対応してないの?
うーん。今そんなに困っていないから、しばらく様子見しようかな。

ソフト

今、無いと困るものを書き出してみた
No 名称 用途 状況
1 git バージョン管理、いろいろなものを管理してもらっている
2 VScode エディタ、プログラムからブロクまで
3 VirtualBox 開発環境やWindows
4 FreeCAD 次回
5 3Dプリンタ用ソフト 次回
6 Dropbox, Nextcloud バックアップ・データ共有 今はブラウザでいいや
7 Openwrt開発環境 趣味 次回
8 kdenlive 動画編集、子供の成長記録的な、他に使いやすいものがあればそれでもいい

git、gitk

これが無いと始まらないってわけじゃないけど
sudo apt install git gitk
試しに、ブログのリポジトリをもってくる
git clone http://192.168.1.25:3000/C2Cblog.git

VScode

何かと使うからね。
オフィシャルサイトからdebパッケージを持ってきてインストール
エクステンション何入れていたっけか?
markdownのやつか
http://continue-to-challenge.blogspot.com/2018/11/vscodemarkdown_28.html
とりあえずはこれで、OKとする。

VirtualBox

インストール

公式の手順どおり
/etc/apt/sources.list
deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian bionic contrib
それから
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt install virtualbox-6.1
あとは、エクステンションを導入する

環境の引っ越し-export

さて、問題はどうやってデータを引っ越すか
もとのPCにはXwindowで入れないからGUIのvboxマネージャー使えない
だったらCUIがあるじゃないか
$ vboxmanage list vms
"Win10" {7fcc3555-xxxx-xxxx-xxxx-6613f22ff28d}
"Win7" {a0758424-xxx-xxxx-xxxx-d075ecb8daa5}
"Win10 のクローン" {8fb419a2-xxx-xxxx-xxxx-98e0392d2209}
試しにexportしてみる
$ vboxmanage export "Win10" -o win10.ova
0%...
すべて終わるのに1時間くらいかかった。約60GB

環境の引っ越し-import

ovaファイルを新しいPCに持ってきて、テストを行ってみる
$ vboxmanage import --dry-run win10.ova
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interpreting /media/****/52c3dc1a-****-****-****-759c749d1e19/win10.ova...
OK.
Disks:
  vmdisk2 42949672960 -1 http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized win10-disk002.vmdk -1 -1 

Virtual system 0:
 0: Suggested OS type: "Windows10_64"
    (change with "--vsys 0 --ostype <type>"; use "list ostypes" to list all possible values)
 1: Suggested VM name "Win10"
    (change with "--vsys 0 --vmname <name>")
 2: Suggested VM group "/"
    (change with "--vsys 0 --group <group>")
 3: Suggested VM settings file name "/home/****/VirtualBox VMs/Win10/Win10.vbox"
    (change with "--vsys 0 --settingsfile <filename>")
 4: Suggested VM base folder "/home/****/VirtualBox VMs"
    (change with "--vsys 0 --basefolder <path>")
 5: Number of CPUs: 4
    (change with "--vsys 0 --cpus <n>")
 6: Guest memory: 2048 MB
    (change with "--vsys 0 --memory <MB>")
 7: Sound card (appliance expects "", can change on import)
    (disable with "--vsys 0 --unit 7 --ignore")
 8: USB controller
    (disable with "--vsys 0 --unit 8 --ignore")
 9: Network adapter: orig NAT, config 3, extra slot=0;type=NAT
10: CD-ROM
    (disable with "--vsys 0 --unit 10 --ignore")
11: SATA controller, type AHCI
    (disable with "--vsys 0 --unit 11 --ignore")
12: Hard disk image: source image=win10-disk002.vmdk, target path=win10-disk002.vmdk, controller=11;channel=0
    (change target path with "--vsys 0 --unit 12 --disk path";
    disable with "--vsys 0 --unit 12 --ignore")
[(3)VM settings file name]と[(4)VM base folder]を変更したい
--vsys 0 --settingsfile "/home/****/work/VirtualBox VMs/Win10/Win10.vbox"
--vsys 0 --basefolder "/home/****/work/VirtualBox VMs"
実行結果は省略
大丈夫そうなので、–dry-runを外して実行する。

環境の引っ越し-Virtualboxマネージャー

Virtualboxを起動してみると


あれ、起動できない。
原因は
  • グラフィックスコントローラーがVBoxSVGAになっていない
  • ハードウエア仮想化が有効にできない
    らしい「ハードウエア仮想化」ってBIOSの設定か・・・。

ようやく起動したら、windowsさんがハードウエアが大幅に変わったからライセンス認証ができないと・・・。
インストールメディアひっぱり出してきて、再度プロダクトキー入力したら認証してくれた。
参考
https://bablovia.hatenablog.com/entry/2019/10/01/223852

kdenlive

切り貼りしかしないから、他のソフトでもいいような気がしているけど、環境以降ということで
 apt install kdenlive
で実行すると


となにやら無いよ的なエラーが・・・。
apt install frei0r-plugins dvdauthor
これで起動できた。
GPUアクセラレーションとかはこれから。
今日はここまで

2019年8月2日金曜日

バックアップについて

12月頃にHOMEサーバーの環境を移行してから、バックアップが手薄になっていた。
https://continue-to-challenge.blogspot.com/2018/10/nextcloud.html
https://continue-to-challenge.blogspot.com/2018/12/gogs.html
今回はせめて再構築が用意になるように外付けHDDにバックアップを行うことにした。
対象
  • nextcloud
  • gogs
  • redmine
nextcloudには、家族の写真とかがあるので特に大事。

バックアップ

nextcloud

ほぼ先人と同じ
https://docs.nextcloud.com/server/15/admin_manual/maintenance/backup.html
https://denor.jp/nextcloudサーバのデータ自動バックアップ設定-snap版
https://takuya-1st.hatenablog.jp/entry/2018/11/20/020000
#!/bin/bash
NCPATH="/mnt/***/www/html/nextcloud"
NCDATA_PATH="/mnt/***/nextcloud/data"
TARGET="/mnt/usbhdd/nextcloud_backup"

echo start at `date`

echo "(STEP1)HDD spin-up"
sdparm -r --command=start /dev/sdd

echo "(STEP2)Maintenance Mode [ ON ]"
sudo -u www-data php ${NCPATH}/occ maintenance:mode --on

echo "(STEP3)Backup Config"
rsync -vAax ${NCPATH} ${TARGET}

echo "(STEP4)Backup Data"
rsync -vAax ${NCDATA_PATH} ${TARGET}

echo "(STEP5)Backup Database"
mysqldump --single-transaction -h localhost -u nextcloud -p****** nextcloud > ${TARGET}/nextcloud-sqlbkp.bak

echo "(STEP6)Maintenance Mode [ OFF ]"
sudo -u www-data php ${NCPATH}/occ maintenance:mode --off

echo "(STEP7)HDD spin-down"
sdparm -r --command=stop /dev/sdd

echo end at `date`

省電力化のためにスピンダウン入れてみたけど、効果は未知数。
smartで起動しちゃうみたいだし・・・。

gogs

大体ここの内容と同じ
https://gogs.io/docs/upgrade/upgrade_from_binary
#!/bin/bash
GGSPATH="/***/git/gogs"
GGSRPPATH="/***/git/gogs-repositories"
TARGET="/mnt/usbhdd/gogs_backup"

echo start at `date`

echo "(STEP1)gogs [ STOP ]"
systemctl stop gogs

echo "(STEP2)Backup Custom"
rsync -vAax ${GGSPATH}/custom ${TARGET}

echo "(STEP3)Backup Data"
rsync -vAax ${GGSPATH}/data ${TARGET}

echo "(STEP4)Backup Log"
rsync -vAax ${GGSPATH}/log ${TARGET}

echo "(STEP5)Backup Database"
mysqldump --single-transaction -h localhost -u gogs -p****** gogs_git  > ${TARGET}/gogs-sqlbkp.bak

echo "(STEP6)Backup Repository"
rsync -vAax ${GGSRPPATH} ${TARGET}

echo "(STEP7)gogs [ START ]"
systemctl start gogs

#echo "(STEP7)HDD spin-down"
#sdparm -r --command=stop /dev/sdd
echo end at `date`

redmine

本体はdocker、データベースはローカルのMariaDBを使用している。
https://continue-to-challenge.blogspot.com/2019/07/redmine.html
バックアップの方法
https://qiita.com/mikoski01/items/7d71ef7d167a6b78219a
http://redmine.jp/faq/system_management/backup/
#!/bin/bash
RMPATH="/srv/docker/redmine/redmine/files"
TARGET="/mnt/usbhdd/redmine_backup"

echo start at `date`

echo "(STEP1)redmine [ STOP ]"
docker stop redmine

echo "(STEP2)Backup Data"
rsync -vAax ${RMPATH} ${TARGET}

echo "(STEP3)Backup Database"
mysqldump --single-transaction -h localhost -u redmine -p****** redmine  > ${TARGET}/redmine-sqlbkp.bak

echo "(STEP4)redmine [ START ]"
docker start redmine

リストア

gogsの復元

ほぼ、この前の環境構築と同じ
https://continue-to-challenge.blogspot.com/2018/12/gogs.html
今回はテストとしてNanoPiに環境構築してみた。
  1. gogsインストールして
  2. MariaDBにデータベース作成
  3. バックアップからデータリストア
  4. 起動
の簡単4ステップ

redmineの復元

環境構築は、この前の手順で
https://continue-to-challenge.blogspot.com/2019/07/redmine.html
復元手順は
http://redmine.jp/faq/system_management/backup/
すいすい行くと思いきや
standard_init_linux.go:211: exec user process caused "exec format error"
なんだと!
どうやらNanoPiではARM用のイメージを使わないといけないらしい。
https://matatsuna.hatenablog.com/entry/2017/08/16/223039
公式のものがARM64対応していたのでそれにしてみる。
https://hub.docker.com/_/redmine
docker run --name=redmine -it --rm \
-e REDMINE_DB_USERNAME=redmine -e REDMINE_DB_PASSWORD=****** \
-e REDMINE_DB_DATABASE=redmine \
-e REDMINE_DB_MYSQL=192.168.1.13 -e REDMINE_DB_PORT=3306 \
-p 3000:3000 \
-v /srv/docker/files:/usr/src/redmine/files \
library/redmine:4.0.4
初期状態で起動が確認できたら、
  1. /srv/docker/redmineにfilesの中身を展開する
  2. データベースの復元
を行う。
できた!

nextcloudの復元

nextcloudには30GBくらいのデータが保存されているため、NanoPIのSDカードでは到底復元の環境に出来ない。
そこで、NanoPIに外付けHDDを装着した。 段々とNASキットが欲しくなる。
http://wiki.friendlyarm.com/wiki/index.php/1-bay_NAS_Dock_v1.2_for_NanoPi_NEO/NEO2#Hardware_Spec
https://www.friendlyarm.com/index.php?route=product/product&path=93&product_id=222
http://akizukidenshi.com/catalog/g/gM-12591/
ま、我慢だけどね。
ルートを外付けHDDに変更するには
nand-sata-install
https://lubtech.geo.jp/2017-09-10/?p=3048
環境構築はこの前の手順で
https://continue-to-challenge.blogspot.com/2018/10/nextcloud.html
こちらは特にARM/X86_64で違いはなく、当時の方法を思い出して行けば大丈夫。
ただし、復旧までの暫定・データ取り出しを目的としているためSSLは除外した。
うーん。眠い。

2018年12月29日土曜日

gogsの移動

以前から少しずつやっている自宅サーバーの環境移行。

gitリポジトリ保存用にgogsを使っているのだけど、これを移動させたいと思う。gogsやmariadbバージョンが移行前後で随分違うからすごくハマった。

移行元の環境

かなり昔に構築したため、詳細は全く覚えていない。

  1. gitというユーザーがある

  2. /home/gitにgogsとgogs-repositoriesがある

  3. インストールしていたバージョンは「gogs_v0.9.13_linux_386.tar.gz」みたい。。

  4. /etc/systemd/system/gogs.serviceがある

  5. DBはMariaDB 5.5.45を使用

上記から、おそらく

https://gogs.io/docs/intro/faqs#how-do-i-run-gogs-at-startup-with-systemd%3F

あたりを参考にインストールしたのではないかと思う。

データの引き継ぎについて

このあたりに詳しく書いてあった。コピペでできるのか・・

https://gogs.io/docs/upgrade/upgrade_from_binary

移行先での作業

ユーザー作成

ここでいうユーザーはgogsを起動するユーザー。

gogsのページだとgitになっている。


adduser git

gogsのダウンロード

https://dl.gogs.io/0.11.79/gogs_0.11.79_linux_amd64.zip

/home/gitに展開する。

所有者をgitにしておく。

DBサーバーの準備

mariaDB 10.1.34を使用することにした


apt-get install mariadb-server

apt-get install mariadb-client

rootのパスワード忘れたぁOrz

やれやれ・・・。

https://qiita.com/y1row/items/994ecf8b478b7aac4c7d

https://ips.nekotype.com/3426/

https://better-coding.com/solved-xterm-256color-unknown-terminal-type/

gogs用のデータベースとユーザーの作成


create user 'gogs'@'localhost' identified by '<password>';

create database gogs_git;

grant all on gogs_git.* to 'gogs'@'localhost';

データの移行

先述のデータの引き継ぎ方法にしたがって作業を行う

gogsとgogs-repositoriesを移行元からコピー

移行元から移行先にコピー


scp -r gogs git@移行先:/home/git/gogs_old

scp -r gogs-repositories git@移行先:/home/git/

続いて移行先で


cp -R gogs_old/custom gogs/

cp -R gogs_old/data gogs/

cp -R gogs_old/log gogs/

DBの移行

移行元で


mysqldump -u root -p gogs_git > gogs_bkup.dump.sql

移行先で


mysql -u gogs -p gogs_git < gogs_bkup.dump.sql

これでコピー完了。

テスト起動

コピーが終わったので、テストで起動してみる

gitユーザーで


./gogs web

でlocalhost:3000にアクセス・・・あれタイムアウト。。

切り分け

そもそもデータを引き継がない場合に、ちゃんと起動するか

起動自体はしたが、インストール画面で

Error 1071: Specified key was too long; max key length is 767 bytes

な、なんだこれ???

あーめんどくせー。ぐぐってみたら

https://github.com/gogs/gogs/issues/4992

この通りやってみたら、とりあえずログイン画面まで行けた。

ということは、データを引き継いだ場合もこの手順でいけるのかな?

ということで、同じ手順でやってみたらログイン画面・ログイン後のダッシュボードなどなど行けた。

自動起動設定

移行元の設定と同じような記載があったので、この通りにやってみる。

https://gogs.io/docs/intro/faqs#how-do-i-run-gogs-at-startup-with-systemd%3F


# cat /etc/systemd/system/gogs.service

  

[Unit]

Description=Gogs (Go Git Service)

After=syslog.target

After=network.target

After=mysqld.service

  

[Service]

# Modify these two values and uncomment them if you have

# repos with lots of files and get an HTTP error 500 because

# of that

###

#LimitMEMLOCK=infinity

#LimitNOFILE=65535

Type=simple

User=git

Group=git

WorkingDirectory=/home/git/gogs

ExecStart=/home/git/gogs/gogs web

Restart=always

Environment=USER=git HOME=/home/git

  

[Install]

WantedBy=multi-user.target

自動起動テスト


systemctl enable gogs

>Created symlink /etc/systemd/system/multi-user.target.wants/gogs.service → /etc/systemd/system/gogs.service.

systemctl start gogs

systemctl status gogs

● gogs.service - Gogs (Go Git Service)

Loaded: loaded (/etc/systemd/system/gogs.service; enabled; vendor preset: ena

Active: active (running) since Sat 2018-12-29 00:46:16 JST; 9s ago

Main PID: 6978 (gogs)

Tasks: 8 (limit: 4915)

CGroup: /system.slice/gogs.service

└─6978 /home/git/gogs/gogs web

  

12月 29 00:46:16 blackcube systemd[1]: Started Gogs (Go Git Service).

12月 29 00:46:16 blackcube gogs[6978]: 2018/12/29 00:46:16 [TRACE] Custom path:

12月 29 00:46:16 blackcube gogs[6978]: 2018/12/29 00:46:16 [TRACE] Log path: /ho

12月 29 00:46:16 blackcube gogs[6978]: 2018/12/29 00:46:16 [TRACE] Log Mode: Fil

12月 29 00:46:16 blackcube gogs[6978]: 2018/12/29 00:46:16 [ INFO] Gogs: Go Git

systemdに登録できて、起動できたので、これで移行完了!!

つかれたー。空き時間でやっていたから思い立ってから1か月もかかった。Orz.