メインコンテンツまでスキップ

現在のパソコン周りの環境まとめ

· 約2分
ひかり
Main bloger

パソコン周りに結構お金をかけている気がするが、いったいどのくらいなのか把握していないのでまとめる。

PC 本体

パーツメーカー型番購入時の価格備考
マザーボードASUSB450M-K\7,291MicroATX
CPUAMDRyzen 3 3900X\53,28012 コア 24 スレッド、基本クロック 3.8GHz、最大 4.6GHz、TDP 105W、Passmark 32784
メモリーPanramW4U3200PS-16G\16,478DDR4-3200 16GiB x 2
SSDCFDCSSD-M2B1TPG3VNF\12,9801TB NVMe
GPUPalit MicrosystemsNED3080019IA-132AA\120,500RTX 3080
電源ユニットCorsairRM850\12,291850W 80PLUS Gold
PC ケースDEEPCOOLMACUBE 110 PK R-MACUBE110-PRNGM1N-A-1\6,000MicroATX 対応

合計: 228,820 円

ひとこと: 意外と高くない (?)。MicroATX なので拡張性がほぼない。ケチらずに ATX 買ったほうがよかったかもしれない。特にメモリーを増やせないのが。メモリーは普段から 20 GiB 以上消費しているので、もっと欲しいかも。

周辺機器

周辺機器メーカー型番購入時の価格備考
ディスプレイアイ・オー・データLD4K271DB\33,8004K。27 インチ。Vesa 対応
液晶タブレットXP-PenArtist 22 セカンド\47,680FHD。21.5 インチ
マウスロジクールERGO M575\5,500トラックボール。Bluetooth、Unifying
キーボード東プレREALFORCE R2-JP4-BK\15,470USB。静電容量無接点方式
WEB カメラエレコムUCAM-C820ABBK\3,809FHD
スピーカーパイオニア-\1,000中古。ハードオフ
アンプELEGIANT-\3,488中華デジタルアンプ。Bluetooth 対応とあったが使えなかった。付属の AUX ケーブルが安っぽいので買い換え推奨。
マイクUHURUUM900\6,499中華 USB マイク。
ヘッドホンaudio-technicaATH-M50x\16,000

合計: 133,246 円

その他

周辺機器メーカー型番購入時の価格備考
IC カードリーダーライターNTT コミュニケーションズACR39-NTTCom\2,320マイナンバーの読み書き可能
電源タップエレコムT-DK2320CBS\1,264デスク固定。3 個口

IT パスポートのアルファベットまとめ

· 約5分
ひかり
Main bloger
略称名称意味
CSRCorporate Social Responsibility企業の社会的責任
SDGsSustainable Development Goals持続可能な開発目標
OJTOn the Job Training実務による職業教育
Off-JTOff the Job Training職場を離れて行う職業訓練
HRTechHuman Resource Technology人事における IT の活用
CEOChief Executive Officer最高経営責任者
CIOChief Information Officer最高情報責任者
COOChief Operating Officer最高執行責任者
CFOChief Financial Officer最高財務責任者
ABC 分析データをパレート図で表し、重要度に応じて 3 つにグループ分けしたもの
B/SBalance Sheet貸借対照表
ROEReturn On Equity自己資本利益率 ROE = 当期純利益 / 自己資本
JAN コードJapanese Article Numberバーコードの規格
QR コードQuick Responseマトリックス型 2 次元コード
ISOInternational Organization for Standardization国際標準化機構
SWOT 分析Strengths・Weaknesses・Opportunities・Threats企業がおかれている状況を強み、弱み、機会、脅威に分類
PPMProduct Portfolio Management花形、問題児、金のなる木、負け犬に分類
M&AMergers and Acquisitions会社の買収・合併
VCVenture Capitalハイリターンを狙ってベンチャー企業に投資する投資会社
IPOInitial Public Offering未公開株の公開
TOBTake Over Bid株式公開買い付け。不特定多数の株主から株式市場外で株式を買い集める制度。
MBOManagement Buyout会社の経営陣が自社株買いを行い買収し独立。
4PProduct・Price・Place・Promotionマーケティングミックスにおいて会社がコントロール可能な 4 つの手段
4CCustomer Value・Cost・Convenience・Communication売り手視点でのマーケティングミックス。
RFM 分析Recency・Frequency・Monetary「最終購入日」、「購入頻度」、「購入金額」で購買行動を分析し顧客をグループ分け。
UXUser Experienceユーザーエクスペリエンス。ユーザー製品、サービスから得る体験。
BSCBalance Scorecard「財務」、「顧客」、「業務プロセス」、「学習と成長」から業績評価を行う
CSFCritical Success Factors重要成功要因。モチベーションなど。
KPIKey Performance Indicator重要業績評価指標。目標の達成状況を示す定性的な指標。
ERPEnterprise Resource Planning企業資源計画。経営資源 (人・モノ・カネ・チエ) を統合的に管理する手法
CRMCustomer Relationship Management顧客関係管理。顧客と良好な関係を気付くことで長期的な利益を得る手法
SFASales Force Automation営業支援システム。営業ノウハウを一元管理し効率的に営業を行うシステム
SCMSupply Chain Management供給連鎖管理。調達・生産・販売の最適化を行う。
RFIDRadio Frequency Identification電波により情報のやり取りを行う技術。
NFCNear Field Communication至近距離での無線通信の国際標準規格。
AIArtifical Intelligence人工知能
POS システムPoint of Sale販売情報を管理するシステム。
CADComputer Aided Designコンピューター支援設計。製品をコンピューターで設計。
CAMComputer Aided Manifacturingコンピュータ支援製造。工場などの機械をコンピューターを用いて制御するシステム。
JITJust In Time必要なものを必要な時に必要なだけ生産。
ECElectronic Commerce電子商取引。インターネット上における商品の取引。
IoTInternet of Things「モノ」をインターネットに接続
Society 5.0仮想と現実を連携し、経済発展と社会課題の解決を両立する社会。
EAEnterprise Architecture大きな組織の最適化をする手法
SoESystem of Engagement顧客とのつながりを強化するシステム。
DFDData Flow Designデータフロー図。4 種類の記号を用いてデータの流れを表す。

git のメモ

· 約1分
ひかり
Main bloger

ブランチ (git branch / git checkout)

ブランチの切り替え

git checkout <ブランチ名>

ブランチの削除

git branch -d <ブランチ名>

空のブランチ作成

git checkout --orphan=<ブランチ名>
git reset --hard

ログ

ログを表示

git log --decorate=full --graph --all
注記

vscode を使えるのならば、拡張機能 Git Graph をインストールするとよい。

過去に戻る

# コミット ID を調べる
git log

git checkout <コミット ID>
注記

コミット ID は 4 文字で省略可

過去から戻る

git checkout <ブランチ名>

コミットを取り消す (git reset)

git reset --soft @^
注記

@ は HEAD と同じ。直前のものは ^ で表す。

JavaScript のメモ

· 約2分
ひかり
Main bloger

配列

例: [1, 2, 3]

配列のコピー

// 参照渡し
let a = [1, 2, 3]
let b = a
b[0] = -1
a // [-1, 2, 3]

// コピー
a = [1, 2, 3]
b = a.slice()
b[0] = -1
a // [1, 2, 3]
b // [-1, 2, 3]

末尾の値

let a = [1, 2, 3]
a.at(-1)

配列を取り出す

let a = [1, 2, 3, 4, 5]
a.slice(2) // [3, 4, 5]
// 注意
a.slice(2, -1) // [3, 4]

数列の作成 (いわゆる range)

const range = (start, stop, step) =>
Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step));

range(0, 10, 1) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for-of

for(let c of ['a', 'b', 'c']){
console.log(c)
}
結果
a
b
c

map

let a = [1, 2, 3].map(x => x ** 2)
// [2, 4, 6]

すべて零の配列 (zeros)

Array.zeros = (n) => Array.from({ length: n}, () => 0);

Array.zeros(5) // [0, 0, 0, 0, 0]

合計 (sum)

Array.prototype.sum = function(){ return this.reduce((prev, curr) => prev + curr, 0) }

[1, 2, 3, 4].sum() // 10

平均 (mean)

Array.prototype.mean = function(){ return this.reduce((prev, curr) => prev + curr, 0) / this.length }

[1, 2, 3, 4].mean() // 2.5

文字列

例: "text"

テンプレートリテラル

let a = 100
`${a / 10}` // "10"

数値

例: 1

文字列を数値に変換

parseInt('100') // 100 
parseFloat('100.1') // 100.1

フォーマット

// 小数点以下 3 桁
(1.2).toFixed(3) // "1.200"

日付

let today = new Date

today.toDateString() // "Sat Jan 01 2022"
today.toISOString() // "2021-12-31T15:00:00.000Z"
today.toLocaleDateString() // "2022/1/1"
today.toLocaleString() // "2022/1/1 0:00:00"
today.toLocaleTimeString() // "0:00:00"
today.toString() // "Sat Jan 01 2022 00:00:00 GMT+0900 (日本標準時)"
today.toTimeString() // "00:00:00 GMT+0900 (日本標準時)"
today.toUTCString() // "Fri, 31 Dec 2021 15:00:00 GMT"

Ubuntu に Docker をインストールする

· 約14分
ひかり
Main bloger

https://docs.docker.com/engine/install/ubuntu/#set-up-the-repository の日本語訳です。

Docker Desktop for Linux

Docker Desktop を使用すると、Linux と同様に、 Mac と Windows 上でコンテナを簡単に構築、共有、実行できます。 Docker Desktop for Linux が一般提供版となったことをお伝えできることを嬉しく思います。 詳細については、Docker Desktop for Linuxを参照してください。

Ubuntu で Docker Engine を使い始めるには、 前提条件を満たしていることを確認してから、 Docker をインストールしてください。

前提条件

OS の要件

Docker Engine をインストールするには、 次のいずれかの Ubuntu バージョン (64 bit) が必要です。

  • Ubuntu Jammy 22.04 (LTS)
  • Ubuntu Impish 21.10
  • Ubuntu Focal 20.04 (LTS)
  • Ubuntu Bionic 18.04 (LTS)

Docker Engine は、x86_64 (または amd64)、armhfarm64 及び s390x アーキテクチャでサポートされています。

古いバージョンをアンインストールする

古いバージョンの Docker は docker、docker.io、docker-engine と呼ばれていました。 これらがインストールされている場合は、アンインストールします。

$ sudo apt-get remove docker docker-engine docker.io containerd runc

apt-get がこれらのパッケージのどれもインストールされていないと報告すれば問題ありません。

イメージ、コンテナ、ボリューム、ネットワークなどの /var/lib/docker/ のコンテンツは保存されます。 既存のデータを保存する必要がなく、クリーンインストールから開始したい場合は、このページの下にある(Docker Engine のアンインストール](#)セクションを参照してください。

インストール方法

Docker Engine は、必要に応じてさまざまな方法でインストールできます。

  • インストールとアップグレードタスクを容易にするために、ほとんどのユーザは Docker のリポジトリをセットアップし、そこからインストールします。これは推奨されます。
  • 一部のユーザは DEB パッケージをダウンロードして手動でインストールし、アップグレードを完全に手動で管理します。これは、インターネットにアクセスできないエアギャップのあるシステムに Docker をインストールする場合などに便利です。
  • テストや開発環境では、自動化された便利なスクリプトを使って Docker をインストールするユーザもいます。

リポジトリを使用してインストールする

Docker Engine を新しいホストマシンに初めてインストールする前に、Docker リポジトリをセットアップする必要があります。 その後、リポジトリから Docker をインストールして更新することができます。

リポジトリを設定する

  1. apt パッケージインデックスを更新してパッケージをインストールし、apt が HTTPS 経由でリポジトリを使用できるようにします。

    $ sudo apt-get update

    $ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  2. Docker の公式 GPG キーを追加します。

    $ sudo mkdir -p /etc/apt/keyrings
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  3. リポジトリを設定するには、次のコマンドを使用します。

    $ echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker エンジンのインストール

  1. apt パッケージインデックスを更新し、最新バージョンの Docker Engine、containerd、Docker Compose をインストールするか、次のステップに進んで特定のバージョンをインストールします。

    $ sudo apt-get update
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    apt-get update の実行時に GPG エラーが発生しますか?

    デフォルトの umask が正しく設定されていない可能性があります。 これにより、リポジトリの公開鍵ファイルが検出されなくなります。次のコマンドを実行してリポジトリを再度更新してください。
    sudo chmod a+r /etc/apt/keyrings/docker.gpg

  2. Docker Engine の特定のバージョンをインストールするには、リポジトリにある利用可能なバージョンのリストから選択してインストールします。

    a. リポジトリで利用可能なバージョンをリストします。

    $ apt-cache madison docker-ce

    b. 2番目のカラムのバージョン文字列 (5:20.10.16~3-0~ubuntu-jammy など) を使用して特定のバージョンをインストールします。

    $ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin
  3. hello-world イメージを実行して、Docker Engine が正しくインストールされていることを確認します。

    $ sudo docker run hello-world

    このコマンドは、テスト・イメージをダウンロードし、コンテナ内で実行します。コンテナが実行されると、メッセージを出力して終了します。

Docker Engine がインストールされて実行されています。 docker グループは作成されますが、ユーザは追加されません。 Docker コマンドを実行するには sudo を使用する必要があります。 特権のないユーザが Docker コマンドを実行できるようにするには、Linux の postinstall を続行します。 その他のオプションの設定手順も実行できます。

Docker エンジンのアップグレード

Docker Engine をアップグレードするには、 まず sudo apt-get update を実行し、 インストール手順に従ってインストールする新しいバージョンを選択します。

パッケージからインストールする

Docker のリポジトリを使用して Docker Engine をインストールできない場合は、 リリース用の .debファイルをダウンロードして手動でインストールすることができる。 Docker をアップグレードするたびに、新しいファイルをダウンロードする必要がある。

  1. https://download.docker.com/linux/ubuntu/dists/ に行き Ubuntu バージョンを選択して、pool/stable/ をブラウズして amd64armhfarm64、または s390x を選択し、インストールしたい Docker Engine バージョンの .deb ファイルをダウンロードします。
  2. Docker Engine をインストールし、以下のパスを Docker パッケージをダウンロードしたパスに変更します。
    $ sudo dpkg -i /path/to/package.deb
    Docker デーモンが自動的に起動します。
  3. hello-world イメージを実行して、Docker Engine が正しくインストールされていることを確認します。
    $ sudo docker run hello-world
    このコマンドは、テスト・イメージをダウンロードし、コンテナ内で実行します。コンテナが実行されると、メッセージを出力して終了します。

Docker Engine がインストールされて実行されています。 docker グループは作成されますが、ユーザは追加されません。 sudo を使用してDockerコマンドを実行する必要があります。 特権のないユーザが Docker コマンドを実行できるようにするための Linux のインストール後の手順と、その他のオプションの設定手順に進みます。

Docker エンジンをアップグレードする

Docker Engine をアップグレードするには、新しいパッケージファイルをダウンロードし、新しいファイルを指定してインストール手順を繰り返します。

便利スクリプトを使用してインストールする

Docker は、get.docker.com で、 Docker を開発環境に迅速かつ非インタラクティブにインストールするための便利なスクリプトを提供しています。 便利なスクリプトはプロダクション環境には推奨されていませんが、 ユーザのニーズに合わせたプロビジョニングスクリプトを作成するための例として使用することができます。パッケージリポジトリを使用してインストールするためのインストール手順については、リポジトリを使用したインストール手順も参照してください。 スクリプトのソースコードはオープンソースであり、 GitHub の docker-install リポジトリにあります。

ローカルで実行する前に、インターネットからダウンロードしたスクリプトを必ず確認してください。 インストールする前に、便利スクリプトの潜在的なリスクと制限についてよく理解してください。

  • スクリプトを実行するには、root 権限または sudo 権限が必要です。
  • このスクリプトは、お使いの Linux ディストリビューションとバージョンを検出し、パッケージ管理システムを設定しようとするもので、ほとんどのインストール・パラメーターをカスタマイズすることはできません。
  • スクリプトは、確認を求めることなく依存関係と推奨事項をインストールします。ホスト・マシンの現在の構成によっては、多数のパッケージがインストールされる場合があります。
  • デフォルトでは、スクリプトは Docker、containerd、runc の最新安定リリースをインストールします。このスクリプトを使用してマシンをプロビジョニングすると、Docker の予期しないメジャーバージョンのアップグレードが発生する可能性があります。本番システムにデプロイする前に、テスト環境で (メジャー) アップグレードを必ずテストしてください。
  • スクリプトは、既存の Docker インストールをアップグレードするようには設計されていません。スクリプトを使用して既存のインストールを更新する場合、依存関係が期待されたバージョンに更新されない可能性があり、古いバージョンが使用される原因となります。
ヒント: 実行前にスクリプトステップをプレビューする

DRY_RUN=1 オプションを指定してスクリプトを実行すると、インストール時にスクリプトが実行するステップを確認できます。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ DRY_RUN=1 sh ./get-docker.sh

次の例では、get.docker.com からスクリプトをダウンロードして実行し、Dockerの最新の安定リリースをLinuxにインストールします。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

Docker がインストールされている。Docker サービスは Debian ベースのディストリビューションで自動的に起動します。 CentOS、Fedora、RHEL、SLES などの RPM ベースのディストリビューションでは、 適切な systemctl または service コマンドを使用して手動で起動する必要があります。 メッセージが示すように、root 以外のユーザはデフォルトで Docker コマンドを実行できません。

非特権ユーザとして Docker を使用するか、ルートレスモードでインストールするには?

インストールスクリプトには、Docker をインストールして使用するために root 権限または sudo 権限が必要です。 root 以外のユーザに Docker へのアクセスを許可したい場合は、 Linux のインストール後の手順を参照してください。 Docker は、root 権限なしでインストールすることも、 root なしモードで実行するように設定することもできます。 Docker を root なしモードで実行する方法については、 root 以外のユーザとして Docker デーモンを実行する (root なしモード)を参照してください。

プレリリースをインストールする

Docker は test.docker.com で、Docker のプレリリースを Linux にインストールするための便利なスクリプトも提供しています。 このスクリプトは get.docker.com のスクリプトと同じですが、Docker の安定版とプレリリース (ベータバージョン、リリース候補) の両方を含むパッケージリポジトリから "test" チャネルを有効にするようにパッケージマネージャを設定します。 このスクリプトを使用して、新しいリリースに早期にアクセスし、安定版としてリリースされる前にテスト環境で評価します。

"test" チャネルから Linux に最新バージョンの Docker をインストールするには、次のコマンドを実行します。

$ curl -fsSL https://test.docker.com -o test-docker.sh
$ sudo sh test-docker.sh

便利スクリプトを使用した後に Docker をアップグレードする

便利スクリプトを使用して Docker をインストールした場合は、 パッケージマネージャを直接使用して Docker をアップグレードする必要があります。 便利スクリプトを再実行するメリットはなく、 ホストマシンにすでに追加されているリポジトリを再追加しようとすると問題が発生する可能性があります。

Docker Engine をアンインストールする

  1. Docker Engine、CLI、Containerd、Docker Compose パッケージのアンインストール

    $ sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
  2. ホスト上のイメージ、コンテナ、ボリュームまたはカスタマイズされた構成ファイルは、自動的には削除されません。すべてのイメージ、コンテナおよびボリュームを削除する手順は、次のとおりです。

    $ sudo rm -rf /var/lib/docker
    $ sudo rm -rf /var/lib/containerd

編集した設定ファイルは手動で削除する必要があります。

次のステップ

cublas の使い方メモ

· 約1分
ひかり
Main bloger

この記事は書きかけです。

cublasSetMatrix()

cublasStatus_t
cublasSetMatrix(int rows, int cols, int elemSize,
const void *A, int lda, void *B, int ldb)

ホストメモリー上の行列 A から、GPU メモリー上にある行列 Brow × col の要素をコピーする関数。 各要素は elemSize バイトであり、行列は列優先で格納され、 先頭の次元はそれぞれ ldaldb で指定する。

参考: https://docs.nvidia.com/cuda/cublas/index.html#cublassetmatrix

自作 gem の作り方

· 約6分
ひかり
Main bloger

gem を作成 (bundle gem)

gem_name という gem のテンプレートを作成する場合は以下を実行します。

bundle gem gem_name

bundle gem のオプション

bundle gem にはオプションが存在します。

詳細またはその他のオプションを知りたい場合は Bundler: bundle gem を参照してください。

オプション説明
--exe, -b, --bingem にバイナリ実行ファイルを含めます。
--extgem に C 拡張を含めます。
--mitプロジェクトを MIT ライセンスにします。
--cici サービスを設定します。
--linterリンターとフォーマッターを指定します。

例: リンターに rubocop を使用し、MIT ライセンスでコマンドを含み、C 言語拡張を含む myapp という gem を作成する場合

bundle gem myapp --exe --ext --mit --ci=github --linter=rubocop

プロジェクトの構造

上記コマンドで生成したプロジェクトの構造は以下のようになっています。

myapp
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── bin
│   ├── console
│   └── setup
├── exe
│   └── myapp
├── ext
│   └── myapp
│   ├── extconf.rb
│   ├── myapp.c
│   └── myapp.h
├── lib
│   ├── myapp
│   │   └── version.rb
│   └── myapp.rb
├── myapp.gemspec
└── sig
└── myapp.rbs

各ディレクトリーは以下のようになっています。

  • lib/: ライブラリーのコード (require で呼び出される)
  • ext/: C 言語のソースコード (インストール時にコンパイルされ、require で呼び出される)
  • exe/: コマンドがある

myapp.gemspec がもっとも重要なファイルで、gem の構成が定義されています。 基本的に上記 3 つのディレクトリー (C 言語を使用しない場合は、2 つのディレクトリー) の中にあるファイルと gemspec ファイルを編集します。(必要に応じて Rakefile や README.md も編集します。)

Gemfile は編集しないでください。

gemspec の編集

gem を作るために myapp.gemspec を編集する必要があります。

TODO のある行やホームページの行をコメントアウトし、spec.summary の設定を行えば最低限動作します。

必須である項目を以下に示します。

  • spec.name
  • spec.version
  • spec.authors
  • spec.summary

bundle install コマンドを実行し、エラーがなければ問題ありません。

依存パッケージの追加

gemspec に以下のように追記して依存している gem を追加できます。

  spec.add_dependency "example-gem", "~> 1.0"

gemspec に以下のように追記し開発時に必要な gem を追加できます。

  spec.add_development_dependency "example-gem", "~> 1.0"

詳しくは、class Gem::Specification (Ruby 3.1) リファレンスマニュアルlibrary rubygems (Ruby 3.1 リファレンスマニュアル) を参照してください。

bundle install

bundle install を実行することで、Gemfile および gemspec に記述されている gem がインストールされます。

バージョンの変更

バージョンは、lib/myapp/version.rb に定義されています。

コンパイル

以下のコマンドを実行し、C 拡張をコンパイルします。 このコマンドの実行により、共有ライブラリー lib/myapp/myapp.so が生成されます。

rake compile

コンパイル後、gem に含まれるコマンド実行すると、 エラーなく実行されます。

bundle exec myapp

C 拡張

C 言語で Ruby を拡張することができます。

たとえば、/etc/myapp/myapp.c を以下のように変更します。

void
Init_myapp(void)
{
rb_mMyapp = rb_define_module("Myapp");
+ rb_p(rb_str_new2("Hello, world!"));
}

rake compile でコンパイルを行い、bundle exec myapp を実行すると、"Hello, world!" と表示されます。

この例は、C 言語から Ruby の C API を呼び出し表示するプログラムで、

p "Hello, world!"

と同等です。

Ruby の C API だけではなく、コンピューターにインストールされている共有ライブラリーを扱うことができるため、ラッパーを作成することが可能です。

また、C 拡張により計算が必要な場合に高速化することができます。

ライブラリーの作成

lib/myapp.rb あたりを編集。

新しいファイルを作成した場合は、git add する必要があります。

gem をインストール (rake install)

プロジェクト内の gem がインストールされます。

rake install

gem を公開 (rake release)

gem を公開するには、rubygems のアカウントを作成する必要があります。 リリースするたびに、バージョンを変更する必要があります。

rake release

gem パッケージを生成 (rake build)

プロジェクトから pkg/myapp-x.x.x.gem が作成されます。

rake build

Ubuntu 系の Linux ディストリビューションの自作方法

· 約4分
ひかり
Main bloger

概要

  1. iso ファイル (ディスクイメージ) を展開
  2. squashfs ファイル (/ の中、ファイルシステムイメージ) を展開
  3. (2.) で展開してものに対し、カスタマイズするためのスクリプトを適用
  4. (3.) から squashfs を作成 (mksquashfs コマンド)
  5. (4.) を (1.) に入れて、チェックサムやファイルサイズ、パッケージのリストを更新
  6. (5.) を iso ファイルを作成 (xorriso コマンドを使用)

この流れで、Ubuntu の改造ディストリビューションを作成できます。

用意するもの

  • Ubuntu のイメージ

必要なパッケージのインストール

sudo apt install cd-boot-images-amd64 xorriso

パッケージがないとかでインストールができない場合は以下を実行し再度実行してください。

echo "deb http://cz.archive.ubuntu.com/ubuntu jammy main" | sudo tee -a /etc/apt/sources.list
sudo apt update

展開とマウント

# DISK_IMAGE はディスクイメージのパスです。
DISK_IMAGE=/mnt/d/ubuntu-22.04-desktop-amd64.iso

# RELEASENOTE_URL はリリースノートの URL です。
RELEASENOTE_URL="http://"

# 作業ディレクトリーの作成
mkdir ~/my-distribution
cd ~/my-distribution

# ディスクイメージのシンボリックリンクを作成します。
ln -s $DISK_IMAGE image.iso

# ディスクイメージをマウント
# 警告が出ますが無視してください。
mkdir mnt
sudo mount -o loop image.iso mnt

# ディスクイメージのコピー
# マウントした場所は書き換えができないのでコピーします。
# ただし、ディストリビューションのファイルシステムである /casper/filesystem.squashfs は除外してコピーします。
mkdir disk
rsync -P -a --exclude=/casper/filesystem.squashfs mnt/ disk

# ファイルシステムイメージのマウント
mkdir mntfs
sudo mount -t squashfs -o loop mnt/casper/filesystem.squashfs mntfs

# ファイルシステムをコピー
# マウントした場所は書き換えできないので、コピーします。
mkdir squashfs
sudo rsync -P -a mntfs/ squashfs

# マウントは不要になったのでアンマウントします。
sudo umount mntfs
sudo umount mnt
rm -r mntfs mnt

# シンボリックリンクも不要なので削除します
rm image.iso

# リリースノートの URL を設定します。
echo $RELEASENOTE_URL | sudo tee disk/.disk/release_notes_url

# ディスク情報を設定します。
today=$(date +"%Y%m%d")
echo -n "MyDistribution 22.04 LTS \"Jammy Jellyfish\" - Release amd64 ($today)" | tee
echo -n "MyDistribution 22.04 LTS \"Jammy Jellyfish\" - Release amd64 ($today)" | sudo tee disk/.disk/info

# インストーラーの言語を日本語に設定します。
cat | sudo tee -a disk/preseed/ubuntu.seed <<EOF
d-i debian-installer/language string ja
d-i debian-installer/locale string ja_JP.UTF-8
d-i keyboard-configuration/layoutcode string jp
d-i keyboard-configuration/modelcode jp106
d-i keyboard-configuration/layout select Japanese
d-i keyboard-configuration/variant select Japanese
EOF

# grub.cfg の日本語化
splash=$(echo "splash --- debian-installer/language=ja" \
"debian-installer/locale=ja_JP.UTF-8" \
"keyboard-configuration/layoutcode?=jp" \
"keyboard-configuration/modelcode?=pc105")
sudo sed -i "s#splash ---#$splash#" disk/boot/grub/grub.cfg

カスタマイズするためのスクリプトの割り当て

# MyDistribution.sh は Ubuntu をカスタマイズするスクリプトです。
chroot squashfs /bin/bash MyDistribution.sh

ファイルシステムの作成

# パッケージ一覧を書き込み
sudo chroot squashfs/ dpkg-query -W --showformat='${binary:Package}\t${Version}\n' |\
tee disk/casper/filesystem.manifest

# ファイルシステムのサイズを書き込み
sudo du -B 1 -s squashfs/ | cut -f1 | sudo tee disk/casper/filesystem.size

# ファイルシステムのイメージ化
sudo mksquashfs squashfs/ disk/casper/filesystem.squashfs -xattrs -comp xz
sudo rm disk/casper/filesystem.squashfs.gpg

# md5sum.txt を出力
cd disk
find . -type f -not -name 'md5sum.txt' -not -path './boot/*' -not -path './EFI/*' -print0 | xargs -0 md5sum | sudo tee md5sum.txt
md5sum ./boot/memtest86+.bin | sudo tee -a md5sum.txt
md5sum ./boot/grub/*.cfg | sudo tee -a md5sum.txt
cd ..

ディスクイメージの作成

VOLUME_ID="MyDistribution"
OUTPUT_ISO="mydistribution-22.04-desktop-amd64.iso"

xorriso \
-as mkisofs \
-volid "$VOLUME_ID" \
-o "$OUTPUT_ISO" \
-J -joliet-long -l \
-b boot/grub/i386-pc/eltorito.img \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
--grub2-boot-info \
--grub2-mbr /usr/share/cd-boot-images-amd64/images/boot/grub/i386-pc/boot_hybrid.img \
-append_partition 2 0xef /usr/share/cd-boot-images-amd64/images/boot/grub/efi.img \
-appended_part_as_gpt \
--mbr-force-bootable \
-eltorito-alt-boot \
-e --interval:appended_partition_2:all:: \
-no-emul-boot \
-partition_offset 16 \
-r \
disk/

QEMU で起動してみる

QEMU をインストールしていない場合

sudo apt install -y qemu-system-x86

LiveCD を起動する

sudo qemu-system-x86_64 -m 4G -cdrom mydistribution-22.04-desktop-amd64.iso -boot d --enable-kvm -usb -smp 6

仮想ディスクにインストールする場合

qemu-img create -f qcow2 disk.qcow2 32G
sudo qemu-system-x86_64 -hda disk.qcow2 -m 4G -cdrom mydistribution-22.04-desktop-amd64.iso -boot d --enable-kvm -usb -smp 6

Firefox のビルドをインストール

· 約1分
ひかり
Main bloger

Ubuntu 22.04 は snap 版の Firefox がインストールされているらしく、 環境によって起動ができなかったので、ビルド済み Firefox のインストールの方法をメモ。

apt / snap 版の Firefox のアンインストール

sudo apt purge firefox
sudo snap remove firefox

Firefox のビルドをインストール

# ダウンロード
wget "https://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=ja" --trust-server-names

# 展開
tar xvf firefox-*.tar.bz2

# 配置
sudo cp -r firefox /usr/lib

# 実行ファイルのシンボリックリンクを作成
sudo ln -s /usr/lib/firefox/firefox /usr/bin/firefox

# デスクトップファイルをダウンロードし配置
sudo mkdir -p /usr/share/applications
sudo wget https://bit.ly/3Mwigwx -O /usr/share/applications/firefox.desktop

Ubuntu で gsettings を使用し Dock の設定を行う

· 約2分
ひかり
Main bloger

スクリプトで Dock の設定したいときや、SSH で設定したいときに使う。

Dock を自動的に隠す

設定する値説明
true自動的に隠さない
false自動的に隠す

例: Dock を自動的に隠す

# 現在の設定
$ gsettings get org.gnome.shell.extensions.dash-to-dock dock-fixed
true

$ gsettings set org.gnome.shell.extensions.dash-to-dock dock-fixed false

パネルモード

Dock を画面の端まで引き伸ばして表示。

設定する値説明
true引き延ばさない
false引き延ばす

例: パネルを引き延ばさない

# 現在の設定
$ gsettings get org.gnome.shell.extensions.dash-to-dock extend-height
true

$ gsettings set org.gnome.shell.extensions.dash-to-dock extend-height false

アイコンサイズの変更

設定する値説明
数値アイコンサイズ

例: アイコンサイズを 30 に変更

# 現在の設定
$ gsettings get org.gnome.shell.extensions.dash-to-dock dash-max-icon-size
48

$ gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 30

Dock の表示位置を変更

「設定」では設定ができない 'TOP' が設定可能。上に微妙な隙間ができる。

設定する値説明
LEFT
BOTTOM
RIGHT
TOP

例: Dock の表示位置を下に設定

# 現在の設定
$ gsettings get org.gnome.shell.extensions.dash-to-dock dock-position
'LEFT'

$ gsettings set org.gnome.shell.extensions.dash-to-dock dock-position 'BOTTOM'

ゴミ箱の表示

設定する値説明
true表示
false非表示

例: ゴミ箱を非表示に設定

# 現在の設定
$ gsettings get org.gnome.shell.extensions.dash-to-dock show-trash
true

$ gsettings set org.gnome.shell.extensions.dash-to-dock show-trash false