Arch Linux のインストール (UEFI環境)

この記事を作った動機 arch linux をインストールするときに、いちいち忘れたことが出てきては、wiki を見に行くということをしていたので、自分が普段やっている工程をただ書き出そうというだけです。 いつもどうり、とにかく動くこと優先なので、ロケーション設定とか、なんかいろいろ抜けてたりする可能性は大いになります。 ISO ファイルのダウンロード Arch Linux - Downloads ISO ファイルの書き込み linux ここでの、/dev/sda は、USBドライブを意味している。 sudo dd if="archlinux-2025.03.01-x86_64.iso" of=/dev/sda status=progress windows Rufus などのツールなど、なんでもいいのでISOファイルを扱うツールをダウンロードして、USBメモリに書き込む。細かいことは今回は省略する。 USB メモリから起動 ここは各PCに固有の仕様に依存するので省略する。 キーボードレイアウト 日本語キーボードのときは、レイアウト設定を変更しないと、後々キーの記号と入力される記号が異なる(US配列と日本語配列の違い)というめんどくさいことになるので、変更しておく。 loadkeys jp106 wifi につなげる インターネットが必要なので、wifiにつなげる。"[wlan0]“のところには、station listで表示される任意の wifi カードを選択する。 iwctl station list station [wlan0] scan station [wlan0] get-networks station [wlan0] connect [targetNetworkName] # パスワードを入力 exit # ping が通ればOK ping google.com ping 8.8.8.8 ディスクの初期化 ディスク構成の確認 以下の例では、SSD と sd カードが刺さっているときの表示例である。今回は、以下の例 (/dev/nvme0n1) とは異なるが、/dev/sda にインストールするという前提で話を進める。 ...

April 2, 2025

CIFS (SMB、Samba)を快適に使いたい

この記事を作った動機 linux上で、cifsとVPNを使って自分のファイルサーバにアクセスしているのですが、以下のような不満点があり、どうしたらいいか考えてみた結果、いくつか興味深いオプジョンが見つかったので、それを記録しておくだけです。ちなみに、完全な解決とまでは行ってないですが、多少改善が見られた程度って感じです。 大きなファイルをやり取りすると、同時に他のファイル操作をしたときにもっさりする なにかと、特にvpn環境だと理由不明のファイルマネージャ等のプチフリが多発する ちょっとしたまとめ sudo mount -t cifs -o user=username,password="password",gid=1000,uid=1000,vers=3.11,multichannel,max_channels=16,compress //192.168.xxx.xxx/shareName /Path/To/Mount/Point 特に気になったオプション vers=3.11 smbプロトコルのバージョンを指定する項目で、以下のバージョンが選べる模様です。新しいほどいろんな機能が使えるようです。今回の場合は、使いたい機能が、3.11にあるので、それを指定している前提で、その他気になったオプションをリストアップします。 vers=arg SMB protocol version. Allowed values are: • 1.0 - The classic CIFS/SMBv1 protocol. • 2.0 - The SMBv2.002 protocol. This was initially introduced in Windows Vista Service Pack 1, and Windows Server 2008. Note that the initial release version of Windows Vista spoke a slightly different dialect (2.000) that is not supported. • 2.1 - The SMBv2.1 protocol that was introduced in Microsoft Windows 7 and Windows Server 2008R2. • 3.0 - The SMBv3.0 protocol that was introduced in Microsoft Windows 8 and Windows Server 2012. • 3.02 or 3.0.2 - The SMBv3.0.2 protocol that was introduced in Microsoft Windows 8.1 and Windows Server 2012R2. • 3.1.1 or 3.11 - The SMBv3.1.1 protocol that was introduced in Microsoft Windows 10 and Windows Server 2016. • 3 - The SMBv3.0 protocol version and above. • default - Tries to negotiate the highest SMB2+ version supported by both the client and server. If no dialect is specified on mount vers=default is used. To check Di‐ alect refer to /proc/fs/cifs/DebugData Note too that while this option governs the protocol version used, not all features of each version are available. The default since v4.13.5 is for the client and server to negotiate the highest possible version greater than or equal to 2.1. In kernels prior to v4.13, the default was 1.0. For kernels between v4.13 and v4.13.5 the default is 3.0. multichannel manページを読んでいる限り、一つだけでなく複数のデータをやり取りするための、よくわかってないですが、複数のTCPセッション(複数の通信路)みたいなのを開くっぽいです。これを指定して見ると、大きなファイルを操作していても快適にファイルマネージャとか、レスポンスよくいろんなファイル操作が行える傾向にありました。一つだけの通信路では、やはり厳しいものがあるようです。 ...

March 25, 2025

linux 環境で指紋認証ができない

この記事を書いた動機 結構前から指紋認証機能が linux 上で使えないということがあった。それで、とりあえず以下の2つのパッケージをインストールすることで、センサーを認識して動くところまではやっていた。 yay -Qs fprint local/fprintd 1.94.5-1 (fprint) D-Bus service to access fingerprint readers local/libfprint 1.94.9-1 (fprint) Library for fingerprint readers その時は、Gnome の設定画面にも登録画面が出てきて、とりあえず登録することはできるようになった。しかし、結局登録した指紋と一致しないと言われ、認証機能が思ったように動かないことに気づき、めんどくさくなってまた問題をしばらく放置していた。 そして、最近になって、また linux 環境における指紋認証について調べてみたところ、問題の解決には至らなかったが、視覚的にどんな指紋が読み取られているのか確認する方法があることに気づいたので、それを記録してみようというわけです。 環境 Arch Linux linux kernel 6.13.4-arch1-1 Gnome XPS 13 2in1 (9365) 指紋認証センサー VFS7552 libfprint をコンパイルする libfprint 自体に、指紋認証センサーをテストしたりできるツール群が入っているので、それを使う。もしかするとパッケージマネージャ経由でインストールできたりするかもしれないが、GitHub - iafilatov/libfprint: libfrpint driver for a family of Elantech fingerprint sensorsに合わせて、今回は自前でコンパイルすることにした。 ちなみに、このgitリポジトリ 自体は古く、VFS7552 を検出しなかったので、現行のlibfprint / libfprint · GitLabを後にコンパイルし直した。 一応大まかなポイントだけ、ここには記録しておこうと思う。 ツールをいれる gimp # .pgm な画像を表示するために必要 ninja git python libglib2.0-dev libnss3-dev libpixman-1-dev libusb-1.0.0-dev libx11-dev libxv-dev pkg-config リポジトリのクローン mkdir ~/working cd ~/working git clone https://gitlab.freedesktop.org/libfprint/libfprint.git python 仮想環境の構築 # もし、anaconda が入っている場合は、事前に無効化しておく # conda deactivate python3 -m venv venv . venv/bin/activate pip install -U pip pip install meson “ModuleNotFoundError: No module named ‘distutils.util’” と言われてしまう場合は、以下のモジュールもインストールしていおく。 ...

March 14, 2025

ssh 経由でクローンできる git リポジトリを作るメモ

この記事を書いた動機 単に、リポジトリを作るところまではうまく行っていたのですが、リポジトリをクローンするときに、ユーザ名の指定をわかっておらず、ずっと以下のように間違った"git"というユーザを指定し続けていてなかなか気づけなかったということがあったのでメモすることにしました。 git clone git@[serveradress]:/Path/To/Target/Proejct/Root/Folder ちなみに、間違ったユーザを指定していると、ssh接続できないので、ずっと"Permission denied (publickey).“と言われ続けます。。。最初はなんでssh コマンド経由でつながるのに、gitではうまくいかないのかみたいになっていましたが、結局のところ間違ったユーザを意図せず指定し続けていただけなのでした。。。 リポジトリを作る cd /Path/To/Target/Proejct/Root/Folder git init --bare リポジトリをクローン git clone [username]@[serveradress]:/Path/To/Target/Proejct/Root/Folder 参考にしたサイトとか debugging - How can I debug git/git-shell related problems? - Stack Overflow https://stackoverflow.com/questions/6178401/how-can-i-debug-git-git-shell-related-problems (2025年3月10日) Git - Setting Up the Server https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server (2025年3月10日) Why doesn’t my SSH key work for connecting to github? - Stack Overflow https://stackoverflow.com/questions/9960897/why-doesnt-my-ssh-key-work-for-connecting-to-github (2025年3月10日) ChatGPT https://chatgpt.com/ (2025年3月10日)

March 10, 2025

OOBE(Windowsのセットアップ画面) をスキップする

この記事を書いた動機 普段私は、Microsoftが押し付けてくるセットアップ画面が嫌いなので、コマンド経由で直接アカウントを作り、OOBEを回避している。それでそのことも、コマンドライン経由で windows をインストールするの記事を書くついでに、記録することにした次第です。 コマンドプロンプトを開く Shift + F10 アカウントの作成 今回は例として、“main"という名前のアカウントを作り、“password"というパスワードを設定する。ちなみにここで管理者権限をmainというアカウントに付与している。これをしないと、管理者権限が得られないということになりかねないので、気をつける。最悪、Windows を再インストールしたり、パスワードを無理やりこじ開けることになる。 net user main /add net user main password net user localgroup Administrators main /add REM "net user" とだけ打って、コマンドを実行すると現在存在しているユーザを確認できる。 一応、管理者権限をどうあがいても使うことができないということを回避するために、普段私は、Administratorという、もとから管理者権限を持っているアカウントがwindowsでは標準で隠されているので、それも使える様に設定する。用が済んだら無効化することを推奨します。 有効化 net user Administrator /active:yes 無効化 net user Administrator /active:no OOBE をスキップ 管理者権限を持っているアカウントを作成したことを確認してから、OOBEを終わらせる操作をする。“C:\Windows\System32” 配下にいることを想定する。 REM cd C:\Windows\System32 cd OOBE msoobe.exe bypassnro この時点で、以下の画面で永久に強制的に再起動するまで、セットアップが進まなくなるので、しばらく待ってから強制的に再起動する。あまり早とちりしすぎると、またもとのOOBEの画面に戻されるので注意する。もとのOOBEの画面に戻されたときは、再度OOBEを終わらせる操作をやり直す。 アカウントにログイン 今回は、Administrator アカウントも有効にしていてかつパスワードをそのアカウントに対して設定していないため、、まずはそちらの方へ自動ログインされる。 そうすると以下のアカウント初回ログインのセットアップが出てくるので、適当に設定して終わらせる。するとデスクトップ画面が出て、とりあえずWindowsのインストールが成功し、起動するようになったことが確認できる。 ...

March 5, 2025

コマンドライン経由で windows をインストールする

この記事を書いた動機 自分用に、ただどうやって windows をコマンド経由でインストールするか記録するだけです。前提として、インストールメディアから windows インストーラが起動しているところからスタートします。 ちなみに、コマンドライン経由で Windows をインストールすると、インストーラの互換性チェックを完全にスキップできる模様です。TPMとかそういうのをレジストリとかでいちいちバイパスする設定とか無しで、動くかどうかはさておき、現状はこの手法でとりあえずインストールできるようです。 コマンドプロンプトを開く Shift + F10 diskpart でパティーション作成 diskpart list disk sel disk [windowsをインストールするSSDとかを番号で選択] REM 全部データが消えるので注意 clean convert gpt REM uefi で起動するとき読み込まれるパーティションの作成 create part efi size=100 format quick fs=fat32 label="System" create part msr size=16 REM Windowns が保存されるメインパティーションの作成 create part primary format quick fs=ntfs label="Windows" REM ドライブレターを割り当て、エクスプローラーなどから見えるようにする 割り当てる文字は重複してたりしなければ何でも良い list part sel part [System パティーションの番号] assign letter P sel part [Windows パティーションの番号] assign letter Q exit dism で Windows をインストールをする windows インストールメディアのドライブレターの確認 開くなどを押して、windows インストールメディア自体がどんなドライブレターでマウントされているか確認する。例えば、今回であれば、“D:"としてマウントされていた。どんなやり方でもよいが、私は普段メモ帳のファイルダイアログから確認している。 ...

March 5, 2025

Android版 Chrome でデバックする

この記事を書いた動機 自分用のメモとして、実際にやったことを記録し、ノートを取るみたいな感じにしたいと思ったのと、私は、自分用のWebアプリみたいなのを開発しているのだが、その過程でスマホ版のブラウザでのデバックをしたくなったというのがある。 二番煎じではあるが、他のブログでの説明はなんか画像とか少なくて不満があったというのもあり、ならば自分でやってみたらというところも経緯としてある。(自分も人のこと言えたほど大したこと書けないけど。。。) 環境 スマホ側 Pixel 5a 5G Android版 Chrome 131 Android 14 PC側 Windows 11 (linux環境でも同じことはできると思う) Windows版 Chrome 131 イメージ 概要 adb コマンドの環境構築 USBデバックの接続 PCで chrome://inspect/#devicesを開く デバックしたいタブを選択して終わり デバックの仕方 adb をインストールする(PC側) 開発ツールをダウンロード 今回は、以下のページから"platform-tools-latest-windows.zip"をダウンロード SDK Platform-Tools リリースノート | Android Studio | Android Developers 開発ツールを展開と配置する 適当な場所(ダウンロード)とかで展開し、配置する。今回は、“C:"直下に開発者ツールを配置することとする。 # ダウンロードして展開したフォルダの中に入っている、"platform-tools"を以下の様な形になるように配置する (base) PS C:\> ls platform-tools Directory: C:\platform-tools Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2025/01/11 0:20 5969000 adb.exe -a--- 2025/01/11 0:20 108136 AdbWinApi.dll -a--- 2025/01/11 0:20 73320 AdbWinUsbApi.dll -a--- 2025/01/11 0:20 451688 etc1tool.exe -a--- 2025/01/11 0:20 1874536 fastboot.exe -a--- 2025/01/11 0:20 54376 hprof-conv.exe -a--- 2025/01/11 0:20 242968 libwinpthread-1.dll -a--- 2025/01/11 0:20 479848 make_f2fs_casefold.exe -a--- 2025/01/11 0:20 479848 make_f2fs.exe -a--- 2025/01/11 0:20 1157 mke2fs.conf -a--- 2025/01/11 0:20 756840 mke2fs.exe -a--- 2025/01/11 0:20 1089833 NOTICE.txt -a--- 2025/01/11 0:20 38 source.properties -a--- 2025/01/11 0:20 2912360 sqlite3.exe 環境変数を設定する ...

January 10, 2025

linux 休止状態の動作を確認したい

この記事を書いた動機 (Nov 14 あたりの出来事) 最近、HP Proliant ML 150 (9 Gen) の消費電力削減の目的で、休止状態を利用できるようにしようとした過程で、それが正しく機能しているのか調べたくなった。そこで、ただメモリをたくさん指定した量だけ消費するプログラムを作成し、とりあえず動くところまで作ったので、ここに置いておこうというわけである。どこまで意味があるのかは不明。 ちなみに、一応メモリ割り当てに失敗したとき用に、再度メモリ割り当てを試みる機能や、メモリ割り当てに完全に失敗したときにプログラムを終了するなど、セーフティも実装しているが、結局使うことはなかったので正しく動く保証はない。 使い方 プログラムのコンパイル gcc useram.c -o useram プログラムの利用 # 10 GB のメモリを埋めるときの例 useram 10 Too many ram will be allocated by your request. denied operation. と出てくる時 プログラム内の定数 margin の大きさが大きすぎる可能性があるので、適宜調整する。 後は単純に、実装されているメモリサイズより大きなサイズを指定してしまっているので、小さい値で再度プログラムを実行してみる。 プログラム本体 #include <stdio.h> #include <stdlib.h> #include <sys/sysinfo.h> // unit GB #define margin 10 #define retry 3 // Get the amount of entire installed RAM. // No args are required. // return: amount of entire installed RAM int checkRAM(){ unsigned int amount = 0; // GB struct sysinfo info; sysinfo(&info); // convert unit byte to Giga byte (10^9) amount = info.totalram / 1000 / 1000 / 1000; return amount; } // allocate RAM (amount GB) // args:(Unit -> GB) // amount: allocation size unsigned int // maxAmount: entire system RAM amount unsigned int // return: // pointer: pointer to allocated area void* // If all ram allocation attempts are failed, return NULL. void* allocateRAM(unsigned int amount, unsigned int maxAmount){ // find specified allocation size is exceed entire system RAM amount or not. if(amount >= maxAmount - margin){ printf("Too many ram will be allocated by your request. denied operation.\n"); return 0; } // allocate ram but still the allocated area is not utilized. unsigned long allocateSize = (long)sizeof(char) * (long)amount * (long)1000 * (long)1000 * (long)1000; void* pointer = (void*)malloc(allocateSize); // retry ram allcation if it is failed. if(pointer == NULL){ printf("ram allocation is failed. retry %d times\n",retry); int counter = 0; while(pointer == NULL && counter < retry){ printf("retry %d\n",counter); void* pointer = (void*)malloc(allocateSize); counter++; } } // If all ram allocation attempts are failed, return NULL. if(pointer == NULL){ printf("allocation failed!\n"); return NULL; } printf("allocation OK\n"); return pointer; } // amount unit GB void useRAM(void* pointer,unsigned int amount){ // 4 mean size of int unsigned long loopAmount = (long)amount * (long)1000 * (long)1000 * (long)1000 / (long) 4; int* arr = (int*)pointer; // For each loop, fill up the allocated area with random value by 4 byte(size of int) for(unsigned long i = 0; i < loopAmount; i++){ arr[i] = (int)rand(); } printf("Loop amount %lu\n",loopAmount); printf("RAM area is filled up. The process is finished.\n"); return; } int main(int argc,char **argv){ // find entire system ram unsigned int ramAmount = checkRAM(); // If The allocation size is not specified, exit this program. if(argc <= 1){ printf(" The size of ram amount that will be filled up is not specified. (GB)\n"); return -1; } unsigned int amount = atoi(argv[1]); // find correct value is entered or not if(amount != 0){ printf("%d GB\n",amount); }else{ printf("You may enter string or 0 as args. Stop.\n"); return -1; } printf("System info: \n %d GB RAM is installed\n",ramAmount); // ram allocation and filling up process void* pointer = allocateRAM(amount,ramAmount); useRAM(pointer,amount); // If ram allocation is failed, exit this program if(pointer == NULL) { printf("went worng\n"); return -1; } // wait until get user input. // The filled up RAM area will not be free while there is no user input for 'q' key. char input = 'a'; while(input != 'q') scanf("%c",&input); free(pointer); return 0; } 参考にしたサイト How to determine memory size via C code - Stack Overflow https://stackoverflow.com/questions/45259131/how-to-determine-memory-size-via-c-code (2024年12月12日)

December 12, 2024

yt-dlpコマンドで、年齢制限を何とかするの追記

前回の記事 yt-dlpコマンドで、年齢制限を何とかする なんで追記を書くことにしたの? 最近、cookieを直接 yt-dlp コマンドに渡すのは、なんか cookie が機能しなくなったりしてメンテする必要があったりと、めんどっちいなとなった。何とかブラウザから cookie 読み込んでくれないかなと試したところ成功した。そこで、投げやりにしてた部分を今更ながら書いてみようとそういうわけである。 あと、単純に google analytics をこのブログに導入してみて、一番 yt-dlpコマンドで、年齢制限を何とかする に訪問者 (Bot説ある) がいそうだという点も気にしてたりする。本当は、アンダーマイニング効果とかあるし、あまり他人目線でやると、本来のこのブログの意味が崩壊するので、なるべく避けたいものであるが、、、(実は、google analyticsとかは使わないほうがいい説があるが、しばらく様子見としてみる。) 分かったこと 必要なパッケージがある 以下のように調べてみると、 python-secretstorage というパッケージが必要そうなことが分かる。 pacman -Si yt-dlp # -Si オプション: パッケージに関する情報について調べる。必須ではないがインストールが推奨されるパッケージの情報も出てくる。 リポジトリ : extra 名前 : yt-dlp バージョン : 2024.12.06-1 ... python-secretstorage: For -cookies-from-browser to access the GNOME keyring while decrypting cookies of Chromium-based browsers ... うまくいかないブラウザ chromium 系のブラウザでは、cookieの復号がうまくいかず、以下のように失敗するので、諦めて firefox を使うことにした。ちなみに、私は brave とかそのほかのブラウザでは特に試していないので、chrome とか firefox 以外のブラウザにおいての具体的な挙動はまだわかっていない。 “cannot decrypt v11 cookies: no key found " と言われ、cookieの取得に失敗する。 ...

December 11, 2024

https通信をプライベートネットワークで使いたい

この記事を作った動機 私はプライベートネットワークにおいて、自分のためだけのサービスをhttpプロトコル経由で利用できるようにしているが、拡張機能とかの作成にあたり、httpsじゃないと不都合が生じるようになったことがきっかけで、https化に苦労することになり、もう嫌だということでこの記事を書くことになった。 例えばyoutube上で動作する拡張機能が、自分だけのためのサービスが動いているhttpサーバをバックエンドとして使うことを考えると、http通信とhttps通信が一つのWebページを表示するために混在してしまうために、ブラウザ側で通信がブロックされたリ、騒がしいエラーが出てきてしまい、非常に不快な思いをすることになる。 前提としていること 参考程度に前提条件とかも書いておく。 httpdを使っている。 opensslパッケージがインストール済み すでにhttpdを使っていて、ブラウザでなんか表示できる状態にある。 あくまで個人用など、閉じられた環境において、https通信を実現したいと考えている。 このブログの様な、大っぴらに公開されているWebサイトには使えない手法であることを理解している。 https通信の実現方法 証明書を作る HTTPsを実現するために、mkcertコマンドを使って証明書を作成するが、どんな証明書が必要が一応自分の理解の範囲であり、間違っているかもしれないが、簡易的に書いておく。必要そうな証明書は以下のとおりである。 サーバ自体を証明する証明書 各httpサーバとかのためにサービスごとに個別に用意される証明書 この中で、サーバと通信するパソコンがインストールしているべき証明書は、「サーバ自体を証明する証明書」の証明書の公開鍵であり、「各httpサーバとかのためにサービスごとに個別に用意される証明書」の公開鍵ではない。 mkcert コマンドのインストールを行う 私は arch linux を使っているので、以下のようにパッケージマネージャを利用した。 yay -S mkcert # たぶんリポジトリの分類がExtraにあるので、pacmanでもインストールできる # pacman -S mkcert mkcertの初期化を行う サーバ自体を証明する証明書の作成を行う。 mkcert -install # 証明書が保存された場所を調べるためには以下のコマンドでできる。基本的にmkcert -installを実行したユーザのホームディレクトリのどこかにある。 # mkcert -CAROOT # /home/username/.local/username/mkcert # 自分の環境だとこのような出力が得られる。 httpサーバ用の証明書を作る 次に以下のようにして、httpサーバが動いているドメイン名やIPアドレスを引数として、サービス用に証明書を作成する。この証明書は今回の場合であれば、httpdサーバの443番ポートを経由して、通信しているブラウザ等に送られることになる。 # コマンドを実行したファイル内で証明書の公開鍵と秘密鍵ができてしまうため、一応作業用のフォルダを作っている。 mkdir ./sslLocal/ cd ./sslLocal # 各httpサーバとかのためにサービスごとに個別に用意される証明書を作成 mkcert mydomain.name ipAddr # ドメイン名やIPアドレスなど複数指定できるらしいが、自分はとりあえずドメイン名だけにしてた。 # あっ、mydomain.nameやipAddrとかは適宜読み替えてください httpdが使う証明書を配置 私は以下の様にして、httpサーバ用の証明書を配置した。 # 証明書を作成したディレクトリへ移動 cd ~/sslLocal/* # ファイル内容を確認し、証明書の公開鍵と秘密鍵があることを確認する。 ls -rw-------⠀username⠀1708⠀Nov 4 02:06:02⠀⠀mydomain.name-key.pem -rw-r--r--⠀username⠀1452⠀Nov 4 02:06:02⠀⠀mydomain.name.pem # httpdのconfigがあるところに、証明書を置いておく場所も作る。 sudo mkdir /etc/httpd/conf/ssl # 署名書を作成したフォルダまで移動する。 cp ~/sslLocal/* /etc/httpd/conf/ssl/ httpdの設定 ssl通信に必要なモジュールを読み込む。 ...

November 4, 2024