Thinkpad x260: macOS Somonaのセットアップ

Venturaがアップルのサポートから外れたので Somonaにアップグレードしました。当初Sequoiaにアップグレードしたのですが、グラフィックスが思うように設定できず Somonaとなりました。Skylakeはspoofingというやり方で使えるのですが、OCLPのルートパッチのグラフィクスを当てるやり方もあります。しかし検索してもどうもその方法で成功した事例も見つからず、どれもspoofingの方法を使っていたので、おそらくルートパッチは何らかの理由で使えないだろうということで、Somonaにしました。若干EFIを修正して無事成果物が完成しました。

https://github.com/Neelakurinji123/ThinkPad-x260-OpenCore

Posted in macOS | Comments Off on Thinkpad x260: macOS Somonaのセットアップ

ThinkPad x390にmacOSをインストール

デスクトップ用MacのM4が欲しいなと見ていたのですが、最安値ですら手の届かない価格でしたので、今回最後のThinkPadのMacOS化をすることにしました。機種はx390です。この機種ほほぼx280とスペックは同じですが、サイズが若干大きく、従来のxシリーズと一線を画しています。

中古で購入して真っ先に状態チェックしたところとても良好でした。バッテリーやSSDの状態がほぼ80%くらいなので数年は持ちそうな感じです。

SSDは256GBでそれほど多い容量ではありませんが私的にはあまり多くは要らないのでOKです。このうち32GBをMX Linuxに割り当てて約220GBがmacOSに割り当てました。

Sonomaをインストールして問題なかったのでSequoiaにしておいて方が後々いいなということで再インストールしました。wifiをitlwm WiFi kext + HeliPort にしました。将来的にTahoeにアップグレードを見据えてのことです。HeliPortはあまり使い勝手が良くなく、固定IPなどはできません。また今の状態でacモードが接続ができなくてaモードで接続しています。

追記:aモードだと遅くて不便なので従来のAirportItlwm方式に変えてみました。今度はacモードでも問題なく稼働しています。

  • 5T33Z0/Thinkpad-T490-Hackintosh-OpenCore:https://github.com/5T33Z0/Thinkpad-T490-Hackintosh-OpenCore

Posted in macOS | Comments Off on ThinkPad x390にmacOSをインストール

Kindle: Picture frameの制作 (2)

ピクチャーフレームの制作をしました。ホームセンターでたまたまバンブーボードを見つけたのでそれを購入しました。広葉樹のボードの方が緻密で綺麗ですが、竹でも十分綺麗だと思ったのでそれにしました。フレームの木片は家にあったものをかき集めて作りました。エポキシ系樹脂の接着剤で固定しましたが、調整した時にずれていましました。😅

裏面はこんな感じです。

kindleを固定するのにちょうどいい粘着タックがあったのでそれを使います。またケーブル端子がはみ出さないようにL型のUSB miniが売ってたのでそれを使います。

最後はガムテープで固定します。

バンブーボードは紙やすりで磨いてから、くるみオイルで仕上げて完成😄

材料費

  • バンブーボード: 210円
  • 粘着タック: 100円
  • L型USBminiケーブル: 100円
  • USB延長ケーブル: 100円
  • エポキシ系樹脂接着剤: 100円
  • kindle PW1 中古品: 1500円
Posted in kindle | Comments Off on Kindle: Picture frameの制作 (2)

Kindle: Picture frameの制作

作成

ffmpeg -i Gen-2\ 1112308358,\ A\ serene\ forest\ scen,\ IMG_20230604.mp4 -vf "crop=900:765:50:50" video.mp4
ffmpeg -i video.mp4 -vf fps=3 frame%02d.png

gcc raw2gmv_pw1.c -o raw2gmv_pw1
gcc raw2gmv_k3.c -o raw2gmv_k3


ffmpeg -i video.mp4 -i mask.png \
-filter_complex "[0:v][1:v] overlay=0:0" -c:a copy \
-pix_fmt gray \
 -s 1024x768 output_pw1.mp4

ffmpeg -i video.mp4 -i mask.png \
-filter_complex "[0:v][1:v] overlay=0:0" -c:a copy \
-pix_fmt gray \
 -s 800x600 output_k3.mp4

ffmpeg -i output_pw1.mp4  -pix_fmt gray -f rawvideo out_pw1.raw
ffmpeg -i output_k3.mp4  -pix_fmt gray -f rawvideo out_k3.raw

cat out_pw1.raw | ./raw2gmv_pw1 > video_pw1.gmv
cat out_k3.raw | ./raw2gmv_k3 > video_k3.gmv

gzip video_pw1.gmv
gzip video_k3.gmv

参考

Posted in kindle | Comments Off on Kindle: Picture frameの制作

Kindle 3にPython3をインストール

最近、検索したらKindleにPython3が走ることができるらしいことを知ったので、インストールしてみました。

何がいいかというと、私のペットプロジェクトが外部のサーバなしに動きます。ただ、負荷を考えずにコードを書いたのでテストは必要ですが。

もう一つの問題はライブラリやモジュールのバージョン問題です。古いコードだとどうしても不具合が出て対処するのが不可能ではないにしても難しい。

それでもサーバ無しで動くというのは魅力的なのでPytohn3をインストールしてみました。

私のKindleの知見は全てフォーラムから頂いたもので、それなしには進みません。したがってフォーラムの内容を細かいところまで解釈してから作業しています。

素材は次のurlにあります。

  • https://www.mobileread.com/forums/showthread.php?t=225030

Python3のインストール作業

まずはKindleのセキュリティ回避にMobileread Kindlet Kitを入れる必要があります。というのはPythonをインストールするにはサードパーティーのKUALが必要になるからです。

随分ご無沙汰していたのでおさらいでインストール方法を調べました。Mobileread Kindlet Kitはアーカイブ(kindle-mkk-20141129-r18833.tar.xz)を展開してUpdate_mkk-20141129-k3w-B008_install.binをルートディレクトリ(/mnt/us)におきます。そしてKindleのMenuのSettingを押して、さらにもう一度Settingを押してシステムのアップグレードを選択します。問題なければリブートしてシステムが更新します。

次にKUALをインストールします。さらにKUALのextensionsモジュール、MR Package Installerを追加します。そして/mnt/us/mrpackagesにPytohn3(Update_python3_0.14.N_k2_dx_k3_install.bin)をおきます。KUALを立ち上げてそのメニューからPython3をインストールします。

Pythonの実行ディレクトリの登録を行います。

mntroot rw
nano /etc/profile

export PATH=/usr/local/bin:/bin:/usr/bin:/usr/sbin:/sbin:/mnt/us/python3/bin

再ログインしてPythonが使えるようにします。

Python3のインストールが済んだら次にpipのインストールをします。

pipはサイトから直接インストールできるようです。

python3 -m ensurepip

これでPythonの環境整備は完了です。

試しにkindle-analog-clock、私の作ったプログラムを走らせてみました。やはり負荷が大きく、80%はCPUに取られます。一応動くのですが、Time ZoneがUTCなのでそれをなんとかしないと時計として使えません。

ゆくゆくはリビングに掲げて見栄えよくできればと考えているので、もう一つのプログラム、kindle weather displayのコードの軽量化を考えています。このプログラムはフレキシビリティを優先して無駄で読みづらくなっているので、整理すればだいぶ軽くなるでしょう。

Posted in kindle | Comments Off on Kindle 3にPython3をインストール

LibreOfficeからmysqlに接続する

Mysqlに接続する方法は3つある。しかしどれもうまくいかないので調べてみた。iodbcというものがあって、これを使うと直接接続できる。

brew install libiodbc

以前、WineのMS OfficeのodbcドライバーでSQL接続してみた記事を書いたが、最近のmacOSは64ビットオンリーなのでどうも古い32ビットアプリだと具合が悪い。それでオフィスならlibreOfficeがあるではないか、ということで使ってみた。どのくらい使えるかまだ未知数だが、見たところTables, Queries, Forms, Reportsと4つに分類されていて、データベースをアクセスしてReportsの作成できればLibreOfficeの方が良い。

Posted in macOS | Comments Off on LibreOfficeからmysqlに接続する

kindle bbc news feeds: Harry potter mode

私のペットプロジェクトのbbc news feedsは一応、完成の域(BREAKING NEWSモードを除いて)に達したのですが、ちょっと物足りないので、思いついたアイディアを試してみました。

Kindleハッカーの間ではハリーポッターモードと知られていて、映画で新聞の画面が動画になっているところからのネーミングですが、それをこのプロジェクトに使う実験をしてみました。

実現するハードルとしては、どうやってビデオをサイトからスクレイプするかということが正攻法では難しい。実験ではブラウザのアドオンを使ってダウンロードしたのですが、Pythonでできるかどうか不明です。

とりあえずどんなものかイメージするため動画をアップしました。

仕組み

大まかな流れとして、動画をまずrawvideo形式に変換します。さらにKindleで読めるgmv形式に変換します。それをgmvプレーヤーで再生するという手順です。ソースはサイトから持ってきてコンパイルします。

gcc raw2gmv.c -o raw2gmv

サイトにある情報は全画面表示ですが、このプロジェクトはボックスに動画表示するので、ソースを合わせて変更しています。kindle-tcc-1.5.tar.gzというファイルをダウンロードしてKindleに入れます。それでコードを変更したgmplayをコンパイルします。

./tccmake gmplay-1.5a

動画の再生はサーバから送り出して使うのですが、sshだと暗号化するオーバーヘッドにより15%から20%くらいCPUを使うということらしいので、ncを使います。

ffmpeg -i  bbc.mp4 -pix_fmt gray -vf "scale=560:315,pad=800:600:240:285" -f rawvideo -|./raw2gmv > bbc.gmv
gzip bbc.gmv
zcat bbc.gmv.gz | nc -l -p 5555

サイトに書いてある通りにして動画を送り出します。kindleでは次のように実行します。

nc 192.168.2.1 5555 | ./gmplay-bbc

news feedsの表示のタイミングで画像にマッピングさせて動画を再生します。

AI power

最近はAI ブームが流行りで色々と話題性が高いがフェイク問題とかにもなっている。元々ハリーポッターはダークマジックなので、ダークで追及してみました。

元の画像をAIで動画変換します。元の記事の改変となるとコンプライアンス問題が発生して相当なクレームがつきます。それなのであくまでも実験として実証です。

元の画像はこれです。

この画像をAI変換してVideoにしてKindleの記事にマッピングします。

ffmpeg -stream_loop 20 -i VidnozImageToVideo.mp4 -pix_fmt gray -vf "scale=560:315,pad=800:600:240:285" -f rawvideo - | ./raw2gmv | nc -l -p 5555

記事の内容と画像があってませんが、bbcサイトからVideoを抽出するよりはるかに簡単です。

問題はどうしてもフェイク記事っぽくなるので先に書いたようにコンプライアンスに絡んできます。

関連サイト

  • https://www.mobileread.com/forums/showthread.php?t=175834&highlight=tcc
  • https://www.mobileread.com/forums/showthread.php?t=177455&page=4
  • https://www.instructables.com/Real-Life-Harry-Potter-Moving-Portraits/
  • https://www.mobileread.com/forums/showthread.php?t=177455
  • https://www.mobileread.com/forums/showthread.php?p=2074379#post2074379
Posted in kindle | Comments Off on kindle bbc news feeds: Harry potter mode

acme.shでssl証明書を発行する

より少ないリソースで動くと言う内容を検索でみてx86ベース(32bit)でvpsの再構築をしました。

それとコンテナのlxcはできるだけメジャーなディストリビューションを使わず少ないリソースで動くOpenWrtベースで作りました。

出来立てのvpsはとっても調子がいいのですが、困った問題が出てきました。ssl証明書の発行でcertbotを使おうとしたのですが、python用のcertbotでは64ビット版rustしかなくインストールできません。そこでOpenwrtのサイトを検索したらacme.shが使えるとありました。

luci用パッケージもあるので楽々インストールできるかとたかを括っていたらどうも違うようです。

# /etc/init.d/acme start
acme: Option "keylength" is deprecated, please use key_type (e.g., ec256, rsa2048) instead.
acme: Option "webroot" is deprecated, please remove it and change your web server's config so it serves ACME challenge requests from /var/run/acme/challenge.
acme-acmesh: Running ACME for hottunalabs.net with validation_method webroot
acme-acmesh: /usr/lib/acme/client/acme.sh --renew --home /etc/acme -d hottunalabs.net
It seems that you are using sudo, please read this link first:
https://github.com/acmesh-official/acme.sh/wiki/sudo

このエラーの意味がわかからず、サイトの情報をよくみてもやはりわからないので、コマンドラインで取得する方法を調べてみました。

私流のssl証明書の取得方法

ネットワークのレイアウトは次のようになっています。

Internet --- Reverse Proxy --- Web Server1, Web Server2, Mail Server, Web Mail

一般的な証明書の取得方法はまずPort80にアクセスしてKeyを取得、CAサーバーがssl接続で申し込みをするDNSのサイトにアクセスしてそのKeyがあれば証明書を発行という流れです。

これとは別にWebサーバーのいらないacme.shのDNSで取得する方法もあり、一見便利そうですが、これには問題があり、更新時のことを考えてPort80を常に開けておかなければならないので、例えばhttpでサイトに接続しようとした場合、http接続からhttps接続に変換してくれない。これは使い勝手が悪くなるので、残念ながらこの方法は使えない。それで次のような方法でやってみました。

まずはProxyに認証用の仮サイトをPort80を指定して作る。必要なサイトはhttpからhttpsに変換するコードを入れる。

次にNginxの設定にacmeで取得したキーを読めるようにする。

参考:設定

Nignx

Reverse Proxy:

nginx.conf

stream {
    map $ssl_preread_server_name $name {
        labs.hottunalabs.net            wp_labs_backend;
        travel.hottunalabs.net          wp_travel_backend;

    upstream wp_labs_backend {
        server 10.0.0.2:443;
        server [2001:ce8:77:e::5654:a2]:443;
    }

    upstream wp_travel_backend {
        server 10.0.0.3:2443;
        server [2001:ce8:77:e::5654:a3]:2443;
    }

    server {
        listen      443;
        proxy_connect_timeout 8s;
        proxy_timeout 16s;
        proxy_pass $name;
        ssl_preread on;
    }

    log_format basic '$ssl_preread_server_name $remote_addr [$time_local] '
       '$protocol $status $bytes_sent $bytes_received '
       '$session_time "$upstream_addr" '
       '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

    access_log /var/log/nginx/stream.access.log basic;
    error_log /var/log/nginx/stream.error.log;
}

sites-available/proxy

1箇所、Port80でアクセスできるようにする。

server {
    if ($host = hottunalabs.net) {
        return 301 https://labs.hottunalabs.net$request_uri;
    } 

    location ~ /.well-known/acme-challenge {
        allow all;
    }

    server_name   hottunalabs.net;
    root /var/run/acme/challenge;
    listen         80;
    listen    [::]:80;
}

他はhttpsサイトに接続できるようにする。

server {
    if ($host = labs.hottunalabs.net) {
        return 301 https://$host$request_uri;
    }

    server_name   labs.hottunalabs.net;
    return 301    https://labs.hottunalabs.net$request_uri;

    location ~ /.well-known/acme-challenge {
        allow all;
    }

    listen         80;
    listen    [::]:80;
}

使わないサブドメインは404を返すかほかのサブドメインに飛ばす。

server {
    if ($host = www.hottunalabs.net) {
        return 301 https://labs.hottunalabs.net$request_uri;
    } 

    location ~ /.well-known/acme-challenge {
        allow all;
    }

    listen         80;
    listen    [::]:80;
    server_name   www.hottunalabs.net;
    return 404;

}

Backend Server:

server {
    listen         443 ssl http2;
    listen    [::]:443 ssl http2;

    server_name labs.hottunalabs.net;
    root /var/www/labs/wordpress;

    index index.php;

    client_max_body_size 2M;

    proxy_ssl_name      labs.hottunalabs.net;
    proxy_ssl_server_name       on;

    ssl_certificate /etc/acme/hottunalabs.net/hottunalabs.net.cer;
#    ssl_certificate /etc/acme/hottunalabs.net/fullchain.cer;
    ssl_certificate_key /etc/acme/hottunalabs.net/hottunalabs.net.key;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_dhparam /etc/acme/ssl-dhparams.pem;

    # Use these if you built with OpenSSL.
    ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_ecdh_curve secp384r1;

    ssl_prefer_server_ciphers   on;
    ssl_protocols TLSv1.3 TLSv1.2;


    location / {
        # This is cool because no php is touched for static content.
        # include the "?$args" part so non-default permalinks doesn't break when using query string
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ /.well-known/acme-challenge {
        allow all;
    }

... 省略(wordpressのサイトの細かい設定) ...

    location ~ \.php$ {
        #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        include fastcgi.conf;
        fastcgi_intercept_errors on;
        fastcgi_pass php;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }

    location ~ ^/\.user\.ini {
       deny all;
    }
}

必ずこのラインlocation ~ /.well-known/acme-challengeを入れて外部から読めるようにしておく。

ここまでのざっくりとサーバーの設定でssl認証の取得が可能になります。

次はssl証明書をどうやってサーバー間で共有するかという問題、これはlxcを使っているのでoverlayで共有できるので、意外と簡単に解決できる。ただいくつかの制約があって、openwrtのサイトを見るとチャレンジkeyは/var/run/acmeに入れると書いてある。しかしoverlayしようとすると/run(/var/run)上にはなぜかできないので、/var/run/acmeを/var/www/htmlにシンボリックリンクを貼る。そしてBackend Serverの/var/www/html上にoverlayさせる。/var/www/html/.well-knownを各サーバーにシンボリックリンクを貼って(.well-known -> /var/www/html/acme/.well-known)、各サイトから見えるようする、という具合で解決する。

LXC: Backend Server

lxc.mount.entry = /var/lib/lxc/srv1-proxy/overlay/delta/var/run/acme/challenge var/www/html/acme none rbind,create=dir,optional 0 0
lxc.mount.entry = /var/lib/lxc/srv1-proxy/overlay/delta/etc/acme etc/acme none rbind,optional 0 0
lxc.apparmor.raw =  mount,

WebサーバーもLXCも設定ができたら、acme.shを実行してssl証明書を取得する。

sudo /usr/lib/acme/client/acme.sh -d hottunalabs.net -d www.hottunalabs.net -d labs.hottunalabs.net -d travel.hottunalabs.net -d x1.hottunalabs.net -d x2.hottunalabs.net --keylength 2048 --accountemail xxxxxxxxxxxxxx@hotmail.com --server letsencrypt --webroot /var/run/acme/challenge --issue --home /etc/acme --debug

acmeの方法はcertbotに比べて使い方が難しいが、一度設定すれば後はリニューアルをするだけの簡単作業になりますが、たどり着くまでがなかなか苦戦するという今回の経験でした。

参考

  • https://github.com/acmesh-official/acme.sh
  • https://www.reddit.com/r/Proxmox/comments/10ehfhc/zfs_dataset_bind_mount_issue_how_do_i_mount/
Posted in Linux, Networking, WordPress | Comments Off on acme.shでssl証明書を発行する

Kindle bbc news feeds

以前にKindle weather displayの他にニュースフィードを作ったのですが、あまり使い勝手が良くなく放置していました。Kindle weather displayをアップデートしてついでに作り直してみました。

以前のプログラムの欠点はフィードを表示するだけでサイトに飛ぶことができない。そこでQRコードが使えることがわかったのでそれでサイトのリンクを貼ることで使い勝手の向上させることにしました。

Posted in kindle | Comments Off on Kindle bbc news feeds

Kindle Weather Display (update)

OpenWeatherMapのonecallがv3.0になるとの通知が来てたので、ついでにアプリをアップデートすることにしました。日常使っていて結構気に入っていたのでアップデートにはちょうどいい機会と思っていたのですが、v3.0は契約方法が変わってしまって使えないということがわかりました。今までのv2.5は7月で終了なので、このプロジェクトは残念ながらここで打ち止めになります。

ツイッターはちょうどアラートに合うので作ってみました。QRコードをスマホ等で呼び込むとその詳しいアラートサイトに飛びます。

そのほかに現在の天気のアイコンにサブアイコンをつけて天気の傾向を把握しやすくしました。

追記:5月17日

Tomorrow.Io APIを追加しました。

Posted in kindle | Comments Off on Kindle Weather Display (update)