ドスパラのTHIRDWAVE VF-AD4にelementary OS(Ubuntu派生)を入れた感想

ドスパラのTHIRDWAVE VF-AD4にelementary OS(Ubuntu派生)を入れた感想

前書き:安価なノートPC VF-AD4を購入しました 私は以前から、物書きやコードリーディングの用途で、ノートPCの購入を検討していました。 で、2020年 賞与をいただいたタイミングで、ドスパラ THIRDWAVE VF-AD4の購入に踏み切りました。お金をケチって整備品を購入したので、27,755円!安い! ...

January 2, 2021 · 7 min
【roff形式を手書きは無理ゲー】manページをMarkdown + Pandocで作成【with manページお作法】

【roff形式を手書きは無理ゲー】manページをMarkdown + Pandocで作成【with manページお作法】

前書き:manualページは伝統的なドキュメント manページは、UNIX系OSのドキュメントであり、コマンドやシステムコールなどの説明が記載されています。 Unix v7の時代(1979年)から変化が少ないため、2020年現在の視点で見ると表現力に難があります。具体的には以下のような欠点があり、manページを良質なドキュメントとするには文章力を試されます。 ...

December 19, 2020 · 7 min
【visudo / vigr / vipw】システムファイルをsudo viで編集は駄目【sudoers / group / passwd】

【visudo / vigr / vipw】システムファイルをsudo viで編集は駄目【sudoers / group / passwd】

前書き:システムファイルの編集は慎重に Linuxは、ユーザ/パスワード/管理者権限などの情報を/etc以下に存在するシステムファイルで管理しています。 管理者権限があればシステムファイルを自由に書き換えられますが、書式を間違えた状態で保存してしまうとシステムが正しく動作しなくなります。下手すると、ログインできない状態に陥ります。 ...

December 16, 2020 · 3 min
【静的解析】ソースコード解析補助ツールSourcetrailの導入方法【例:systemd(C言語)】

【静的解析】ソースコード解析補助ツールSourcetrailの導入方法【例:systemd(C言語)】

前書き:Sourcetrailとは Sourcetrailは、C/C++/Java/Pythonで書かれたコードを解析し、クラス(構造体)やメソッドの依存関係/呼び出し関係を可視化してくれるツールです。 以下の特徴を持つため、会社での業務利用でも気軽にSourcetrailを使用可能です。 Windows/Mac/Linuxで動作 ライセンスはGPL v3(使用は自由ですが、Sourcetrail自体の改変や販売はソースコード公開義務が発生) オフラインで動作(DBを作成しますが、外部サーバにアップロードしません) 使用例を下図に示します。 ...

December 12, 2020 · 9 min
【LPICで見た】/etc/motdの内容を出力しているのは誰?【答え:sshd】

【LPICで見た】/etc/motdの内容を出力しているのは誰?【答え:sshd】

 前書き:Message Of The Dayファイルとは LPIC受験者は、よくご存知の/etc/motd (Message Of The Day)ファイル。 ユーザがLinuxサーバにsshログインした際に、/etc/motdファイルの内容がターミナル上に表示されます。 ...

December 1, 2020 · 4 min
【CPU温度やI/Oの監視】Rapberry Pi4サーバにMonitorixをインストールする方法

【CPU温度やI/Oの監視】Rapberry Pi4サーバにMonitorixをインストールする方法

前書き:ラズパイサーバが停止するので監視したい Raspberry Pi4にPLEXマルチメディアサーバを導入して、約一ヶ月ほど運用した結果、2〜3日の稼働でシステム停止してしまう問題に遭遇しています。 この問題の対症療法として、Watch Dog Timerとheartbeatを用いてシステム停止時に自動再起動を行う対応を実施しました。 ...

November 28, 2020 · 7 min
【WatchDogTimer】Raspberry Pi4サーバがフリーズ(停止)した場合に自動再起動する方法【HeartBeat】

【WatchDogTimer】Raspberry Pi4サーバがフリーズ(停止)した場合に自動再起動する方法【HeartBeat】

前書き:ラズパイサーバがよく止まる ラズパイにPLEXマルチメディアサーバを導入して、約一ヶ月ほど運用した結果、2〜3日の稼働でシステム停止してしまう問題に遭遇しています。半日で停止する事もありました。 Plexメディアサーバー用に、 ・ラズパイ4(8GB) ・HDD 1TB ・SSD 128GB(Boot用) ・microSDは無し の環境を作成中。 このケースはmicroSDカード差込口を逆方向まで持ってくる基板が付いてきたけど、それを経由するとmicroSDの読み込みでエラーが頻出する。 なのでSSDブートに切り替え中。 pic.twitter.com/uvqZR5Gz0s ...

November 28, 2020 · 7 min
【苦行】C言語で正規表現を用いる方法【標準Cライブラリ(glibc)使用】

【苦行】C言語で正規表現を用いる方法【標準Cライブラリ(glibc)使用】

 前書き:C言語で正規表現を使う理由などない 正規表現(Regular Expression)は強力な機能なため、様々なLinuxコマンドやプログラミング言語、アプリに導入されています。特に、sed/awk/egrepコマンドやPerl/Rubyは、正規表現による文字列操作の代名詞のような存在です。 ...

November 1, 2020 · 18 min
【セキュリティ対策】Raspberry Pi4に新規ユーザを追加し、piユーザを削除

【セキュリティ対策】Raspberry Pi4に新規ユーザを追加し、piユーザを削除

前書き:piユーザは脆弱 Raspberry Piのデフォルトユーザであるpiユーザ(管理者権限あり)は、パスワードがraspberryに設定されています。この情報は悪意のあるユーザも当然知っているため、近年ではpiユーザを狙い撃ちにしたマルウェアが増えています。 ...

September 1, 2020 · 4 min
【環境構築】fish shellを用いたDebian環境にSDKMANおよびJava(JDK)をインストールする方法

【環境構築】fish shellを用いたDebian環境にSDKMANおよびJava(JDK)をインストールする方法

前書き:SDKMANはbash(もしくはzsh)前提 SDKMANは、JDK(Java開発環境)やGroovy、Scala、Gradleなどのバージョン管理ツールです。主に、JVM系のツールを管理します。Rubyのrbenv、Pythonのpyenvと同様の立ち位置のツールであり、CLIから任意のバージョンのソフト(例:Java)をインストール/使用/削除できます。 SDKMANの公式サイトに書かれている通り、SDKMANはbashで実装されています。そのため、Login Shellがbashの場合は問題なく動作しますが、fish環境では実行時にエラーが出てしまいます。 ...

August 30, 2020 · 5 min
【環境構築】Debian 10にSteamをインストールする方法:glXChooseVisual failedエラー回避

【環境構築】Debian 10にSteamをインストールする方法:glXChooseVisual failedエラー回避

前書き:Steam公式はLinuxをサポート済み Steamは、PCゲームの購入ができるプラットフォームであり、2012年からLinux環境でも動作します。Debian公式サイトにSteamの導入方法を紹介した記事がありますが、グラフィックボードがNVIDIA環境の場合は追加手順が必要です。 本記事では、追加手順を含めて、Steamのインストール方法を紹介します。 ...

August 28, 2020 · 3 min
Debian(64bit)で32bitバイナリを実行もしくは作成する方法(C言語)

Debian(64bit)で32bitバイナリを実行もしくは作成する方法(C言語)

検証環境 Debian10(64Bit)、Ryzen 7 3800X環境で検証します。CPUアーキテクチャはIntel/AMDを想定しており、ARMに関しては本記事で説明しません。 ...

August 19, 2020 · 3 min
/etc/passwdに記載された/usr/sbin/nologin, /bin/falseとは何か【ログイン禁止】

/etc/passwdに記載された/usr/sbin/nologin, /bin/falseとは何か【ログイン禁止】

前書き 先日、Rubyのコーディング練習がてらに、ユーザ情報を出力するコマンドの仕様をボンヤリと考えていました。 Rubyの練習用に「neofetchがシステムの情報出すなら、自分はユーザ情報を表示するコマンド作るか」と思ったが、既に類似仕様のfingerコマンド(https://t.co/epoOGD4zlC)があった。 そりゃ、あるよね。 — Nao (@ARC_AED) April 16, 2020 出力すべきユーザ情報には「ユーザが使用しているログインシェル」を含めようと考え、「/etc/passwd」を確認したら、ログインシェルを記載するセクションに予想外の記述がありました。その記述とは、「/usr/sbin/nologin」および「/bin/false」です。明らかに、シェルではありません。 ...

April 16, 2020 · 7 min
環境構築:Debian 10(buster) にPostgreSQL 11をインストールし、新規DBを作成する方法

環境構築:Debian 10(buster) にPostgreSQL 11をインストールし、新規DBを作成する方法

前書き PostgreSQLは、オープンソースのオブジェクト関係リレーショナルデータベース関係システム(ORDBMS)です。2020年時点のシェアランキングは、4位です。やや人気のないDBと言えるでしょう。 シェア1位のOracle DatabaseおよびMicrosoft SQL Serverは、有償です(Microsoft SQL Severは無償版も存在)。そのため、PostgreSQLは同じくオープンソースであるMySQL(シェア2位)と比較される機会が多いです。PostgreSQLは高機能・堅牢な設計、MySQLは速度に重きを置いた設計であり、用途に応じて使い分けられるようです。 ...

March 20, 2020 · 7 min
manコマンドによる「ASCII ⇔ 8進数、10進数、16進数の変換表」

manコマンドによる「ASCII ⇔ 8進数、10進数、16進数の変換表」

ASCII<->N進数への変換は、Terminalで確認可能 ASCIIコードは、10進数(8進数、16進数)から英数字・記号に変換するための文字コードです。正確には、文字コードとは以下の定義のように、2進数との変換を指します。 ...

January 17, 2020 · 5 min
autofsを用いてHDD/SSD/USBメモリを起動時に自動マウントする方法(Debian)

autofsを用いてHDD/SSD/USBメモリを起動時に自動マウントする方法(Debian)

前書き 本記事では、autofsを用いて、HDD/SSD/USBメモリ(SATA接続 or M.2接続 or USB接続)を自動的にマウントする方法を紹介します。 ...

October 5, 2019 · 4 min
gdisk/mkfsコマンドで2TB以上の大容量HDDをフォーマットする方法

gdisk/mkfsコマンドで2TB以上の大容量HDDをフォーマットする方法

前書き:何故HDDを2TBまでしか認識しないか 本記事では、gdisk/mkfsコマンドを用いて2TB超のHDDをフォーマットする方法を紹介します。 前提知識ですが、HDDは2TBの壁が存在します。HDDは、MBR(Master Boot Record)形式を用いて、パーティション(領域)をセクター単位で管理しています。通常のHDDは、セクターサイズが512Byteであり、パーティション内のセクター開始位置とセクター数の管理には4Byte(32bit)を使用します。この制約によって、「最大2TB(アクセスできるセクター数×セクターサイズ = 2の32乗×512)」までしか管理できません。 ...

October 5, 2019 · 6 min
Debian10をRyzen 3800X環境で動かそうとしてハマった内容(グラボ必須、BIOS設定、Kernel設定)

Debian10をRyzen 3800X環境で動かそうとしてハマった内容(グラボ必須、BIOS設定、Kernel設定)

前書き 増税前(2019年9月)に、自作PCパーツをドサッと買いました。 https://twitter.com/ARC_AED/status/1177817660777582592 構成は、下表の通りです。評判の良い第三世代Ryzen CPUを中心に据えつつ、メモリ量を現状の32GBから64GBに増やし、ストレージも複数OSをインストール可能な環境を目指しました。 ...

September 29, 2019 · 9 min
Terminalベースのブラウザw3m

Terminalベースのブラウザw3m

前書き 前回、キーボードのみで操作を完結させる手段として、keynavを紹介しました。 マウスポインタをキーボードで操作するkeynav 同じように、キーボードで操作が完結できるw3mを本記事で紹介します。w3m(WWW-wo-Miru)は、日本人が作成したテキストベースWebブラウザです。端末上でWeb検索作業できますが、使いづらい部分があったため、それらを補うスクリプトも本記事に記載します。 検証環境 _,met$$$$$gg. nao@debian ,g$$$$$$$$$$$$$$$P. ---------- ,g$$P" """Y$$.". OS: Debian GNU/Linux 10 (buster) x86_64 ,$$P' `$$$. Kernel: 4.19.0-6-amd64 ',$$P ,ggs. `$$b: Uptime: 46 minutes `d$$' ,$P"' . $$$ Packages: 2476 (dpkg) $$P d$' , $$P Shell: fish 3.0.2 $$: $$. - ,d$$' Resolution: 2560x1080 $$; Y$b._ _,d$P' DE: Cinnamon 3.8.8 Y$$. `.`"Y$$$$P"' WM: Mutter (Muffin) `$$b "-.__ WM Theme: cinnamon (Albatross) `Y$$ Theme: BlackMATE [GTK2/3] `Y$$. Icons: gnome [GTK2/3] `$$b. Terminal: gnome-terminal `Y$$b. CPU: Intel i3-6100U (4) @ 2.300GHz `"Y$b._ GPU: Intel HD Graphics 520 `""" Memory: 2974MiB / 32060MiB w3mのインストール方法 $ sudo apt update $ sudo apt install w3m $ sudo apt install w3m-img (注釈)端末上で画像を表示したい場合はインストール w3mの起動方法 [起動書式] ...

September 15, 2019 · 2 min
マウスポインタをキーボードで操作するkeynav

マウスポインタをキーボードで操作するkeynav

前書き Linuxエンジニアの中には、マウスを嫌う人が居ます。なるべくキーボードで操作を完結させる事を美徳と考える人(変人)です。しかし、マウスを完全に排除したくても、マウス(マウスポインタ)で無ければ操作できないタイミングがあります。 ...

September 15, 2019 · 3 min
【Vim8.1.xから標準機能】VimからGDBを起動する方法(マウスでGDBを操作可能)

【Vim8.1.xから標準機能】VimからGDBを起動する方法(マウスでGDBを操作可能)

前書き GDBをリッチなText User interface環境で実行するツールは、以前から複数ありました。例えば、 CGDB:ViライクなキーバインドのGDBフロントエンド GDB TUI mode:EmacsライクなキーバインドのGDB標準のTUI環境(オプションtui) NeoDebug:Vim用GDBフロントエンドプラグイン。Vim標準(Termdebug)より高機能 などがあります。 ...

September 14, 2019 · 4 min
Linux Kernel Tree内で自作Kernelモジュールをビルドする方法(MakefileとKconfigの書き方)

Linux Kernel Tree内で自作Kernelモジュールをビルドする方法(MakefileとKconfigの書き方)

前書き 過去の記事(環境構築: Linux Kernelモジュールの作成準備)では、 Linux Kernelソースコード 自作Kernelモジュール を分離して管理していました。ディレクトリ構成は、以下のような状態です。 ...

July 15, 2019 · 7 min
Linux Kernel: mutex APIによるロック(排他)方法

Linux Kernel: mutex APIによるロック(排他)方法

前書き:mutexとは Linux Kernelに限らず、様々なプログラミング言語やライブラリはロック機構を提供しています。ロック機構は、複数のプロセスが同時に共有データを書き換え、意図しないデータ状態となる事を防ぎます。代表的なロック機構には、 ...

July 7, 2019 · 8 min
Linux Kernelの簡単なCharacter Deviceを作成する方法(Linked List APIの使用方法サンプル)

Linux Kernelの簡単なCharacter Deviceを作成する方法(Linked List APIの使用方法サンプル)

前書き 本記事では、Linux KernelにおけるCharacter Device向けのDevice Driverを作成する方法を示します。専用のHardware(例:シリアルデバイスのUARTなど)を用いず、メモリ上のデータ読み書きのみを行います。そのため、擬似デバイス(/dev/nullや/dev/zeroなど)を操作するDriverと同等です。 ...

June 23, 2019 · 13 min
環境構築:ユーザフレンドリーで補完機能の強力なfishへ移行(Login shellをbashからfishへ移行)

環境構築:ユーザフレンドリーで補完機能の強力なfishへ移行(Login shellをbashからfishへ移行)

前書き 本記事では、CLI(Terminal)で用いるinteractive shellを**fish(friendly interactive shell)に移行する方法を記載します。fishは、Debian環境のdefault shellであるdash(POSIX互換のash拡張)やlogin shellであるbash**よりも優れた点が多いです。 ...

June 15, 2019 · 6 min
Linuxコマンドのソースコードを取得する方法(Debian環境):オリジナルコマンド作成前の勉強向け

Linuxコマンドのソースコードを取得する方法(Debian環境):オリジナルコマンド作成前の勉強向け

前書き 少し古い雑誌ですが、CQ出版社のInterface誌(2016年10月号)に「レベルアップ! オリジナル・コマンドを作る」という記事がありました。しかし、この雑誌に書かれている内容は、bashに偏っており、情報が不足していると(当時)感じました。 ...

June 1, 2019 · 6 min
環境構築:Debianソースコードパッケージをビルドする方法(debソースパッケージ構築ツールのインストール)

環境構築:Debianソースコードパッケージをビルドする方法(debソースパッケージ構築ツールのインストール)

前書き 過去の記事で、debソースパッケージの取得方法を示しました。 Linuxコマンドのソースコードを取得する方法(Debian環境):オリジナルコマンド作成前の勉強向け ソースコードを取得したら、自身で改変し、ビルドも試したくなる筈です。そのため、本記事では、debソースパッケージをビルドする方法を示します。debソースパッケージの取得に関する設定は、上記の過去記事を参照して下さい。 ...

June 1, 2019 · 4 min
neomutt

環境構築:Terminal(CLI)向けメーラー"Neomutt"でGmailを送受信するための設定

前書き Neomuttは、Command Line Interface(CLI)で使用するメールクライアントです。mutt(1995年に登場したメーラー)をforkしたプロジェクトであり、その上位互換となっています。CLI環境でメールを読む理由は、動作が快適な事や省メモリである事が挙げられます。 ...

June 1, 2019 · 9 min
環境構築:Redox向けcoreutils(Rust)のCode Reading準備およびReading対象コマンド一覧

環境構築:Redox向けcoreutils(Rust)のCode Reading準備およびReading対象コマンド一覧

前書き:Redox版coreutilsを読む理由 Redoxプロジェクトが開発しているcoreutilsを読む理由は、「(Rust初心者の私が)Rustを学習する」ためです。Redoxプロジェクトに関わるコードは、基本的にRustで書かれています。何故、Redox(Kernel)ではなくて、coreutilsを読むのかと言えば、 Kernelを読めるほど、私がRustに慣れていない RedoxプロジェクトのCoreutilsは小規模 CoreutilsはUnix/Linuxコマンドのため、私が機能を把握済み という理由です。 ...

May 3, 2019 · 7 min
Linux Kernel: __initマクロ、__exitマクロの役割(メモリの有効利用)

Linux Kernel: __initマクロ、__exitマクロの役割(メモリの有効利用)

__initマクロ、__exitマクロが使われるケース 一般的に、__initマクロはKernelモジュールの初期化時、__exitマクロはKernelモジュールの終了時に付与します。以下の例では、初期化関数がdebimate_init()、終了関数がdebimate_exit()で、それぞれにマクロを付与しています。 ...

April 29, 2019 · 4 min
【Desktop entry】Linux環境でデスクトップアイコン(ショートカット)をfreedesktop.org仕様で作成する方法

【Desktop entry】Linux環境でデスクトップアイコン(ショートカット)をfreedesktop.org仕様で作成する方法

前書き 本記事では、既存アプリや自作アプリのショートカットを作成したい場合、デスクトップアイコン(ショートカット)を用意する方法を示します。Linuxは、複数のデスクトップ環境(GNOME、MATE、KDEなど)が存在しますが、手順はX Window System環境であれば同一です。その理由は、デスクトップアイコン(ショートカット)仕様がfreedesktop.orgによって(半標準として)定められているためです。 ...

March 30, 2019 · 8 min
UserLAnd

AndroidにLinux環境を構築する"UserLAnd"がソースリーディング環境(スマホ用)として最適

前書き AndroidにLinuxを導入する試みは、以前からありました。この試みは、AndroidのKernel部分が“Linux Kernel”(Linuxと共通)ですから、自然な発想と考えられます。過去の例で言えば、「Ubuntu(Debian)をAndroid端末に導入」したケースがあります。しかし、これまでのAndroidのLinux化は、煩雑な手順が必要、かつ失敗した場合に端末が文鎮化してしまうリスクがありました。 ...

March 16, 2019 · 6 min
mmdebstrapによるarmhf向けrootfsの作成方法(公式最小サイズ27MB)

mmdebstrapによるarmhf向けrootfsの作成方法(公式最小サイズ27MB)

mmdebstrapとは mmdebstrapとは、最小構成rootfsを作成するためのdebootstrapを代替するコマンドです。debootstrapと同様に、Debianサポートアーキテクチャ向けのrootfsを作成できます。mm(Multi-Mirror)が意味するように、複数のミラーサーバを使用する事により、debootstrapより3〜6倍ほど高速に動作します。 2019年3月現在(Debian9, stretch環境)では、mmdebstrapはtesting/unstableに存在します。stableに存在しないmmdebstrapを知ったキッカケは、debian-embeddedのメーリスです。128MB以下のrootfsを作成する方法がメーリス内で質問され、mmdebstrapの開発者(Johannes Schauer)がその方法の一つとして紹介していました。質問自体は、最終的にmmdebstrapが作成するrootfsのサイズがネックになり、他の方法(Yocto)が採用されていました。 ...

March 10, 2019 · 12 min
Debian: 任意のtesting/unstableパッケージのみをinstallする方法(システム全体はstableを維持)

Debian: 任意のtesting/unstableパッケージのみをinstallする方法(システム全体はstableを維持)

前書き Debianパッケージは、基本的な使い方をしていれば、安定版(stable)がシステムにinstallされます。しかし、「使用したいパッケージがstableにない場合」や「より新しいパッケージを使いたい場合」、システムにtesting/unstableパッケージを導入する必要性がでてきます。 ...

March 9, 2019 · 8 min
Bash(Shell Script)内メッセージの国際化方法

Bash(Shell Script)内メッセージの国際化方法

前書き BashによるShell Scriptを国際化(メッセージ翻訳)する方法は、C言語/Python/Rubyなどと同様です。つまり、gettextライブラリを使用し、翻訳対象メッセージの対訳を保存したカタログファイル(.moバイナリ、言語毎に必要)を用意する方法です。本記事では、その使い方を説明します。 ...

February 3, 2019 · 9 min
環境構築: Linux Kernelモジュールの作成準備

環境構築: Linux Kernelモジュールの作成準備

前書き 本記事は、「Linux Kernel Device Driverの雛形作成」や「Linux Kernel内APIを試すためのモジュール作成」を目的として、最低限必要な環境構築手順を記載しています。 ...

January 27, 2019 · 10 min
ccache(compiler cache)によるビルド高速化

ccache(compiler cache)によるビルド高速化

前書き 大規模なプログラムをビルドする場合、数十分〜数時間かかる事があります。ビルド時間が長いと、それだけ開発者の待ち時間が増えるわけですから、短いに越したことはありません。そんなビルド時間を短縮するツールとして、ccacheがあります。 ...

January 26, 2019 · 4 min
fetcher

コードリーディング(Bash):システム情報表示ツール"neofetch"

前書き 本記事は、システム情報表示ツール"neofetch“のコードリーディング結果を記載しています。 リーディング動機は、**「neofetchは、システム情報をどこから集めているか」**が気になったからです。neofetchは約2600Step程度の小規模なBash scriptであるため、関数レベルで解説します。 ...

January 22, 2019 · 15 min
コードリーディング(C言語):chroot / ischroot

コードリーディング(C言語):chroot / ischroot

前書き 本記事は、以下のコマンドのコードリーディング結果を記載しています。 プロセスおよび子プロセスの(見かけ上の)ルートディレクトリを変更するchroot プロセスがchroot環境(jail環境)で動作しているかを検出するischroot ...

January 20, 2019 · 22 min