変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

未分類

[podman]AlmaLinux9+mariaDB

podmanでAlmaLinux9のイメージに普通にmariaDBをインストする手順でDockerfileを作ってみる。

が、コンテナがすぐ終了してしまい原因も解らない。

/bin/bash起動させたコンテナにアタッチしてsystemctl start mariadbもsystemdが動いてないとエラる。

Docker.ioのmariadbのコンテナの様にmariadbdを実行させてもダメ。

起動コマンドはsystemctlを使う都合上systemdが起動しないといけないので、”/sbin/init”が適切のハズ

でもコンテナで/sbin/initしてもダメ。

どういう訳かDockerfileで/sbin/initしなければいけないらしい。

と気が付くまでに

結構な時間が過ぎていた。(笑

FROM  almalinux:latest
RUN   dnf -y update
RUN   dnf -y install mariadb mariadb-server
COPY  carset.cnf /etc/my.cnf.d/charset.cnf
RUN   systemctl enable mariadb
RUN   dnf clean all;
# コンテナでport指定が必須なのでEXPOSEは注意書き程度の意味
EXPOSE 3306
CMD [ "/sbin/init" ]

コンテナ内でsystemdを実行する方法 の記事で、podman run のマニュアルが抜粋されてた。

# man podman run
・・・
--systemd=true | false | always
       Run container in systemd mode. The default is true.
              • true enables systemd mode only when the command executed inside the container is systemd, /usr/sbin/init, /sbin/init or /usr/local/sbin/init.
              • false disables systemd mode.
              • always enforces the systemd mode to be enabled.
       Running the container in systemd mode causes the following changes:
              • Podman mounts tmpfs file systems on the following directories
                • /run
                • /run/lock
                • /tmp
                • /sys/fs/cgroup/systemd (on a cgroup v1 system)
                • /var/lib/journal
              • Podman sets the default stop signal to SIGRTMIN+3.
              • Podman sets container_uuid environment variable in the container to the first 32 characters of the container ID.
              • Podman does not mount virtual consoles (/dev/tty\d+) when running with --privileged.
              • On cgroup v2, /sys/fs/cgroup is mounted writeable.
       This allows systemd to run in a confined container without any modifications.
       Note  that  on SELinux systems, systemd attempts to write to the cgroup file system. Containers writing to the cgroup file system are denied by default.  The container_manage_cgroup boolean must
       be enabled for this to be allowed on an SELinux separated system.
       setsebool -P container_manage_cgroup true
・・・

podman run –systemd=trueオプションがデフォなので、/sbin/initを指定すれば動く(ハズが動かない

この記事と同じようにDockerfileを使ってpodman buildすれば動くので、良しとしよう。

コピー元のデータベースのキャラセットの設定ファイルを作る

[mysqld]
character-set-server = utf8mb4

[client]
default-character-set = utf8mb4

でイメージを作ってみる。

# podman build -t almalinux9_mariadb .
STEP 1/8: FROM almalinux:latest
STEP 2/8: RUN   dnf -y update
AlmaLinux 9 - AppStream                         5.4 MB/s |  15 MB     00:02    
AlmaLinux 9 - BaseOS                            2.8 MB/s |  17 MB     00:06    
AlmaLinux 9 - Extras                             12 kB/s |  13 kB     00:01    
Dependencies resolved.
・・・
Upgraded:
  glibc-2.34-125.el9_5.3.alma.1.x86_64                                          
  glibc-common-2.34-125.el9_5.3.alma.1.x86_64                                   
  glibc-minimal-langpack-2.34-125.el9_5.3.alma.1.x86_64                         
  libxml2-2.9.13-6.el9_5.2.x86_64                                               
  systemd-252-46.el9_5.3.alma.1.x86_64                                          
  systemd-libs-252-46.el9_5.3.alma.1.x86_64                                     
  systemd-pam-252-46.el9_5.3.alma.1.x86_64                                      
  systemd-rpm-macros-252-46.el9_5.3.alma.1.noarch                               
  tzdata-2025b-1.el9.noarch                                                     

Complete!
--> a2b577abfca6
STEP 3/8: RUN   dnf -y install mariadb mariadb-server
Last metadata expiration check: 0:00:19 ago on Wed Apr  2 17:57:08 2025.
Dependencies resolved.
・・・
Installed:
・・・
  mariadb-3:10.5.27-1.el9_5.x86_64                                              
  mariadb-backup-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-common-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-connector-c-3.2.6-1.el9_0.x86_64                                      
  mariadb-connector-c-config-3.2.6-1.el9_0.noarch                               
  mariadb-errmsg-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-gssapi-server-3:10.5.27-1.el9_5.x86_64                                
  mariadb-server-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-server-utils-3:10.5.27-1.el9_5.x86_64                                 
  mysql-selinux-1.0.13-1.el9_5.noarch                                           
・・・
Complete!
--> daf71bdc14ab
STEP 4/8: COPY  carset.cnf /etc/my.cnf.d/charset.cnf
--> a96ac4f1bfb3
STEP 5/8: RUN   systemctl enable mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
--> 50f6b0d16b83
STEP 6/8: RUN   dnf clean all;
26 files removed
--> 4aa9969087df
STEP 7/8: EXPOSE 3306
--> ac9094cd3dad
STEP 8/8: CMD [ "/sbin/init" ]
COMMIT almalinux9_mariadb
--> 7a06b67a56a2
Successfully tagged localhost/almalinux9_mariadb:latest
7a06b67a56a2ff8c30a436a53a64735ff9f04780b1c4649c06584f5d99327929
# STEP 1/8: FROM almalinux:latest
STEP 2/8: RUN   dnf -y update
AlmaLinux 9 - AppStream                         5.4 MB/s |  15 MB     00:02    
AlmaLinux 9 - BaseOS                            2.8 MB/s |  17 MB     00:06    
AlmaLinux 9 - Extras                             12 kB/s |  13 kB     00:01    
Dependencies resolved.
・・・
Upgraded:
  glibc-2.34-125.el9_5.3.alma.1.x86_64                                          
  glibc-common-2.34-125.el9_5.3.alma.1.x86_64                                   
  glibc-minimal-langpack-2.34-125.el9_5.3.alma.1.x86_64                         
  libxml2-2.9.13-6.el9_5.2.x86_64                                               
  systemd-252-46.el9_5.3.alma.1.x86_64                                          
  systemd-libs-252-46.el9_5.3.alma.1.x86_64                                     
  systemd-pam-252-46.el9_5.3.alma.1.x86_64                                      
  systemd-rpm-macros-252-46.el9_5.3.alma.1.noarch                               
  tzdata-2025b-1.el9.noarch                                                     

Complete!
--> a2b577abfca6
STEP 3/8: RUN   dnf -y install mariadb mariadb-server
Last metadata expiration check: 0:00:19 ago on Wed Apr  2 17:57:08 2025.
Dependencies resolved.
・・・
Installed:
・・・
  mariadb-3:10.5.27-1.el9_5.x86_64                                              
  mariadb-backup-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-common-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-connector-c-3.2.6-1.el9_0.x86_64                                      
  mariadb-connector-c-config-3.2.6-1.el9_0.noarch                               
  mariadb-errmsg-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-gssapi-server-3:10.5.27-1.el9_5.x86_64                                
  mariadb-server-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-server-utils-3:10.5.27-1.el9_5.x86_64                                 
  mysql-selinux-1.0.13-1.el9_5.noarch                                           
・・・
Complete!
--> daf71bdc14ab
STEP 4/8: COPY  carset.cnf /etc/my.cnf.d/charset.cnf
--> a96ac4f1bfb3
STEP 5/8: RUN   systemctl enable mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
--> 50f6b0d16b83
STEP 6/8: RUN   dnf clean all;
26 files removed
--> 4aa9969087df
STEP 7/8: EXPOSE 3306
--> ac9094cd3dad
STEP 8/8: CMD [ "/sbin/init" ]
COMMIT almalinux9_mariadb
--> 7a06b67a56a2
Successfully tagged localhost/almalinux9_mariadb:latest
7a06b67a56a2ff8c30a436a53a64735ff9f04780b1c4649c06584f5d99327929

無事出来上がったのでコンテナを作って起動してみる

# podman run -d -it --name almalinux9_mariadb_contener \
 -p 3306:3306 \
 -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=1 \
 -v '{データベース保存ディレクトリィ※事前作成済}:/var/lib/mysql' \
 almalinux9_mariadb
900c3b58d5e7147e888f03674392df4fd6293de21d8c45a36e9ccda7c89fa50a

ログを見ると ※動作環境に依存

[FAILED] Failed to start MariaDB 10.5 database server.

See 'systemctl status mariadb.service' for details.

不穏な雰囲気が・・・

# podman exec almalinux9_mariadb_contener systemctl status mariadb.service
# mariadb.service - MariaDB 10.5 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)
     Active: failed (Result: exit-code) since Wed 2025-04-02 16:46:32 UTC; 2min 7s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 23 ExecStartPre=/usr/libexec/mariadb-check-socket (code=exited, status=0/SUCCESS)
    Process: 46 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir mariadb.service (code=exited, status=1/FAILURE)
        CPU: 349ms

Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[112]: chown: changing ownership of '/var/lib/mysql': Operation not permitted
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[87]: Cannot change ownership of the database directories to the 'mysql'
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[87]: user.  Check that you have the necessary permissions and try again.
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[46]: Initialization of MariaDB database failed.
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[46]: Perhaps /etc/my.cnf is misconfigured or there is some problem with permissions of /var/lib/mysql.
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[46]: Initialization of MariaDB database was not finished successfully.
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[46]: Files created so far will be removed.
Apr 02 16:46:32 90b2f5aeb4b0 systemd[1]: mariadb.service: Control process exited, code=exited, status=1/FAILURE
Apr 02 16:46:32 90b2f5aeb4b0 systemd[1]: mariadb.service: Failed with result 'exit-code'.
Apr 02 16:46:32 90b2f5aeb4b0 systemd[1]: Failed to start MariaDB 10.5 database server.

MariaDB が起動しない場合の対処方法 でググってみると、

ディレクトリィのオーナが気に入らないダケみたいなのでchown -R mysql:mysqlで丸ごと更新。

# podman exec almalinux9_mariadb_contener chown -R mysql:mysql /var/lib/mysql
# podman exec almalinux9_mariadb_contener systemctl start mariadb
# podman exec almalinux9_mariadb_contener systemctl status mariadb.service
● mariadb.service - MariaDB 10.5 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)
     Active: active (running) since Wed 2025-04-02 16:51:09 UTC; 18s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 120 ExecStartPre=/usr/libexec/mariadb-check-socket (code=exited, status=0/SUCCESS)
    Process: 142 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
    Process: 251 ExecStartPost=/usr/libexec/mariadb-check-upgrade (code=exited, status=0/SUCCESS)
   Main PID: 230 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 20 (limit: 1638)
     Memory: 75.5M
        CPU: 1.081s
     CGroup: /system.slice/mariadb.service
             └─230 /usr/libexec/mariadbd --basedir=/usr

Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: The second is mysql@localhost, it has no password either, but
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: you need to be the system 'mysql' user to connect.
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: After connecting you can set the password, if you would need to be
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: able to connect as any of these users with a password and without sudo
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: See the MariaDB Knowledgebase at https://mariadb.com/kb
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: Please report any problems at https://mariadb.org/jira
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: The latest information about MariaDB is available at https://mariadb.org/.
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: Consider joining MariaDB's strong and vibrant community:
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: https://mariadb.org/get-involved/
Apr 02 16:51:09 90b2f5aeb4b0 systemd[1]: Started MariaDB 10.5 database server.

無事起動できたらしい。

# ls -l mysql
total 122920
-rw-rw---- 1 100026 100026     24576 Apr  3 01:51 aria_log.00000001
-rw-rw---- 1 100026 100026        52 Apr  3 01:51 aria_log_control
-rw-rw---- 1 100026 100026       972 Apr  3 01:51 ib_buffer_pool
-rw-rw---- 1 100026 100026 100663296 Apr  3 01:51 ib_logfile0
-rw-rw---- 1 100026 100026  12582912 Apr  3 01:51 ibdata1
-rw-rw---- 1 100026 100026  12582912 Apr  3 01:51 ibtmp1
-rw-rw---- 1 100026 100026         0 Apr  3 01:51 multi-master.info
drwx------ 2 100026 100026      4096 Apr  3 01:51 mysql
srwxrwxrwx 1 100026 100026         0 Apr  3 01:51 mysql.sock
-rw-rw---- 1 100026 100026        16 Apr  3 01:51 mysql_upgrade_info
drwx------ 2 100026 100026        20 Apr  3 01:51 performance_schema

mysql.sockが0バイトなのが気になるが、mariadbコマンドが使えるかな?

# podman exec -it almalinux9_mariadb_contener mariadb
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.5.27-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.001 sec)

MariaDB [(none)]> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.003 sec)

MariaDB [(none)]> exit
Bye
# 

なので多分OK。

でも【停止】させた表示が少し気になるので コンテナに-it は付けない方がいいかも。

         Unmounting /etc/hostname...
         Unmounting /etc/hosts...
         Unmounting /etc/resolv.conf...
         Unmounting /run/.containerenv...
         Unmounting /run/lock...
         Unmounting /run/secrets...
         Unmounting Temporary Directory /tmp...
         Unmounting /var/lib/mysql...
         Unmounting var-log-journal.mount...
[FAILED] Failed unmounting /etc/hostname.
[FAILED] Failed unmounting /etc/hosts.
[FAILED] Failed unmounting /etc/resolv.conf.
[FAILED] Failed unmounting /run/.containerenv.
[FAILED] Failed unmounting /run/lock.
[FAILED] Failed unmounting /run/secrets.
[FAILED] Failed unmounting Temporary Directory /tmp.
[FAILED] Failed unmounting /var/lib/mysql.
[FAILED] Failed unmounting var-log-journal.mount.
[  OK  ] Stopped target Swaps.
[  OK  ] Reached target System Shutdown.
[  OK  ] Reached target Unmount All Filesystems.
[  OK  ] Reached target Late Shutdown Services.
         Starting System Halt...
Sending SIGTERM to remaining processes...
Sending SIGKILL to remaining processes...
All filesystems, swaps, loop devices, MD devices and DM devices detached.
Halting system.
Exiting container.
 disconnected 

ps.2025/4/3

mysqlユーザが作られていない場合

mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin

であれば

# adduser --uid 27 --home-dir /var/lib/mysql --comment "MySQL Server" --system --user-group --shell /sbin/nologin mysql
※uidが10000以下を指定する場合は --system が必須
※groupaddコマンドで事前にグループを作る必要があるけど --user-group で同名同IDのグループを作ってもらう方が楽

で同じ内容がpasswdにできる(ハズ

うまくできなかったらuserdel mysqlで消してコマンドを見直してやり直し。

/var/lib/mysqlディレクトリィが出来ていなかったら

多分-v xxx:/var/lib/mysqlオプションを付けたコンテナの作成時にエラると思うので

# mkdir /var/lib/mysql
# chown -R mysql:mysql /var/lib/mysql

で作りcommitでイメージを作成。

新たにコンテナを作成してうまくいったら最後に

以上の追加した処理をDockerfileに組み込んでalmalinux:latestから一発でイメージが作れる様にすると良いと思う。

# podman build -t almalinux9_mariadb .

Docerfileで

RUN podman-generate-systemd 

するといいらしいけど、今は非推奨で

RUN podman-systemd.unit – systemd units using Podman Quadlet

を使うといいらしいけどね。



[AlmaLinux]certbot

SSL化って何したかな?忘れた。

SSL化参考リンク(かなり古い)を見に行くとそんなサーバーは無かったりする。

とりあえず、またググって、インストしてみる。

# dnf --enablerep=epel install certbot

設定が怪しいのでテスト

# certbot certonly --webroot -w {apacheのDocumentRootパス} -d {ドメイン名} --dry-run

外部からサーバが見えてないとダメなのでルータの飛び先を変えて成功

但し、アクセス失敗

Invalid command 'SSLOptions', perhaps misspelled or defined by a module not included in the server configuration

SSLOptionsオプションで使用するモジュールが足りなかったらしい

ググってみるとmod_ssl モジュールらしいので

# dnf  install mod_ssl
⇒ mod_ssl-2.4.62-1.el9_5.2.x86_64.rpm
# systelctl restart httpd

/etc/httpd/conf.d/ に ssl.conf が出現した。
でも「信用できない」状況なのでSSL設定の状況を調べると・・・

# httpd -S
VirtualHost configuration:
*:443                  is a NameVirtualHost
         default server {ドメイン名} (/etc/httpd/conf.d/ssl.conf:40)
         port 443 namevhost {ドメイン名} (/etc/httpd/conf.d/ssl.conf:40)
         port 443 namevhost {ドメイン名} (/etc/httpd/vhost/ssl_virtualhost-{ドメイン名}.conf:1)
*:80                   {ドメイン名} (/etc/httpd/vhost/virtualhost-{ドメイン名}.conf:1)

ssl.confの設定が優先されバーチャルホストの設定が無効化になってそう

なので vhost.confavhost.conf に名前(に他意は無い)を変え先に読まれる様にしてみると

# httpd -S
VirtualHost configuration:
*:80                   {ドメイン名} (/etc/httpd/avhost/virtualhost-{ドメイン名}.conf:1)
*:443                  is a NameVirtualHost
         default server {ドメイン名} (/etc/httpd/avhost/ssl_virtualhost-{ドメイン名}.conf:1)
         port 443 namevhost {ドメイン名} (/etc/httpd/avhost/ssl_virtualhost-{ドメイン名}.conf:1)
         port 443 namevhost {ドメイン名} (/etc/httpd/conf.d/ssl.conf:40)
・・・以下、省略・・・

試しにinfo.phpをwordpressのパスに放り込むと表示するけど、削除すると白紙になるので、ブログの設定かな?

DirectoryIndex index.html index.phpからindex.phpを取ると

403エラーになる

暫くすると真っ白に

結局良く解らないが

元のWordPressのファイルをコマンドラインから復元したら

OKだった

WordPressの中身に何かあるらしい

壁紙のプラグインとか入れてなかったのでその辺で失敗してる様な気がした。

WP-Optimizeがテーブルのインデックスサイズ調査でグルグル回ってる(時間が解決

SSL込みで移行するのは大変みたいだ

でも正しいインストール順で構築すれば行けるのかもしれない(知らんけど

ps.

cockpit のSSL証明書の設定を追記。

cd /etc/cockpit/ws-certs.d/
# ln -s /etc/letsencrypt/live/{ドメイン名}/fullchain.pem {ドメイン名}.crt
# ln -s /etc/letsencrypt/live/{ドメイン名}/privkey.pem {ドメイン名}.key

実際にはWinSCPからリンクを貼った。



[javascript]サンプルを実行

jsファイルにコードを書かないと簡単なサンプルも実行できない。

勿論、そんなものはオンラインにあるけど、そういうところにソースをパリッと貼り付けるのはご法度なケースも多いので・・・

パパッとjavascriptのサンプルをローカルなHTMLで実行するサンプルを作ってみた。

但し、new Functionからはグローバルな変数が見えてしまう。

それだけなら特に危なくないけど

某MS操縦士のセリフ:俺を踏み台にしたぁ~~~

なんてコードを書かれても不思議ではない碌でもない世の中なので、

ソースだけ公開。

<DOCTYPE html>
  <html lang="ja">

  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>javascriptを実行させるサンプル</title>
    <link href="jstest.css" media="all" rel="stylesheet" type="text/css" />
    <script src="createelement.js"></script>
    <script src="download.js"></script>
    <script src="jstest.js"></script>
    <link href="loader.css" media="all" rel="stylesheet" type="text/css" />
    <script src="loader.js"></script>
  </head>

  <body>
    <!-- loader begin -->
    <div id="js-loader" class="loader">
      <p>***</p>
      <p id="js-loader-text"></p>
      <p>***</p>
    </div>
    <!-- loader end -->
    <textarea class="jsText" id="jsText1" scrolling="auto">
// sample code
return new Promise((resolve, reject) => {
  let result = new Array(10);
  for (let index = 0; index < 10; index++) {
    result[index]=index + 1;
  }
  console.log(result); console.log(10);
  console.log('aaaaaaaaaaaaaa');
  console.log({log: 'data=> result=data' });
  resolve();
});
</textarea><br />
    <button type="button" id="executeJsText">実行</button><br />
    <div class="status" id="status"></div><br />
    <textarea class="jsResult" id="jsResult1" scrolling="auto"></textarea><br />
    <button type="button" id="downloadJsText">javaScriptダウンロード</button><br />
    <button type="button" id="downloadResult">結果ダウンロード</button><br />
  </body>

  </html>
@charset "UTF-8";

textarea.jsText {
    width: 95%;
    /* 親要素の幅と合わせる */
    height: 200px;
    resize: both;
    border: 2mm ridge rgba(211, 220, 50, .6);
}

textarea.jsResult {
    width: 95%;
    /* 親要素の幅と合わせる */
    height: 100px;
    resize: both;
    border: 2mm ridge rgba(211, 220, 50, .6);
}
let CRLF = '\r\n';
window.addEventListener('load', () => init());
/**
 * 初期化処理
 */
const init = () => {
    // ボタンクリックイベントの登録
    document.querySelector('#downloadJsText').addEventListener('click', () => downloadText('jsText1'));
    document.querySelector('#downloadResult').addEventListener('click', () => downloadText('jsResult1'));
    document.querySelector('#executeJsText').addEventListener('click', () => dexecuteJsText('jsText1', 'jsResult1'));
    loaderClose();
};
/**
 * サンプルをエンコーディングしたファイルをダウンロードする
 */
const downloadText = async (target) => {
    try {
        loaderOpen();
        try {
            let dateBegin = Date.now();
            displayStatus(`${target}ダウンロード処理中`);
            let jsText = document.querySelector(`#${target}`).value;
            download(jsText, `${target}.js`, "text/plan");
            displayStatus(`${target}ダウンロード完了。処理時間:${dateDateBetween(dateBegin, Date.now())}`);
        } catch (ex) {
            alert(`${target}ダウンロード異常終了${CRLF}${ex}`);
        }
        loaderClose();
    } catch (ex) {
        alert(ex);
    }
};
/**
 * 実行する
 * @param {*} jsText 
 * @param {*} jsResult 
 */
const dexecuteJsText = (jsText, jsResult) => {
    let jsTextElmText = document.querySelector(`#${jsText}`).value;
    let jsResultElm = document.querySelector(`#${jsResult} `);
    let dateBegin = Date.now();
    try {
        loaderOpen();
        try {
            displayStatus(`${jsText} 実行処理中`);
            let func = new Function('console', jsTextElmText);
            let result = [];
            let radix = 10;
            let rc = func({
                log: (data) => {
                    if (data === undefined) {
                        data = 'undefined';
                    }
                    if (data === null) {
                        data = 'null';
                    }
                    switch (typeof data) {
                        case 'object':
                            data = JSON.stringify(data);
                            break;
                        case 'string':
                            break;
                        default:
                            data = data.toString(radix);
                            break;
                    }
                    result.push(data);
                }
            });
            new Promise((resolve, reject) => {
                if (rc instanceof Promise) {
                    displayStatus(`${jsText} 実行中 Promise.then待ち`);
                    rc.then(() => {
                        resolve(result);
                    });
                } else {
                    resolve(result);
                }
            }).then((result) => {
                jsResultElm.innerHTML = result.join(CRLF);
                displayStatus(`${jsText} 実行完了。処理時間:${dateDateBetween(dateBegin, Date.now())} `);
            });
        } catch (ex) {
            displayStatus(`${jsText} 実行異常終了。処理時間:${dateDateBetween(dateBegin, Date.now())}${CRLF}${ex} `);
        }
        loaderClose();
    } catch (ex) {
        alert(ex);
    }
};
/**
 * ステータスを表示する
 * @param {string} text 
 */
const displayStatus = (text) => {
    let divStatus = document.querySelector('#status');
    divStatus.innerHTML = text;
    let divLoading = document.querySelector('#js-loader-text');
    divLoading.innerHTML = text;
};
/**
 * 時刻差のテキストを作成する
 * @param {Date} dateBegin 
 * @param {Date} dateEnd 
 * @returns 
 */
const dateDateBetween = (dateBegin, dateEnd) => {
    return `${(dateEnd - dateBegin) / 1000} 秒`
};

createelement.js
download.js
loader.css
loader.js

は先の記事

デスクトップに貼ったJSからSJISのCSVをダウンロードさせてみる【その後】サンプル

と同じなので割愛。

ミソはjsソース中に

console.log(result);

と書かれたらどうやって取り出すか?

である。

今回は

let result = "";
let func = new Function( 'console', jsテキスト);☚jsテキストの処理に対してパラメータ'console'を宣言
func({log: (data) => ☚{...}内がconsoleオブジェクトとして扱われ、result変数にセットされる。

これでjsテキストの中でconsole.logメソッドがそれっぽく動き出す。

jsコードがwindowやdocumentを直接参照するのが嫌なら

let func = new Function( 'console', 'window', 'document', ..., jsテキスト);
func(
{log: (data) => result.push(data);},
{console: (data) => xxxx;},
{body: (data) => xxxx;},
);

とパラメータを追加し、見せたい情報を渡してサンドバック風にできるだろう。



[Linux]chrome

ダウンロードページからインストしようとしたら、1つ依存パッケージが見当たらないと出たので、

※chrome用のyumリポジトリィファイルを作る
# sudo vi /etc/yum.repos.d/google.chrome.repo
i
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
「esc」:wq
※内容チェック
# yum search google chrome
google-chrome-beta.x86_64 : Google Chrome (beta)
google-chrome-stable.x86_64 : Google Chrome
google-chrome-unstable.x86_64 : Google Chrome (unstable)
※安定版をインスト
# sudo yum install google-chrome-stable

※元ネタは、Google Chromeをインストールする Rocky,Alma,CentOS

chromeの拡張機能のchrome リモートデスクトップはインストできたので、他のパソコンに繋ぐことはできた。

しかし、他のPCから接続しようとdebパッケージで作られたパッケージのインストールができなかった。

一応、CentOS Stream8とMIRACLE LINUX 8.4にChrome Remote Desktopで接続する で

alienパッケージを使用して debパッケージをrpmパッケージに変換すれば使えるようになるらしいが、最新のdebパッケージではダメらしいので、パス。

すなおにUbuntuを入れようとしたが、cockpitの仮想マシンへの「OSのダウンロード」でUbuntu18をインスト中の「パッケージのインストール」で無限ループに入ってしまったので挫折。

ps.2023/08/17

ubuntu-22.04.2-desktop-amd64.isoをダウンロードし、これを仮想マシンにマウントする方式で無事Ubuntu 22をインストできた。

vncコンソールのマウスのポインタがズレて判定され操作しにくい。(特に×クリック

ここで、コンソールの「デスクトップビューアー」を試してみた。

  1. WindowsにRemote Viewerをダウンロードしてインスト
    • virt-viewer 11.0 (gpg) Friday November 18th, 2021 Win x86 MSI (gpg) 「Win x64 MSI (gpg)
    • インストするとv拡張子と連動する。
  2. 【リモートビューアーの起動】ボタンを押す
    • spice://127.0.0.1:5901へ接続する設定ファイルがダウンロード
      • そのまま実行しても接続失敗
      • ダウンロードしたvvファイルは自動削除設定になっている。
  3. cockpitが動作しているマシンのIPアドレスに差し替えても
    • 接続失敗。
  4. 使用する5900, 5901ポートを解放
    • 接続失敗。

ローカルホスト上でcockpitを起動している場合のみ、コンソールの「デスクトップビューアー」が使える様だ。

※もしかしたらWindowsの場合のみ127.0.0.1になるのかもしれない。

シリアルコンソールではクリップボードが使えるが、

vncコンソールでは使えないので、

諦めてSSHサービスをインスト。

$ sudo apt-get install openssh-server

勿論、以下はTeraTermから操作。

chromeをインスト。

$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
$ google-chrome で起動

chromeから remotedesktop.google.come/access を開き、chromeリモートデスクトップをインストし拡張画面へ移動。

リモートホストもインストさせようとしたが失敗。

手動に切り替える。

$ wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb -P ~/Downloads
$ sudo dpkg -i ~/Downloads/chrome-remote-desktop_current_amd64.deb
$ mkdir ~/.config/chrome-remote-desktop で作業フォルダを作っておく

するがdpkgでエラる。

どうやら、libutempter0モジュールが見当たらないらしい。

しかし、

$ sudo apt-get install libutempter0

しても先のdpkgが途中でエラーったのが影響しているのか失敗。

画面に apt –fix-broken installを試してね。と提案が出ていたので、

$ sudo apt --fix-broken install

で、無事リモートデスクトップがインストされた。

※うまくいかない場合もあるらしい。

とりあえず、WindowsからUbuntu22のデスクトップにアクセスできたが、nonモニターのため真っ黒。

結論

仮想マシンのvncコンソールがイマイチ。

  1. クリップボードが使えない。
  2. デスクトップ上のマウスポインタの座標がクリックした時とズレている。

chromtリモートデスクトップでリモート接続できても、モニターレスなら多分真っ黒画面になるので、仮想マシンはキャラベースでインストした方が安心。

こうなるとLinuxにHTML5なリモートデスクトップが欲しくなる。(Linux限定になるけどね

ThinVNCがあるか・・・



「HTML」タブ

これだけのためにjQuery使ってた気がするけど、今ではCSSだけでも作れるっぽい。

というかCSSの書き方としては昔からある

各タブは、チェックボックスとこれに連携するラベルで構成する。

<input id="{タブ名}_tab" type="radio" name="tab_item" checked>
<label class="tab_item" for="{タブ名}_tab">{タブ・タイトル}</label>

チェックボックス 自体は表示する必要は無い。

input[name="tab_item"] {
    display: none;
}

タブことラベルをクリックすると チェックボックス の状態がcheckedに切り替わるので、チェックボックスに対応する兄弟のブロックを表示。

ここは、タブ名が変わったり増えたりするる度に修正しないといけない。

#{タブ名1}_tab:checked~#{タブ名1}_content,
#{タブ名2}_tab:checked~#{タブ名2}_content,
#{タブ名3}_tab:checked~#{タブ名3}_content {
/* 表示 */
    display: block;
/* または上下左右センタリング */
    display: flex;
    justify-content: center;
    align-items: center;
}

cssに正規表現はあるけど、ペアだけ対象にする書き方は無い。

[id$="_tab"]:checked  ~  [id$="_ content] {
どのタブをクリックしても、全部表示しようとする
}

なので 兄弟のブロック は初期非表示。

.tab_content {
    display: none;
    ...
}


[Anime]ゴジラ S.P <シンギュラポイント>

留守録を溜めてあったのを一気観した感じは。

よく判らない。

オリジナル・ストーリィのせいかも。

アレっぽい男の子とアレッポい女の子のSNSを通し破滅に向かう世界の状況と謎の歌の謎解きが語られる。

ところが、最後の最後に、それとは何ら一切関係無く、

本当の主人公が勝手に最強になって

勝手にゴジラを倒し

勝手に世界は救われる。

一言でいえば、

ループもの。

だが、お話は「最終のループ」だけの構成だ。

エンディングの後に、ゴジラは50年前にも倒されていたらしい。どうやって倒したのかは不明だが、その場に居合わせた子供は、そのゴジラ復活を目指していた様だ。

と、第二シーズンもありそうな終わり方になっている。

絵も綺麗だし、怪獣も出るし、話の進め方も何となく「古代の伝承」絡みで、過去のゴジラっぽい。

しかし、オリジナルなストーリーは最低限に絞り込み、謎 謎 謎 な雰囲気で包まれているから、お話なんてどうでもいい。今の技術で凄いゴジラが見れれば良いんだよ!な人向け。

一応、ゴジラだけど放射能が出てこない。マスコミや学者はストーリーの中で核が出てないと嘆き、現実の核兵器の怖さを感じないならまた「 現実の核兵器が使われる」状況がやってくると考えている様だ。

マスコミの大半は「文系」だから「核=目に見えない危険物」 が無くなれば、文字通り「 危険な 状況は終了する」と思っている。

火薬などの化学モノは燃やしたり中和すれば「安全なもの」になるが、

核兵器や放射性物質は時間をかけて安全そうな放射性に下がるまでは「安全なもの」にならない。

※すぐに放射性を下げるには希釈する以外に方法は無い。

つまり、法律や条約で 完璧に核兵器や放射性物質を規制しても直ちに無くなる訳ではない。

どうせ全部下請けに丸投げするんだから。

見えない場所(処分場)に移動するダケ。

なんですよね。気持ちは察するけど、現実は悲しいね。



Windows 11 Check

Core i9-9900 Normalはチェックツールを通った。

しかし、こっちは惜しくも落選した。CPUリストに載ってないせいかな?

Pentium G4560の結果

UEFIからセキュアブートをON、トラステッド・コンピューティングでTPPを選択,再起動してデバイス選択をAUTOからTPM2.0にした。

Win10からTPM.MSCでドライバは動いている様に観える。



【Twitter】寒い時代になったぁ

Twitterにログインできるけどつぶやきが凍結されてしまった。

あ、ログインもはじかれた。

2021/02/13

今日もパスワード・リセットのメールが届かず。

そういえば、「普段とは異なる方法で・・・」とか書いてたな?

「普段と同じ方法」ならOKなんだな?(多分

最後の手段

スマホのtwitterアプリは基本的にログインしっぱなし(=普段と同じ方法)なのでここからパスワードの変更を試みたらできた。

どうやらPCからの接続は長時間のロックがかかっていたようだ。

というか・・・

とあるPCからアタックされまくっていたのだな?

しかし、心当たりは、ビビットアーミー と 原神 だけなんだが?

あ、どっちも中華ゲーだったな。(わっはっは

暫くはゲームを控えなくちゃいけないのかな???



【3Dプリンタ】印刷の事前準備

CURAでプリンタ設定の「プリンタ」タブの「G-Codeの開始」に

; Script based on an original created by tjjfvi (https://github.com/tjjfvi)
; An up-to-date version of the tjjfvi's original script can be found
; here:  https://csi.t6.fyi/
; Note - This script will only work in Cura V4.2 and above!
; --- Global Settings
; layer_height = {layer_height}
; smooth_spiralized_contours = {smooth_spiralized_contours}
; magic_mesh_surface_mode = {magic_mesh_surface_mode}
; machine_extruder_count = {machine_extruder_count}
; --- Single Extruder Settings
; speed_z_hop = {speed_z_hop}
; retraction_amount = {retraction_amount}
; retraction_hop = {retraction_hop}
; retraction_hop_enabled = {retraction_hop_enabled}
; retraction_enable = {retraction_enable}
; retraction_speed = {retraction_speed}
; retraction_retract_speed = {retraction_retract_speed}
; retraction_prime_speed = {retraction_prime_speed}
; speed_travel = {speed_travel}
; X5SA Pro Start Code
G21
G90
M82
M107 T0
M140 S{material_bed_temperature_layer_0}
M104 S{material_print_temperature_layer_0} T0
M190 S{material_bed_temperature_layer_0}
M109 S{material_print_temperature_layer_0} T0
G28
G92 E0
G28 ;Home
G1 Z15.0 F6000 ;Move the platform down 15mm
;Prime the extruder
G92 E0 ;Reset Extruder
G1 F200 E3 ;Extrude 3mm
G1 Y1 Z0.3 F200 ;Move Y1 Z0.3
G1 X120 F200 E10 ;clean-up
G1 X75 F200 E15 ;clean-up2
G92 E0 ;Reset Extruder Again

と追加すると、いいらしい。

2021/02/09

「ヘッド清掃」は印刷する前にベッドの手前側に樹脂を塗りつけるらしいので手前でクリップを止めている場合は注意。
※手前のクリップの針金が吹っ飛びました!
手前にクリップがある場合は・・・XとYを入れ替えて・・・こうですね。

G28 ;Home
G1 Z15.0 F6000 ;Move the platform down 15mm
;Prime the extruder
G92 E0 ;Reset Extruder
G1 F200 E3 ;Extrude 3mm
G1 X1 Z0.3 F200 ;Move X1 Z0.3
G1 Y120 F200 E10 ;clean-up
G1 Y75 F200 E15 ;clean-up2
G92 E0 ;Reset Extruder Again

所感

格安3Dプリンタだから失敗して壊れても・・・また買えばいいや
そう思ってたけど、失敗しすぎかな?



【Windows10】マウス

急にマウスのボタンが反応しなくなった。マウス自体のせいかと思ったが、他のマウスも押せなくなっていく。酷いのはポインタすら動かなくなる。
Bluetoothマウスや無線マウスなので電波状態が悪いのかもしれないけど、ボタンだけ押せないのは辺。

マウスの電源をON/OFFすると治ることもあるがすぐ押せなくなる。
PCを再起動すると治ることもあるがすぐ押せなくなる。

てか、マウスのボタンが押せないと、再起動するのも大変だ。

ので、マウス自体の問題ではないようだ。

原因1:複数のマウスを登録している。

設定・デバイスで普段使わないマウスを削除してみる。

変化なし。

原因2:複数のマウスドライバがインストされている。

デバイスマネージャに3つの汎用マウスドドライバーがあったので、全部消して、入れなおす。

少し良くなった。

原因3:アプリをインストせい。

最近原神を始めてから、症状がでるようになった。

でもアンスコするのは本末転倒なのでやらない。

あ、互換モードがあったな。推奨はWindows8だった。

これを設定してみたら、とりあえずエクスプローラやIMEは安定した。