ゆるブロ

ゆる~くてちた(てたろ)のIT系?ブログ

すいっちぼっと温湿度計でもっと遊ぶ

はじめに

宅内や外に置かれているスイッチボット温湿度計さんたち。
彼らのデータはアプリを介してでしか確認してきませんでした。
理由は、楽だったから。
最近はちゃんとデータとして蓄積したいなあという思いが強くなったので、やってみることにしました!
今日中にうまくいくといいな。GW最終日だから。

構成はこんな感じ。

項目 詳細
取得先 Switch bot API
取得ツール Python
DB Influxdb
表示 Grafana、自作画面

DBはよく使ってるPostgresqlでもいいんだけど、映えがないのでInflxdbを使ってみることにしました。
各種アプリはProxmoxサーバ内に適当に立てます。
pythonの開発環境はDockerで適当に準備。DBと表示は開発も本番もあまりないのでまあいいか精神で。

参考文献

Switch bit APIは触ったことないので、とりあえずでやってみることにしました。
公式のgithubにやり方書いてありそうなのでまずはそこから。イントロから読んでいきましょ。 github.com

Getting Startedに書いてあることからトークンゲット。
コンテナ作って実行しようとしたらエラー。なるほどね。Dockerfileのパスを指定するためにピリオドを入れるのね。

PS C:\Users\***> docker build
ERROR: docker: 'docker buildx build' requires 1 argument

Usage:  docker buildx build [OPTIONS] PATH | URL | -

Run 'docker buildx build --help' for more information

というか、dockerをちゃんとわかってなかったので調べる。 docs.docker.jp zenn.dev zenn.dev

あれやこれややって無事起動。
公式のgithubにあるサンプルコードはgetするところまでなかったので他を探します。 qiita.com zenn.dev

tannyさんのものを参考にちょちょいとやりやすいように改造。
バイスリストは一括取得できそうだけど、デバイスのステータスは一括取得できないか。まあそりゃそうか。
1日10,000回まで呼び出しできるようなので、10000/24/60=6.94->6台までなら1分単位でデータの蓄積ができそう。

status = bot.get_device_status(d)

ここの引数はd.get("deviceId")にしないとjsonが全部入ってっちゃっておかしくなってた。
正しい内容はgithub見ないとだね。

あとは、不思議なエラーに見舞われたけど、先人の知恵があって助かった。 jskangaroo.hatenablog.com

influxdbはちょっと前にLXCで作ってたので、そこにswitchbotバケットを作って突っ込んでみる。

scaduleでタスク実行させるときに、関数の引数でうまく動いてなかったっぽいけど先人の知恵で解決。 di-acc2.com いろんなところで書いてあるsleep(1)がおまじないすぎてそこもちょっと気持ち悪い。

あとは、VM立てたときにこの記事も役に立った。先人の知恵ありがとう。 nanchovy.com

ただしVSCodeからRemote SSHしたとき,この設定を上書きすることがある. 僕の場合,普通にSSHしたときは/bin/bashが起動するのに,VSCodeのRemote SSHからターミナルを起動したときだけ/bin/shが起動してしまうようになっていた. この対策としてはVSCodeの基本設定の中でリモートの「Terminal › Integrated › Default Profile」で起動したいシェルを指定すればよい.

完走した感想

こんな感じでデータが見えるようになりましたとさ! 数年データを集めてからが面白くなりそうなんだよなあ

Switchbotdata into Influxdb

webサイトの作成をしてみた

はじめに

自分のwebサイトを作りたくなったのでやってみます!
いい感じのテンプレをgithubにあげてくださっているのを見つけたのでそれをベースにします。
テンプレはsvelteを使っているようなので、その環境づくりも併せてやります。
dockerにするかローカルにするかめちゃ悩んでローカル構築からやってみることにしました。
ローカルが汚れて微妙ならdockerに移行でいいかな~ぐらいの軽い気持ち。

(2025.5.6 0時更新)
更新箇所まで飛ぶのが面倒な人用。以下のサイトにアクセスできるようになりました。
tetaro.jp gallery.tetaro.jp

参考文献

まずはnodejsの環境づくりから。公式でnvm-windowsが推されているようなので、疑い無しにいきますかね。

learn.microsoft.com

調べている人もいるみたい。メモがてら、ペタリ。 qiita.com

zenn.dev

インストール完了後、npmのバージョンチェックしようとしたらPSスクリプトが実行できないエラー発生。

PS C:\Users\***> nvm use 22.15.0
Now using node v22.15.0 (64-bit)
PS C:\Users\***> npm --version
npm : このシステムではスクリプトの実行が無効になっているため、ファイル C:\nvm4w\nodejs\npm.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ npm --version
+ ~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
PS C:\Users\***> Get-ExecutionPolicy
Restricted

調査している人曰く、デフォルトはRemoteSinedだと言っている。 使っているマシンはwin11Proのインストールからだから、そこは違うなあと感じた。サンプル出力は確かにそうだけど、インストール直後のデフォルトはちがうんじゃないかなあと。 zenn.dev 公式もペタリ。 learn.microsoft.com

まあ、ポリシー変えてやりますかねえ。公式に記載のとおり、カレントユーザのポリシーをRemoteSignedに。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

ポリシーが変わったことを確認しつつ、npmコマンド(実態はPSスクリプト)が実行できることを確認。

PS C:\Users\***> Get-ExecutionPolicy -Scope CurrentUser
RemoteSigned
PS C:\Users\***> npm --version
10.9.2

テンプレはこの人のものをいただきます。ありがとう。 github.com

yarnを使う必要がありそうなので、npmからインストール。公式にかいてありました。教えてくれた先人の記事、ありがとう。 zenn.dev classic.yarnpkg.com

1回やって、勝手にたくさんダウンロードされた。 npmの設定であるpackage.jsonをいい感じに自分用へ編集しておいたほうがよさそう。

PS C:\Users\***> npm install --global yarn

added 1 package in 661ms
PS C:\Users\***> yarn --version
1.22.22
PS C:\Users\***> npm list
terminal@0.0.1 C:\Users\***
+-- UNMET DEPENDENCY @sveltejs/vite-plugin-svelte@^3.1.1
+-- UNMET DEPENDENCY @tsconfig/svelte@^5.0.4
+-- UNMET DEPENDENCY autoprefixer@^10.4.20
+-- UNMET DEPENDENCY postcss@^8.4.41
+-- UNMET DEPENDENCY svelte-check@^3.8.5
+-- UNMET DEPENDENCY svelte@^4.2.19
+-- UNMET DEPENDENCY tailwindcss@^3.4.10
+-- UNMET DEPENDENCY tslib@^2.6.3
+-- UNMET DEPENDENCY typescript@^5.5.4
`-- UNMET DEPENDENCY vite@^5.4.12

npm error code ELSPROBLEMS
npm error missing: @sveltejs/vite-plugin-svelte@^3.1.1, required by terminal@0.0.1
npm error missing: @tsconfig/svelte@^5.0.4, required by terminal@0.0.1
npm error missing: autoprefixer@^10.4.20, required by terminal@0.0.1
npm error missing: postcss@^8.4.41, required by terminal@0.0.1
npm error missing: svelte-check@^3.8.5, required by terminal@0.0.1
npm error missing: svelte@^4.2.19, required by terminal@0.0.1
npm error missing: tailwindcss@^3.4.10, required by terminal@0.0.1
npm error missing: tslib@^2.6.3, required by terminal@0.0.1
npm error missing: typescript@^5.5.4, required by terminal@0.0.1
npm error missing: vite@^5.4.12, required by terminal@0.0.1
npm error A complete log of this run can be found in: C:\Users\***-debug-0.log
PS C:\Users\***> yarn --version
1.22.22
PS C:\Users\***> npm install yarn
npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported

added 178 packages, and audited 179 packages in 28s

35 packages are looking for funding
  run `npm fund` for details

2 moderate severity vulnerabilities

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
npm notice
npm notice New major version of npm available! 10.9.2 -> 11.3.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.3.0
npm notice To update run: npm install -g npm@11.3.0
npm notice
npm notice
npm notice New major version of npm available! 10.9.2 -> 11.3.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.3.0
npm notice To update run: npm install -g npm@11.3.0
npm notice

んで、次のコマンドでうごきましたとさ

PS C:\Users\***> yarn dev
yarn run v1.22.22
$ vite
Forced re-optimization of dependencies

  VITE v5.4.12  ready in 5673 ms

  ➜  Local:   http://localhost:3000/
  ➜  Network: use --host to expose
  ➜  press h + enter to show help
Browserslist: caniuse-lite is outdated. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme

あとは、自分なりに改造。この人が結構すごい感じに改造してるので参考にさせてもらいました。ありがたや。 yoshisaur.hatenablog.jp github.com

svelteでdangerouslySetInnerHTML()をやりたくて調べたら出てきてくれました。ありがたや~。 zenn.dev History.svelteのwhitespace-preクラスの{output}{@html output}にすればいい感じだね。簡単!
F12でタグ見てどこの機能が出力しているのかチェックするという力業で見つけたのは内緒。中身ちゃんとわかってないのがばれますな~。

リンクを新規タブで開いてほしいなあと思って調べたときにいろいろ出てきたのでペタリ。 www.freecodecamp.org zenn.dev cinci.jp

タブナビングは初めて聞いた qiita.com

最近はやらなくても大丈夫っぽい?古いバージョンのブラウザを使っていることを想定してnoopenerだけ明示的に指定しておくのがいいかな?

ロゴは次のサイトつかってつくりまんた。jpは入れなくてええやろ~ってとこ。 patorjk.com

静的サイトにしてホスティングサービスにポイ置きできたらいいな~ってことで作成。 svelte.jp

使い方 npm i -D @sveltejs/adapter-static を実行してインストールし、svelte.config.js にこの adapter を追加します: …そして prerender オプションを最上位のレイアウト(root layout)に追加します:

import adapter from '@sveltejs/adapter-static';

export default {
    kit: {
        adapter: adapter({
            // default options are shown. On some platforms
            // these options are set automatically — see below
            pages: 'build',
            assets: 'build',
            fallback: undefined,
            precompress: false,
            strict: true
        })
    }
};
// This can be false if you're using a fallback (i.e. SPA mode)
export const prerender = true;

とのことですのでやってみましょう。

PS C:\Users\***> npm i -D @sveltejs/adapter-static

added 12 packages, and audited 191 packages in 16s

36 packages are looking for funding
  run `npm fund` for details

5 vulnerabilities (3 low, 2 moderate)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
PS C:\Users\***> npm run build

> terminal@0.0.1 build
> vite build

vite v5.4.12 building for production...
transforming (1) index.htmlBrowserslist: caniuse-lite is outdated. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
✓ 42 modules transformed.
dist/index.html                   0.63 kB │ gzip:  0.40 kB
dist/assets/index-CZDSACtd.css    6.03 kB │ gzip:  1.84 kB
dist/assets/index-_KnM6OvQ.js   101.35 kB │ gzip: 28.12 kB
✓ built in 462ms

ということでできました~。

途中遭遇したエラー。

入力ファイルを上書きすることになるため、ファイル +layout.js を書き込めません。

suzaku-tec.hatenadiary.jp

「入力ファイルを上書きすることになるため、ファイル 'XXX.js' を書き込めません。」の対応方法 typescriptのコンパイルオプションで、出力先を指定できるのだが、それを指定してないとエラー判定される。 自分のところは、webpackにて出力していたので、挙動的には問題ないのだが、エラーとして判定されるのが癪なので、以下の対応をする。 { "compilerOptions": { "outDir": "dist" } } outDirさえあれば、とりあえず回避可能。

ローカルストレージにアクセスしたくなったので、この辺つかってみる。 developer.mozilla.org

別タブを裏で開くのってできるのかな・・?調べた形跡をぺたり。 developer.mozilla.org サファリはopenメソッドを許可しないのね。要注意か。

closeもさせたいよね。 developer.mozilla.org

一応google analyticsもつけてみようと思います。問題起こったら抜きましょうね。 優劣がわからんな・・・ joyofcode.xyz tamrazyan.com www.mindevice.net 自動生成をそのまま使うか、svelteでちょろっとコンポーネント書くかって感じ?
アナリティクスで自動生成させたときのコメントに従いましょうかね。

以下は、このアカウントの Google タグです。このタグをコピーして、ウェブサイトのすべてのページのコード( 要素の直後)に貼り付けます。各ページに複数の Google タグを実装することはできません。

DNSレコードにとりあえず入れたらなんかうまくページが表示されないし、StaticではサーバURLの変更ができない。

aレコードに登録されているipアドレスが指定のものではありません。

ってStaticから怒られる。
構成は次のとおり。
DNS:Xserver Domain
 他のサービスでも使っているのでDNSレコードあり
ホスティング:Xserver Static

DNSサービス⇒NSはStaticの指定に変更したらStaticの設定は通った。けどもアクセスがちゃんとできない。独自ドメインの設定に時間がかかってるっぽいか?
とりあえず待ち状態。

(2025.5.6 0時更新)
どうやら独自ドメインの設定が反映された模様。
メインサイトとギャラリーサイトの両方にアクセスできるようになりました。
ただ、メインサイト側はSSLの設定ができないので、もうしばらく様子見は続きそう。
tetaro.jp gallery.tetaro.jp

おおむね完走した感想

(2025.5.6 0時更新) SSLの設定ももう少し時間がかかるものかもしれないということで待ってみる。エラーしまくって時間BANされているとかあるのかな。

lxcでお試しwireguard in alpine

はじめに

この記事は、↓の続きになってます。 tetita.hateblo.jp

ローカルマシン内でwireguardのネットワークを組んで他からアクセスできるようになってるのかチェックできればOK!

参考文献

www.wireguard.com やっぱ、公式ドキュメントを読むに限るね!

apk add -U wireguard-tools

とりあえずこれを実行すればよいらしい

qiita.com apkのオプションがよくわからんのでその辺もチェック。

Maximum AGE (in minutes) for index in cache before it's refreshed
キャッシュ内のインデックスが更新されるまでの最大保存期間(分)

つまるとこ、-Uオプションは最新で更新してくれるって・・こと・・?

実行したところ、使えないと帰ってきてしもた。

lxc-nginx-test:~# apk add -U wireguard-tools
ERROR: unable to select packages:
  wireguard-tools (no such package):
    required by: world[wireguard-tools]

zenn.dev 十中八九、見ているリポジトリにないんだろうなあということで検索! pkgs.alpinelinux.org いやでもある気がするんだが・・・ mirrors.alpinelinux.org qiita.com リポジトリのリスト見てロケーションが日本のやつに変更。

https://ap.edge.kernel.org/alpine/v3.21/main
https://ap.edge.kernel.org/alpine/v3.21/community

今度はちゃんとできた!

lxc-nginx-test:~# apk add wireguard-tools
(1/15) Installing wireguard-tools-wg (1.0.20210914-r4)
(2/15) Installing ifupdown-ng-wireguard (0.12.1-r6)
(3/15) Installing libelf (0.191-r0)
(4/15) Installing libmnl (1.0.5-r2)
(5/15) Installing iproute2-minimal (6.11.0-r0)
(6/15) Installing ifupdown-ng-iproute2 (0.12.1-r6)
(7/15) Installing libxtables (1.8.11-r1)
(8/15) Installing iproute2-tc (6.11.0-r0)
(9/15) Installing iproute2-ss (6.11.0-r0)
(10/15) Installing iproute2 (6.11.0-r0)
Executing iproute2-6.11.0-r0.post-install
(11/15) Installing openresolv (3.13.2-r1)
(12/15) Installing wireguard-tools-wg-quick (1.0.20210914-r4)
(13/15) Installing ifupdown-ng-wireguard-quick (0.12.1-r6)
(14/15) Installing wireguard-tools (1.0.20210914-r4)
(15/15) Installing wireguard-tools-openrc (1.0.20210914-r4)
Executing wireguard-tools-openrc-1.0.20210914-r4.post-install
*
* To use the WireGuard OpenRC script, you need to create a symbolic link to it with the configuration name:
*     ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0
* And then call it instead:
*     rc-service wg-quick.wg0 start
*
Executing busybox-1.37.0-r12.trigger
OK: 26 MiB in 71 packages

wiki.alpinelinux.org alpineの公式にはちょっと違うこと書いてあるけど、まあいいでしょう。 iptablesも入れておきましょ。

lxc-nginx-test:~# apk add iptables
(1/3) Installing libnftnl (1.2.8-r0)
(2/3) Installing iptables (1.8.11-r1)
(3/3) Installing iptables-openrc (1.8.11-r1)
Executing busybox-1.37.0-r12.trigger
OK: 28 MiB in 74 packages

いい感じの場所にtouchでファイル作って、confを作成

lxc-nginx-test:/etc/wireguard# pwd
/etc/wireguard
lxc-nginx-test:/etc/wireguard# ls
wg0.conf

設定後に言われたシンボリックリンクを作って、スタートしてみる。

lxc-nginx-test:/etc/wireguard# ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0
lxc-nginx-test:/etc/wireguard# rc-service wg-quick.wg0 start
 * Caching service dependencies ... [ ok ]
 * Starting WireGuard via wg-quick(8) for wg0 ...[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add XXX.XXX.XXX.XXX dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] ip -4 route add XXX.XXX.XXX.XXX/XX dev wg0
 [ ok ]
lxc-nginx-test:/etc/wireguard# ping XXX.XXX.XXX.XXX
PING XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX): 56 data bytes
64 bytes from XXX.XXX.XXX.XXX: seq=0 ttl=64 time=1.206 ms
64 bytes from XXX.XXX.XXX.XXX: seq=1 ttl=64 time=0.547 ms
^C
--- XXX.XXX.XXX.XXX ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.547/0.876/1.206 ms

いったん、つながっている雰囲気はあり。

wireguard-server の側からつながっているかチェック。 サーバ側ごにょごにょしたらつながった気配あり(本当か??)

root@fce3484104e4:/# curl XXX.XXX.XXX.XXX
hello world alpine LXC nano index.html !

と思ったらまたつながらなくなったので、何かが悪い。 間にNATがいるのでそのテーブルが保持できなくなっていると想定。
クライアント側にPersistentKeepAlive = 25の設定を追加。単位は秒。 公式のクイックスタートに書いてあった。やっぱちゃんと読んでないのがいけないね。 www.wireguard.com

NAT and Firewall Traversal Persistence By default, WireGuard tries to be as silent as possible when not being used; it is not a chatty protocol. For the most part, it only transmits data when a peer wishes to send packets. When it's not being asked to send packets, it stops sending packets until it is asked again. In the majority of configurations, this works well. However, when a peer is behind NAT or a firewall, it might wish to be able to receive incoming packets even when it is not sending any packets. Because NAT and stateful firewalls keep track of "connections", if a peer behind NAT or a firewall wishes to receive incoming packets, he must keep the NAT/firewall mapping valid, by periodically sending keepalive packets. This is called persistent keepalives. When this option is enabled, a keepalive packet is sent to the server endpoint once every interval seconds. A sensible interval that works with a wide variety of firewalls is 25 seconds. Setting it to 0 turns the feature off, which is the default, since most users will not need this, and it makes WireGuard slightly more chatty. This feature may be specified by adding the PersistentKeepalive = field to a peer in the configuration file, or setting persistent-keepalive at the command line. If you don't need this feature, don't enable it. But if you're behind NAT or a firewall and you want to receive incoming connections long after network traffic has gone silent, this option will keep the "connection" open in the eyes of NAT.
NATおよびファイアウォールトラバーサルの持続性 WireGuardは、デフォルトでは使用されていないときは可能な限り静かに動作するように努めます。これは、通信量の多いプロトコルではありません。ほとんどの場合、ピアがパケットを送信したい場合にのみデータを送信します。パケットの送信を要求されていない場合は、再度要求されるまでパケットの送信を停止します。ほとんどの構成では、この方法は問題なく動作します。しかし、ピアがNATまたはファイアウォールの背後にある場合、パケットを送信していない場合でも着信パケットを受信できるようにしたい場合があります。NATおよびステートフルファイアウォールは「接続」を追跡するため、NATまたはファイアウォールの背後にあるピアが着信パケットを受信するには、定期的にキープアライブパケットを送信して、NAT/ファイアウォールマッピングを有効に保つ必要があります。これはパーシステントキープアライブと呼ばれます。このオプションを有効にすると、キープアライブパケットがinterval秒ごとにサーバーエンドポイントに送信されます。様々なファイアウォールで動作する適切な間隔は25秒です。 0に設定すると、この機能はデフォルトでオフになります。ほとんどのユーザーはこの機能を必要としないため、WireGuardの通信頻度が若干高くなります。この機能は、設定ファイルでピアに PersistentKeepalive = フィールドを追加するか、コマンドラインで persistent-keepalive を設定することで指定できます。この機能が不要な場合は、有効にしないでください。ただし、NATまたはファイアウォールの背後で、ネットワークトラフィックが停止した後も長時間接続を受信したい場合は、このオプションによりNAT側で「接続」が開いた状態になります。

というわけで、キープアライブを設定したらうまくいきました。

完走した感想

ローカル環境でうまくいったようなので、本番環境に投入していきましょう~
全部うまくいったら切り出しでQiitaに載せていこうかな。
それではまた。

lxcでお試しnginx in alpine

はじめに

とりあえず動作確認をしたくてlxcのalpineを準備。
動作確認まで進めるにあたってやったことをまとめておく。
次やるときはシェルにでもしたら高速化間違いない(やらない)。

環境

lxc-nginx-test:~# cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.21.3
PRETTY_NAME="Alpine Linux v3.21"

参考文献

zenn.dev

blog.progress-ng.com

blog.adachin.me

このままrc-statusと打ってもエラーが出てしまうので以下の設定をします。

このまま打ってエラーは出なかった。
というか、最初から入ってた感あるな。 実行結果はこんな感じ。

lxc-nginx-test:~# apk add openrc
OK: 17 MiB in 42 packages
lxc-nginx-test:~# rc-status
Runlevel: default
 crond                                                                   [  started  ]
 sshd                                                                    [  started  ]
 networking                                                              [  started  ]
Dynamic Runlevel: hotplugged
Dynamic Runlevel: needed/wanted
 localmount                                                              [  started  ]
Dynamic Runlevel: manual

nginxをインストールしようとしたらエラー発生

lxc-nginx-test:~# apk add nginx
(1/3) Installing pcre (8.45-r3)
ERROR: pcre-8.45-r3: temporary error (try again later)
(2/3) Installing nginx (1.26.3-r0)
Executing nginx-1.26.3-r0.pre-install
Executing nginx-1.26.3-r0.post-install
(3/3) Installing nginx-openrc (1.26.3-r0)
Executing busybox-1.37.0-r12.trigger
1 error; 22 MiB in 53 packages

でもなんかインストールされてるぽい。

lxc-nginx-test:~# apk add pcre
OK: 24 MiB in 56 packages
lxc-nginx-test:~# apk list|grep pcre
pcre-8.45-r3 x86_64 {pcre} (BSD-3-Clause) [installed]

とりあえず起動させて動作確認

lxc-nginx-test:~# rc-service nginx start
 * Caching service dependencies ... [ ok ]
 * Starting nginx ... [ ok ]
lxc-nginx-test:~# rc-status
Runlevel: default
 crond                                                                   [  started  ]
 sshd                                                                    [  started  ]
 networking                                                              [  started  ]
Dynamic Runlevel: hotplugged
Dynamic Runlevel: needed/wanted
 localmount                                                              [  started  ]
Dynamic Runlevel: manual
 nginx                                                                   [  started  ]
lxc-nginx-test:~# curl localhost
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
lxc-nginx-test:~# 

404エラーになってるね。

qiita.com qiita.com

あちらこちら見た結果、default.confが常に404返すようになっていたからだった。 ファイル名変えて、nginx.confにserverブロック追加したら動いた。 echoコマンドの実行にしくじってるのはご愛嬌!

lxc-nginx-test:/var/www/html# echo "hello world alpine LXC !!!" > index.html
echo "hello world alpine LXC nano index.html !" > index.html
lxc-nginx-test:/var/www/html# mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf_bk
lxc-nginx-test:/var/www/html# rc-service nginx restart
 * Stopping nginx ... [ ok ]
 * Starting nginx ... [ ok ]
lxc-nginx-test:/var/www/html# curl localhost
hello world alpine LXC nano index.html !
        server {
        # 80番ポート(http)でリクエストを受け付ける
        listen       80;
        # ドメイン名の指定
        server_name  localhost;

        location / {
            # リクエストされた際にドキュメントがある場所を指定
            root   /usr/share/nginx/html;
            # リクエストを受けた際に提供するファイル名
            index  index.html index.htm;
        }
    }

実行したコマンドの一部はこちら。

setup-alpine
apk update
apk upgrade
apk add sudo nano openrc curl
apk add nginx
rc-service nginx start
rc-status
curl localhost

セットアップメモ

lxc-nginx-test:~# setup-alpine


 ALPINE LINUX INSTALL
----------------------

 Interface
-----------
Available interfaces are: eth0.
Enter '?' for help on bridges, bonding and vlans.
Which one do you want to initialize? (or '?' or 'done') [eth0] done
/usr/sbin/setup-interfaces: .: line 514: can't open './*.conf': No such file or directory

 Root Password
---------------
Changing password for root
New password: 
Retype password: 
passwd: password for root changed by root

 Timezone
----------
Africa/            Egypt              Iran               Poland
America/           Eire               Israel             Portugal
Antarctica/        Etc/               Jamaica            ROC
Arctic/            Europe/            Japan              ROK
Asia/              Factory            Kwajalein          Singapore
Atlantic/          GB                 Libya              Turkey
Australia/         GB-Eire            MET                UCT
Brazil/            GMT                MST                US/
CET                GMT+0              MST7MDT            UTC
CST6CDT            GMT-0              Mexico/            Universal
Canada/            GMT0               NZ                 W-SU
Chile/             Greenwich          NZ-CHAT            WET
Cuba               HST                Navajo             Zulu
EET                Hongkong           PRC                leap-seconds.list
EST                Iceland            PST8PDT            posixrules
EST5EDT            Indian/            Pacific/

Which timezone are you in? (or '?' or 'none') [UTC] Japan

 * Caching service dependencies ... [ ok ]
 * Stopping busybox crond ... [ ok ]
 * Caching service dependencies ... [ ok ]
 * Starting busybox crond ... [ ok ]

 Proxy
-------
HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] none

 APK Mirror
------------
 (f)    Find and use fastest mirror
 (s)    Show mirrorlist
 (r)    Use random mirror
 (e)    Edit /etc/apk/repositories with text editor
 (c)    Community repo enable
 (skip) Skip setting up apk repositories

Enter mirror number or URL: [1] 1

Added mirror dl-cdn.alpinelinux.org
Updating repository indexes... done.

 User
------
Setup a user? (enter a lower-case loginname, or 'no') [no] no
Which ssh server? ('openssh', 'dropbear' or 'none') [openssh] openssh
Allow root ssh login? ('?' for help) [prohibit-password] ? 
Valid options are:

  yes                root will be able to login with password or ssh key

  no                 root will not be allowed to login with ssh

  prohibit-password  root will be able to login with ssh key but not with
                     password
Allow root ssh login? ('?' for help) [prohibit-password] no
 * service sshd added to runlevel default
 * Caching service dependencies ... [ ok ]
ssh-keygen: generating new host keys: RSA ECDSA ED25519 
 * Starting sshd ... [ ok ]

完走した感想

とりあえず動いたのでヨシ!
次はwireguardインストールして違うセグメントにいるサーバからアクセスしてみよう。

いろいろチャレンジしているけども記事にできていない件について

はじめに

最近ブログ更新できていないですが、訳があるということを記載しておきたい。

前から悩んでいたが、投稿しながらやると1日で進められるペースが落ちるのでどうしたものかと思っていたのだ。

結果、ある程度形になってから投稿することに決めた。

 

(2025.5.2 追記)

ある程度形になってからだと時間がかかりすぎるので、出して更新する方針に変更。

ゲームのDLCと同じパターンだね。

完走した感想

壮大な計画(盛りすぎ)が走っているので、こうご期待!!!

もうちょい(もうちょいではない)すればまとめて投稿できるかも。

HackRF Oneが届いたのでSoftware Defined Radioをとにかく動かしてみる件

はじめに

最近ずっとHackRF Oneが欲しくてほしくてたまらなかったのですが、ついに手に入れました。中華品をアリエクで購入しています。1か月かかりました。

開封報告等は後で記事にしようと思いますが、とにかく動かしてみようという回です。

参考文献

engineer-climb.com

上記を参考に内部クロック精度を上げるためのTCXOをアドオンしています。

 

engineer-climb.com

SDR Consoleというのを試しました。

 

完走した感想

うまく聞けました☺

招待制の投稿サイトを作ってみたくなった件

はじめに

先日、某友人と技術について熱い(?)議論をさせていただいたときに、思いついたサービスです。とあるアプリに向けたデータを投稿するサイトになります。

まあまずは技術的にどんな感じでできるのか試しにやってみようというところです。

ひとまず、Wordpress を使ってみようと思います。

本番はレンタルサーバでやればよいと思いますが、ひとまず家に転がっていたラズパイをつかって、dockerでサクッと構築できたらいいなってところです。

f:id:TeTiTa:20211114202123p:plain

Wordpress on docker into raspberrypi

参考文献

初期構築は以下がおすすめ。

qiita.com

docker-composeまでインストールできたら、次のサイトを参考にdocker-compose.ymlを作ってdocker-compose upすれば出来上がり。

raspida.com

私の場合、準備したのがラズパイ3B+だったのが影響したのか、DBがうまく起動しませんでした。そのため、dbをlinuxserver/mariadb:latestからjsurf/rpi-mariadb:latestに変更しました。あとは外部向けのportも少しいじっています。

参考:ラズパイのカーネル

Linux raspberrypi 5.10.78-v7+ #1484 SMP Thu Nov 11 16:34:56 GMT 2021 armv7l

画面のイメージは次のサイトを参考に変更してみました。

techlive.tokyo

Wordpressはテーマを変更。他はいじってません。

公開サイト名にDDNSドメイン名を指定。

宅内ルータにポート転送の設定を追加。

 

あとはBootstrapを使うとよりモダンなデザインになりそう??

getbootstrap.jp


WordpressAPIに対応しているので、コマンドで叩けばアプリ等から投稿とかもできそう。

kinsta.com

 

完走した感想

ひとまずWordpressをつかって招待制の投稿サイトはつくれそうな感じがしました。

今日イチ時間かかったのが、DB起動しなかったところは内緒!!
無料レンタルサーバ借りたら多分すぐにできたんだろうなあ(白目)

無料レンタルサーバ借りると広告出ちゃうんだけどね。

www.xfree.ne.jp