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

2024年3月23日土曜日

Windows コンテナで Node.js アプリケーションをシングルバイナリにする

今回は、 Node.js アプリケーションのシングルバイナリ化をやってみる。

対象のアプリケーションは devcontainers/cli

nexe/nexeNode.js v21 の Single executable applications の 2 パターンでやってみる。

前提

  • OS: Windows 11 Pro 23H2 ビルド 22631.3155
  • Docker Desktop: Version 4.28.0 (139021)
  • 使用イメージ: mcr.microsoft.com/windows/servercore:ltsc2022

コンテナ起動

Node.js のビルドにはたくさんメモリが必要なので、 -m で明示的に指定。

docker run -it --rm --cpus 20 -m 16G -v "$(pwd):C:\dist" mcr.microsoft.com/windows/servercore:ltsc2022 powershell.exe

ビルド環境構築

開発ツール一式をインストール

Set-ExecutionPolicy Unrestricted -Force
iex ((New-Object System.Net.WebClient).DownloadString('https://boxstarter.org/bootstrapper.ps1'))
get-boxstarter -Force
Install-BoxstarterPackage https://raw.githubusercontent.com/nodejs/node/HEAD/tools/bootstrap/windows_boxstarter -DisableReboots
refreshenv

Visual Studio に必要なコンポーネントを追加

& 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe' modify `
    --installPath 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools' `
    --add Microsoft.VisualStudio.Component.Windows11SDK.22621 `
    --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
    --add Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre `
    --quiet

Node.js のインストール

choco install nodejs

パス環境変数の更新

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

devcontainers/cli をシングルバイナリにしてみる

nexe/nexe で作る

git clone --depth 1 -b v0.58.0 https://github.com/devcontainers/cli devcontainers-cli
cd devcontainers-cli
npm i -g yarn
yarn
yarn compile-prod
npx nexe -i ./devcontainer.js -t windows-x64-21.7.1 -b -o /dist/devcontainer-windows-x64-21.7.1-nexe.exe

~\.nexe\21.7.1\out\Release\node.exe に nexe 向けの node.exe が配置される。 これを ~\.nexe\windows-x64-21.7.1 に移動し、 -b を外すことで、次回以降、このバイナリを利用してシングルバイナリを作るようになる。

mv ~\.nexe\21.7.1\out\Release\node.exe ~\.nexe\windows-x64-21.7.1

Node.js の Single executable applications で作る

# シングルバイナリに使うための node 実行ファイルをコピー
Copy-Item 'C:\Program Files\nodejs\node.exe' .\devcontainer-windows-x64-21.7.1-sea.exe

# sea 用の設定ファイル作成
Write-Output '{"main": "./dist/spec-node/devContainersSpecCLI.js", "output": "sea-prep.blob"}' | Out-File -Encoding ascii .\sea-config.json

# blob の作成
node --experimental-sea-config sea-config.json

# BLOB を注入し、シングルバイナリを作る
npx postject devcontainer-windows-x64-21.7.1-sea.exe NODE_SEA_BLOB sea-prep.blob `
    --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2

# コンテナの外にコピー
Copy-Item .\devcontainer-windows-x64-21.7.1-sea.exe \dist

参考資料

変更履歴

日付 内容
2024/3/23 新規作成
2024/4/2 nexe 用 node バイナリ格納場所の間違いを修正(~/nexe -> ~/.nexe)

2022年8月28日日曜日

Windows Subsystem for Android で Yukari for Android を動かす

shibafu528/Yukari: Twitter/Mastodon Client for Android を Windows Subsystem for Android で動かしたい。

Twitter TL と Mastodon TL をひとつのカラムで混ぜて見れて、さらに TL の自動更新ができるアプリ、Yukari for Android しか知らないので、これを Windows で動かしたかった。

前提

Windows Subsystem for Android の有効化

Windows Insider Program の有効化

※ 2022/8/25 から、 Windows Insider Program への参加は不要になったようだ

  1. スタート -> 設定 -> Windows Update -> Windows Insider Program
  2. 使用を開始する ボタン押下
  3. ウィザードに従って情報入力
    1. アカウントと紐づけ
      • Microsoft アカウントに紐づけ
    2. Insider チャネルを選択
      • ベータ チャネル を選択
      • WSA はDev またはベータで使える
    3. デバイスの契約をレビューする
      • 利用規約とプライバシーステートメントを読む
    4. このデバイスを再起動して作業を完了します
      • 今すぐ再起動 を押下

Amazon アプリストアをインストール

スタート -> Microsoft Store -> Amazon アプリストア で検索し、 Amazon アプリストア を選択し、インストール。

開発者モードをオン

adb コマンドで WSA に接続できるようにするため、開発者モードをオンにする。

  1. スタート -> Android™用 Windows サブシステム設定 を実行
  2. 開発者 -> 開発者モード をオンにする

Yukari for Android のインストール

adb で WSA に接続

adb は、Android Studio をインストールしていれば ~/AppData/Local/Android/Sdk/platform-tools に入っているはず。

WSA が起動していないと、 adb で接続できないので、 Android™用 Windows サブシステム設定 を起動しておくこと。

Android™用 Windows サブシステム設定 を起動したうえで、以下コマンドで接続。

> C:\Users\mikoto\AppData\Local\Android\Sdk\platform-tools\adb.exe connect 127.0.0.1:58526
* daemon not running; starting now at tcp:5037
* daemon started successfully
failed to authenticate to 127.0.0.1:58526

ADB のデバッグを許可しますか? のダイアログが出るので、 許可 を押下。

adb で apk をインストール

以下コマンドで、署名済みの apk ファイルを転送・インストール。

C:\Users\mikoto\AppData\Local\Android\Sdk\platform-tools\adb.exe install .\Yukari\Yukari\stable\release\Yukari-stable-release.apk

以上。

Yukari for Android の設定をインポートしたいなら、設定ファイル一式を abd push で WSA のファイルシステムへ転送できる。

参考資料

Yukari for Android をビルドする(2022/8/29 版)

shibafu528/Yukari: Twitter/Mastodon Client for Android をビルドする。

前提

  • OS: Windows 11 Pro 21H2 ビルド: 22000.856

Android Studio のインストール

Android Studio のインストール  |  Android デベロッパー  |  Android Developers からダウンロードし、インストールする。

GitHub の Personal Access Token を作成

Package info.shibafu528.yukari.yukari-exvoice · shibafu528/yukari-exvoice パッケージをインストールするために、 GitHub パッケージを読み込みできるトークンを作成する。

read:package パーミッションの付いた Personal Access Token を作成し、トークンをメモ。

Yukari のビルド

  1. Android Studio に、 Yukari のプロジェクトをインポート

  2. Yukari/local.properties に、以下 2 行を追加

    gpr.user=mikoto2000
    gpr.key=<read:package のパーミッションを設定した Personal Access Token>
  3. メニューの Build -> Generate Signed Bundle or APK を選択

    1. Generate Signed Bundle or APK のダイアログが開くので、 APK を選択して Next ボタン押下
    2. 必要事項を記入して Next ボタン押下
      1. ModuleYukari.Yukari を選択
      2. セクション Keystore pathCreate new... ボタンを押下、必要事項を記入して OK ボタン押下
    3. 必要事項を記入して Finish ボタン押下
      • Destination Folder : apk の出力パス。今回は /PATH/TO/Yukari/Yukari を設定。
      • Build Variants : stableRelease を選択

これで、 /PATH/TO/Yukari/Yukari/stable/release/Yukari-stable-release.apk が生成される。

2022年6月10日金曜日

Tailscale を使ってみる

前提

  • OS1: Windows 11 Pro 21H2 ビルド 22000.675
  • OS2: Arch Linux 2022/6/8

Tailscale へのサインアップから、ひとつめのデバイス登録まで

Windows 11 Pro に Tailscale をインストールし、デバイスの登録を行う。

  1. Web ブラウザ https://login.tailscale.com/start へアクセス
    • 今回は GitHub で Sign up した
  2. Select Network 画面が表示されるので、使用するネットワークを選択
    • Single-user Tailnetmikoto2000 を選択
  3. Welcome! Let’s add your first device. 画面が表示されるので、 Windows のボタンを押下 -> Download Tailscale for Windows ボタン押下
  4. Download Tailscale 画面が表示されるので、 Download Tailscale for Windows ボタン押下でインストーラーをダウンロード
  5. tailscale-ipn-setup-1.26.0.exe を実行
    • デフォルトのまま Install ボタン押下 -> Close ボタン押下
  6. タスクトレイ内の Tailscale アイコン右クリック -> Log in...

これで、 Tailscale のネットワークに最初のデバイスが追加される。

DNS 設定

Tailscale ネットワークにぶら下がったデバイス間のアクセスがやりやすいように、 MagicDNS を使って名前解決するように設定する。

  1. Tailscale のログイン後画面 -> 左上のトップページへのリンクを選択 -> DNS
  2. DNS 画面になるので、必要な設定を行う
    1. Nameserver セクションの Add nameserver を選択 -> Cloudflare Public DNS を選択
      • MagicDNS で引っかからなかったホスト名を解決するために使う DNS, 必要に応じて IP を設定する
    2. MagicDNS セクションの Enable MagicDNS ボタンを押下

OK.

ふたつめのデバイス登録

Arch Linux を登録する。

  1. Web ブラウザ https://login.tailscale.com/start へアクセス
    • 今回は GitHub で Sign up した
  2. Select Network 画面が表示されるので、使用するネットワークを選択
    • Single-user Tailnetmikoto2000 を選択
  3. Machines 画面が表示されるので、 Download リンクを選択
  4. Download Tailscale 画面になるので、 Manually install on のプルダウンから Arch Linux を選択
    • 以下、表示された説明の通りコマンドを実行
      1. パッケージインストール
        • sudo pacman -S tailscale
      2. 自動起動設定、 --now で同時に起動も行う
        • sudo systemctl enable --now tailscaled
      3. Tailscale にデバイスを接続(登録)
        • sudo tailscale up
        • 表示される URL に Web ブラウザでアクセスし、ログイン

これで、 Tailscale のネットワークに Arch Linux がぶら下がる。

動作確認

ふたつめのデバイスからひとつめのデバイスに SSH 接続してみる。

ssh mikoto@mydesktoppc

ひとつめのデバイスに設定した接続情報でログインできる。

参考資料

2022年6月8日水曜日

Windows 11 Pro に sshd をインストールして公開鍵認証方式でログインする

前提

  • OS: Windows 11 Pro 21H2 ビルド 22000.675
  • GitHub に SSH 接続用の公開鍵を追加済み

OpenSSH サーバーのインストール

  1. Windows キー -> 設定アイコン -> アプリ -> オプション機能 -> 機能を表示 ボタン押下
  2. OpenSSH サーバー にチェックを入れて 次へ ボタン押下
  3. インストール ボタン押下

OpenSSH サーバーの設定

sshd サービスを自動起動に設定

PowerShell で以下コマンドを実行。

start-process -verb runas powershell -ArgumentList Set-Service,-Name,'sshd',-StartupType,'Automatic'

sshd サービスを起動

PowerShell で以下コマンドを実行。

start-process -verb runas powershell -ArgumentList Start-Service,-Name,'sshd'

GitHub の公開鍵を authorized_keys に追記

Invoke-WebRequest で取得し、 Out-File で追記する。

(Invoke-WebRequest https://github.com/mikoto2000.keys).Content | Out-File -FilePath ~/.ssh/authorized_keys -Encoding utf8 -Append

今回使うユーザーが、 Administrator グループに入っているため、 C:\ProgramData\ssh\authorized_keys が参照される。

そちらにコピーして権限を設定。

# authorized_keys コピー
start-process -verb runas powershell -ArgumentList Copy-Item,c:/Users/mikoto/.ssh/authorized_keys,c:/ProgramData/ssh/administrators_authorized_keys

# 権限設定
start-process -verb runas powershell -ArgumentList icacls,.\administrators_authorized_keys,/inheritance:r,/grant,Administrators:F,/grant,SYSTEM:F

デフォルトシェルを PowerShell へ変更

start-process -verb runas powershell -ArgumentList New-ItemProperty,-Path,"HKLM:\SOFTWARE\OpenSSH",-Name,DefaultShell,-Value,"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe",-PropertyType,String,-Force

公開鍵認証のみを許可するように設定変更

  1. 管理者権限で開いたテキストエディタで c:\ProgramData\ssh\sshd_config を開き、以下修正を行う
    • #PasswordAuthentication yes -> PasswordAuthentication no
  2. sshd サービスリスタート
    • start-process -verb runas powershell -ArgumentList Restart-Service,-Name,'sshd'

動作確認

ssh mikoto@localhost

ログインできた、 OK.

以上。

参考資料

2022年3月13日日曜日

Windows11 初期設定備忘録

間違って Windows11 VM を消してしまったので、再インストールした。

インストール -> Windows Update したあとから。

Windows の設定

タスクバー設定

  1. タスクバーの空白を右クリック -> タスクバーの設定
    1. タスク バー項目
      • 検索 : オフ
      • タスク ビュー : オン
      • ウィジェット : オフ
      • チャット : オフ
    2. タスク バーの動作
      • タスク バーの配置 : 左揃え
      • タスク バーをすべてのディスプレイに表示する : チェックを入れる(マルチディスプレイの場合)

スタートメニュー設定

スタートメニューに設定ボタンを追加。

  1. スタートボタン右クリック -> 設定 -> 個人用設定 -> スタート
    1. 最近追加したアプリを表示する : オフ
    2. フォルダー
      • 設定 : オン

エクスプローラー

拡張子と隠しファイルを表示する

  1. エクスプローラー を開く -> 表示 -> 表示
    • 以下 2 項目を選択し、チェック済みにする
      • ファイル名拡張子
      • 隠しファイル

コンテキストメニューを Windows 10 時代の形式へ戻す

  1. PowerShell を開き、以下コマンドを実行
    • reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve
  2. Windows 再起動

いつも使うフォルダの作成とクイックアクセスへの登録

  1. $HOME/bin, $HOME/app, $HOME/project を作成
  2. $HOME と 「1.」で作成したフォルダをクイックアクセスに追加

bin フォルダにパスを通す

PowerShell を起動して、以下コマンドを実行。

$path = [Environment]::GetEnvironmentVariable('Path', 'User')
$path = $path + ";" + $HOME + "\bin"
[Environment]::SetEnvironmentVariable("Path", $path, 'User')

Windows の機能の有効化

Hyper-V, WSL, サンドボックスを有効化。

  1. スタートボタンから Windows の機能の有効化または無効化 を検索し、実行
    • 以下機能にチェックを入れる
      • Hyper-V
      • Linux 用 Windows サブシステム
      • Windows サンドボックス
      • コンテナ―
      • 仮想マシンプラットフォーム
  2. Windows 再起動

アプリインストール・設定

以下アプリをインストールする。 Vim 以外は winget コマンドでインストールできる。

  • Vim
  • Git
  • 7-Zip
  • WinMerge
  • Pandoc
  • Google Chrome
  • Mozilla Firefox
  • Microsoft PowerToys
  • Microsoft Visual Studio Code
  • PowerShell(PowerShell7)
  • Adobe Acrobat DC (64-bit)
  • Docker Desktop
  • ScreenToGif
  • Discord
  • Amazon Kindle

事前準備

WSL2 の導入

PowerShell を管理者権限で開き、以下コマンドを実行。

wsl --update

アプリインストーラーの更新

winget コマンドでアプリをインストールするために、 アプリインストーラー を更新する。

  1. Microsoft Store を開く
  2. ライブラリ -> すべて更新
    • アプリインストーラー さえ更新すれば winget 使えるけど、一通り全部更新したほうが安心なので

winget コマンドによるアプリインストール

PowerShell を管理者として起動して、以下コマンドを実行。

winget install --silent Git.Git
winget install --silent 7-zip
winget install --silent WinMerge
winget install --silent Pandoc
winget install --silent "Google Chrome"
winget install --silent Mozilla.Firefox
winget install --silent Microsoft.PowerToys
winget install --silent Microsoft.VisualStudioCode
winget install --silent Microsoft.PowerShell
winget install --silent Docker.DockerDesktop
winget install --silent Adobe.Acrobat.Reader.64-bit
winget install --silent NickeManarin.ScreenToGif
winget install --silent Discord.Discord
winget install --silent Amazon.Kindle

Git の設定

自動改行コード変更設定を無効化

Git Bash を管理者で開き、以下コマンドを実行。

git config --system core.autocrlf false

ユーザー名・パスワードの設定

Git Bash を自分のユーザーで開き、以下コマンドを実行。

git config --global user.name "mikoto2000"
git config --global user.email mikoto2000@gmail.com

Git/Unix コマンドを PATH 環境変数へ追加

PowerShell を管理者で開き、以下コマンドを実行。

$path = [Environment]::GetEnvironmentVariable('Path', 'Machine')
$path = $path + ";C:\Program Files\Git;C:\Program Files\Git\usr\bin"
[Environment]::SetEnvironmentVariable("Path", $path, 'Machine')

Vim のインストール

Vim に関しては、最新版を引っ張ってくるスクリプトを作っているので、それを使ってインストールする。

新しい PowerShell を起動して、以下コマンドを実行。

※ winget した PowerShell は、パスが反映されていないため、 git を見つけられない。新しい PowerShell で実行すること。

# インストーラー含むプロジェクトを clone
cd project
git clone https://github.com/mikoto2000/MiscellaneousTools.git

# Vim のインストーラー実行
powershell -ExecutionPolicy RemoteSigned .\MiscellaneousTools\win\tool_installer\ext\vim.ps1

# vimfiles の配置
git clone https://github.com/mikoto2000/dotvim.git $HOME/vimfiles

これでいつもの Vim が起動するようになるはず。

PowerToys とかもこまごました設定あるけどギブアップ…。

Windows を再起動すると、 Docker やら Discode やら PowerToys やらが起動しだす。

参考資料