- 投稿日:2019-05-29T22:39:58+09:00
Windowsクライアントを使って、クラウド上のLinuxサーバでGUIアプリを実行したい(2)
1. 今回は設定編
前回は代表的な実現方法と、それぞれの特徴について説明した。今回はXサーバ「VcXsrv」での設定方法や使い方を説明する。
1-2. 作業の流れ
設定手順は以下の通り。1から2がLinuxサーバでの手順で、3から6がWindowsクライアントの手順である。今回はPuTTYを使用するが、Tera Termでも同じことができる。
Linuxサーバで実施:
1. X11フォワーディングに必要なライブラリをLinuxにインストールする
2. X11フォワーディングするようにsshdを設定する
Windowsクライアントで実施:
3. VcXsrvをWindowsクライアントにインストールする
4. VcXsrvを起動する
5. sshクライアント(PuTTY)をX11フォワーディング用に設定する
6. sshクライアント(PuTTY)でLinuxサーバに接続する1-3. 使用環境
今回は以下の環境を使用している。またOracle Cloud Infrastructureを使用しているが、他のクラウドでもほとんど同じはずだ。
- CentOS 7 / Oracle Linux 7
- CentOS 6 / Oracle Linux 6
1-4. 前提条件
- WindowsクライアントにPuTTYがインストール済みで、Linuxサーバに接続可能な状態になっていること。Tera Termについては説明しないので、他の記事を参考にしてほしい。
2. Linuxサーバにライブラリをインストールする
X11フォワーディング(画面転送)を使用するときは、Linuxサーバに完全なデスクトップ環境は不要である。しかし必要最小限のライブラリ群は必要になる。
2-1. Linuxサーバに必要なライブラリ
X11フォワーディングに必要なライブラリは以下の通り。一般には
xorg-x11-xauth
だけで十分だ。しかし以前使ったGUIツール(WebLogicのインストーラ)ではライブラリが不足していて起動できないことがあった。
xorg-x11-xauth
(xauth
)libXtst
libXrender
たいした大きさでもないし、不足していたときのトラブルシュートが意外と大変なので、念のため
libXtst
とlibXrender
を追加している。2-2. ライブラリをインストールする
以下のコマンドでインストールする。
注目して欲しいのが、末尾の
Installed size
である。GNOMEデスクトップのインストールには数百MBytesのパッケージが必要になるが、今回のライブラリは5MBytesにも満たない。# yum install xauth libXtst libXrender -y ---以下コマンドの実行結果--- ★中略★ ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: libXrender x86_64 0.9.10-1.el7 ol7_latest 25 k libXtst x86_64 1.2.3-1.el7 ol7_latest 20 k xorg-x11-xauth x86_64 1:1.0.9-1.el7 ol7_latest 29 k Installing for dependencies: libICE x86_64 1.0.9-9.el7 ol7_latest 66 k libSM x86_64 1.2.2-2.el7 ol7_latest 39 k libX11 x86_64 1.6.5-2.el7 ol7_latest 606 k libX11-common noarch 1.6.5-2.el7 ol7_latest 163 k libXau x86_64 1.0.8-2.1.el7 ol7_latest 28 k libXext x86_64 1.3.3-3.el7 ol7_latest 38 k libXi x86_64 1.7.9-1.el7 ol7_latest 40 k libXmu x86_64 1.1.2-2.el7 ol7_latest 70 k libXt x86_64 1.1.5-3.el7 ol7_latest 172 k libxcb x86_64 1.13-1.el7 ol7_latest 213 k Transaction Summary ================================================================================ Install 3 Packages (+10 Dependent packages) Total download size: 1.5 M Installed size: 4.6 M ★とてもサイズが小さい ★以下省略2-3. xeyesをインストールする
動作確認用のGUIアプリケーション
xeyes
をインストールする。xeyes
はxorg-x11-apps
に含まれるプログラムなので、以下のような実行結果になっている。それにしてもxeyes
は懐かしいですなあ。X端末時代が思い出される。# yum install xeyes -y ---以下コマンドの実行結果--- ★中略★ ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: xorg-x11-apps x86_64 7.7-7.el7 ol7_latest 307 k Installing for dependencies: libXcursor x86_64 1.1.15-1.el7 ol7_latest 30 k libXfixes x86_64 5.0.3-1.el7 ol7_latest 18 k libXxf86vm x86_64 1.1.4-1.el7 ol7_latest 17 k libfontenc x86_64 1.1.3-3.el7 ol7_latest 30 k libxkbfile x86_64 1.0.9-3.el7 ol7_latest 82 k Transaction Summary ================================================================================ Install 1 Package (+5 Dependent packages) Total download size: 484 k Installed size: 1.1 M ★以下省略★3. Linuxサーバのsshdを設定する
X11フォワーディングできるようにsshdを設定する。設定値を確認して、設定が不足していれば変更する。
3-1. X11フォワーディングで設定するパラメータ
確認するパラメータは以下の通り。
X11Forwarding yes
であることX11UseLocalhost
はコメントアウトされているかno
であることAddressFamily inet
であること(IPv6が無効化されている環境のみ)。それ以外はデフォルトのany
でも問題ないそれぞれのパラメータの意味は
man sshd_config
で確認できる。3-2. 現在のsshdパラメータを確認する
sshd
の設定ファイル/etc/ssh/sshd_config
に設定されている値を確認する。# grep -e X11UseLocalhost -e X11Forwarding -e AddressFamily /etc/ssh/sshd_config ---以下コマンドの実行結果--- #AddressFamily any #X11Forwarding no X11Forwarding yes #X11UseLocalhost yes # X11Forwarding no3-3. sshdのパラメータを変更する
どの値を変更するかは各自の状況に応じて判断して欲しい。当然エディタで変更してもかまわない。今回は
AddressFamily
をany
からinet
に変更する。# sed -i -e "s/^\#AddressFamily any/AddressFamily inet/" /etc/ssh/sshd_config今回一番ハマったのが
AddressFamily
の値である。デフォルトのany
でも問題ないはずだが、Oracle Cloud Infrastructure Computeの2019年5月OSイメージでは、これが原因で接続できなかった。半年以上前に以下のホワイトペーパー通りに試したときには問題なかった気がするのだが…。Oracle Cloud Infrastructureを使用していなくても、IPv6が無効化されているときは変更した方がいいかもしれない。
今回は↓のエントリを参考にさせていただきました。ora_gonsuke777さん、ありがとうございます。
IPv6が無効化の確認方法:
IPv6が無効化されていることはip
コマンドで判別できる。以下のようにinet
で始まる行だけで、inet6
で始まる行がないときはIPv6が無効化されている可能性がある。$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000 link/ether 02:00:17:00:13:0c brd ff:ff:ff:ff:ff:ff inet 10.5.0.2/24 brd 10.5.0.255 scope global dynamic ens3 valid_lft 81375sec preferred_lft 81375sec3-4. パラメータが正しく設定されていることを確認する
最後にもう一度、正しく設定されていることを確認する。
# grep -e X11UseLocalhost -e X11Forwarding -e AddressFamily /etc/ssh/sshd_config ---以下コマンドの実行結果--- AddressFamily inet X11Forwarding yes #X11UseLocalhost yes # X11Forwarding no3-5. sshdのパラメータを有効化する
パラメータを有効にするために
sshd
を再起動する。CentOS 7 / Oracle Linux 7 の場合
# systemctl restart sshd
CentOS 6 / Oracle Linux 6 の場合
# service sshd restart
これでLinuxサーバ側の作業はおわりだ。次にWindowsクライアント側で設定する。
3-6. まとめ版(7系Linux OS用)
コピペ用のまとめ版。使用環境よって/etc/ssh/sshd_configの内容は異なるので、grepの結果を確認すること。
# 必要ライブラリのインストール yum install xauth libXtst libXrender -y yum install xeyes -y # AddressFamilyの変更 sed -i -e "s/^\#AddressFamily any/AddressFamily inet/" /etc/ssh/sshd_config # 設定値の確認。X11UseLocalhostが grep -e X11UseLocalhost -e X11Forwarding -e AddressFamily /etc/ssh/sshd_config # sshd再起動 systemctl restart sshd4. VcXsrvをインストールする
ここからはWindowsクライアントでの作業になる。
VcXsrv公式サイト(SourceForge)からインストーラをダウンロードして実行する。これ以降は基本的にデフォルトのままでよい。
5. VcXsrvを起動する
X11フォワーディングで画面を転送できるようにVcXsrvを起動する。
Windowsデスクトップの
XLaunch
アイコンをクリックしてVcXsrvを起動する。
なおVcXsrvとXmingの両方をインストールしているときは、アイコンも名前も同じで区別しづらい。名前を変えたほうがいいだろう。起動に成功するとデスクトップ右下のタスクバーにアイコンが表示される。これ以降、Windowsをシャットダウンしたり、VcXsrvを明示的に停止したりしない限り、起動したままになっている。
6. PuTTYを設定する
PuTTYはLinuxサーバに接続する設定があることを前提に、それをカスタマイズする。
PuTTYを起動して、使用する接続情報をロードする。
最後に左側ツリーの[Session]に戻り、変更した設定を保存する。これを忘れると変更が消えるので注意すること。
これで設定は終了である。次から実際にLinuxサーバに接続する。
7. Linuxサーバに接続する(基本編)
まずは基本編として、踏み台なしでLinuxサーバに接続する。
前のステップで保存した設定を利用し、PuTTYでLinuxサーバに接続する。
DISPLAY
環境変数が設定されているか確認する。sshdとPuTTYを正しく設定していれば、自動的に設定されているはずである。$ echo $DISPLAY localhost:10.04.動作確認のため
xeyes
を起動する。デスクトップに以下の目玉が表示されれば成功している。$ xeyes &8. 次回は?
事前にsshで接続できていれば、驚くほど簡単な作業だったかもしれない。次回は踏み台経由の接続方法を説明する。
- 投稿日:2019-05-29T21:50:42+09:00
Linux基礎①
『ゼロからはじめるLINUXサーバ構築・運用ガイド 動かしながら学ぶWEBサーバーの作り方』を参考に、Linuxについての学びを記録します。
UNIXとLinux
UNIXはLinuxに先立ち20年以上も前に開発がスタートしたOSで、大学や研究機関などを中心に使われてきた。
現在はUNIXは様々なものに枝分かれしていて、UNIXという単一のOSはなく、Appleが開発してMacのOSとして使われている
OS X
やOracleのUNIXであるSokaris
がある。Linuxはフィンランドの大学生だったリーナス・トーバルズ氏が開発したUNIXっぽいOSとして作り上げたもの。
公開当初はごくシンプルなOSだったが、多くの開発者の協力で高機能なOSへと発展した。
UNIXとLinuxは異なるOSであるものの、LinuxはUNIXの標準仕様に準拠して開発されているため
UNIX系OS
などと呼ばれている。そのためUNIX系OSで多くのコマンドが共通して利用できるほか、多くのUNIX向けソフトウェアもLinuxで利用できる。
Linuxカーネル
カーネルとはOSの中核となるプログラムのこと。
カーネルとシェル(利用者とカーネルの仲介役)、様々なプログラムを組み合わせることでOSとなる。
ディストリビューション
開発コミュニティ等がLinuxカーネルとシェルや多数のソフトウェアを組み合わせてインストーラと一緒に配布するようになり、これがディストリビューションと呼ばれる。
「Linux OS」はこのディストリビューションを指す。
Linuxのディストリビューションは数多くあるが、RedHat系とDebian系の2つに大別される。
Red Hat系ディストリビューション
Red Hat社はクラウド技術を中心にサービス展開する企業で、オープンソースソフトウェアを利用したビジネスを展開する米国企業です。
Linuxのカスタム・ディストリビューションで成功を収め、現在も様々なオープンソースコミュニティを利用したサービスを展開するほか、コミュニティへの貢献も積極的に行う世界的企業です。
Fedora: 先進的なディストリビューション
最新の技術を積極的に取り入れるディストリビューション。
Red Hat社が強力にサポートしていて、半年に1度のペースで新しいバージョンがリリースされる。
安定よりも最新技術を取り入れる志向が強く、企業の導入はあまりなく、個人ユーザに人気が高い。
Red Hat Enterprise Linux: 企業向けディストリビューション
Red Hat社が開発している企業向けのディストリビューション。
安定よりも最新技術を取り入れる指向が強いFedoraに対して、Fedoraの成果を取り込み安定してソフトウェアを取り入れる。
Red Hat社とサブスクリプション契約することで常に最新バージョンを利用できる。
CentOS: Red Hat Enterprise Linuxをもとに再ビルドしたディストリビューション
Red Hat Enterprise Linuxを構成するソフトウェアのほとんどはオープンソースで、ライセンスに基づいてソースコードが公開されている。
Red Hat Enterprise Linuxも同様にソースコードは公開されており、このコードを再ビルドしたディストリビューションがCentOSになる。
Red Hat社のサポートは受けられないが、Red Hat Enterprise Linuxとほぼ同じものを無償で使えるため、Red Hat社のサポートを必要としない企業や個人から人気になっている。
ちなみにこのCentOSの開発コミュニティもRed Hat社がサポートしている。
Debian系ディストリビューション
Debian はコミュニティによって作られる
「自由なオペレーティングシステム(OS)」です。
引用: Debian JP ProjectDebian GNU/Linux
GNU ツール・Linux カーネル・その他の重要なフリーソフトウェアとを組み合わせることで作られるディストリビューション。
コミュニティベースで開発され、無償で利用できる。
Ubuntu(ウブントゥ)
Debian GNU/Linuxをベースにしたディストリビューションで、コミュニティによって開発されている。
Canonical社も開発をサポートしている。
Fedora同様に新しいバージョンのリリースが早く、また2年に一度LTS(Long Term Support)版という長期サポートがあるバージョンがリリースされる。
Ubuntuの場合、バージョン表記は「年.月」で表示されるため、2019年4月リリースのバージョンは「Ubuntu 19.04」となる。
Lubuntu(ルブントゥ)
Debian GNU/Linuxから派生したUbuntuから、さら派生したディストリビューションの1つ。
低スペックでも軽快に動作するよう作られており、Ubuntuを動かすのが厳しいパソコンでも快適に利用できる。
Linux Mint
DebianおよびUbuntuをベースとしたディストリビューションで、Ubuntuに次いで人気が高い。
30000を超える全てのソフトウェアが無料で利用でき、セキュリティ性も高いディストリビューションです。
Linuxディストリビューションの構成
LinuxディストリビューションはLinuxカーネル/シェル/コマンド/各種ライブラリに加えて、サーバーソフトウェア、クライアントソフトウェア、GUIから構成されている。
カーネル
OSの中核となるプログラムで、ハードウェアやシステム上で動作するプログラムを管理する。
2019年5月現在のLinuxカーネルの最新バージョンは「4.20」で、新機能追加で2つ目の数字が上がり、不具合修正で3つ目の数字が上がる。
Linuxカーネルは通常、リーナス・トーバルズ氏が公開しているものを指すが、Linuxディストリビューションで使用されているカーネルはさらに改修をを加えたものが利用されることが多い。
シェル
カーネルと利用者を仲介するプログラム。
OSユーザのためにインタフェースを提供するソフトウェアで、コマンド入力を受け付けて実行したりする。コマンド
Linuxで利用できる実行形式のプログラムで、シェルにコマンド名を入力することで対応するプログラムが実行される。
ライブラリ
プログラムの共通部品となるもので、よく使用されるプログラムの共通部分を抜き出し、他のプログラムから利用できるようにしたもの。
GUI(Graphical User Interface)
WindowsやOS Xのようなウィンドウを表示してマウスで操作するようなインターフェースをGUIと呼び、コマンドを入力してその結果を文字で受け取るのがCUI(Character User Interface)と呼ぶ。
Linuxディストリビューションでは、この部分はLinuxカーネルとは別のプログラム群で構成されていて、X Window Systemおよびウィンドウマネージャというプログラム群で作られている。
クライアントソフトウェア
Webブラウザやゲームソフトなどのクライアントソフトウェアを指す。
ChromeやFirefoxなどのブラウザのLinux版も提供されている。
サーバーソフトウェア
Apache HTTP Server
世界中で使用されているWebサーバーソフトウェアで、世界一のシェアを持つ。
2017年4月時点では全世界で約50%のシェアを占めていて、大規模な商用サイトや公的サイト、自宅サーバまで幅広く利用されている。
nginx(エンジンエックス)
大量の接続があるWebサイトではApacheよりもパフォーマンスが良く、大量の処理をするのに向いている。
その他サーバーソフトウェア
・Postfix: Linux標準のメールサーバー
・Dovecot: メールサーバーに届いたメールをダウンロードするためメールクライアントが接続するIMAPとPOPのサーバ
・BIND: ホスト名・ドメイン名とIPアドレスの対応付けを行うDNSサービスを提供するDNSサーバー
・Samba: Windowsのファイルサーバー機能やActive Directoryのドメインコントローラーを実現するサーバー
・Squid: 社内から社外へWebアクセスするときに社内のクライアントに変わってWebサーバーへ代理でアクセスするプロキシサーバー*プロキシサーバー:内部のネットワークとインターネットの境界で動作し、両者間のアクセスを代理して行うもの(引用:https://www.idcf.jp/words/proxy-server.html)
- 投稿日:2019-05-29T19:27:20+09:00
LinuxにVirtualbox経由でネットワークで接続する
仮想マシンを起動する前に、ネットワーク設定を変更
*名前のところはEithernetかWiFi経由の場合はそちらを選択することlinuxにログインしたら、ssh経由でアクセスする
ssh
があるか確認
ps -ef | grep sshd
sshではなくてsshdなのは、ssh daemonだから、-efのオプションは全てのプロセスを表示。詳しくはこちらを確認→ Linuxの環境変数とプロセス制御
もしない場合はインストールが必要。DEB環境であれば、
dkpg -l | grep ssh-server
で検索できる。
red hatなどであれば、rpm -qa | grep ssh-server
sudo apt-get update
をした後、
sudo apt-get install openssh-server openssh-client
でインストールしておこう。
centosやred hatはsudo yum install openssh-server openssh-client
でインストール。無事インストールされれば先ほどの確認コマンドで表示される。
sshをスタートしてネットワークを確認
$ sudo service sshd start $ /sbin/ip addr
lo, eth0, virbr0, virbr0-nic
の4つのネットワークインターフェースが出てくる。
loは127.0.0.1のループでeth0は先ほど設定したネットワークで、ここで表示されたinetのIPアドレスをメモ。X.X.X.X。MacOSのterminalでSSH
$ssh adminuser@X.X.X.X #アクセス確認されるのでyesで答えadminuserのパスを入れれば接続 [adminuser@localhost ~]$
- 投稿日:2019-05-29T18:19:35+09:00
Linuxでソフトウェアをインストール
Packageとは、ファイルの集合体で、データやメタデータを含んでおり、パッケージの内容や、バージョン、Dependenciesなどが含まれる。
Packageを管理するのにPackage Managerを使うが、
packageのinstall, upgrade, deleteを行い、dependenciesを管理し、何がインストールされているかなどをメンテするもの。
yum search string #stringを検索 yum info [package] #infoを表示 yum install [-y] pacakage #packageをインストール yum remove package #packageを削除rpmマネジャー
rpm -qa #インストールされたpacakgesを全て表示 rpm -qf /path/to/file #ファイルのpackageを表示 rpm -ql package #パッケージのファイルを表示 rpm -ivh package .rpm #packageをインストール
su -
でsuperユーザーになり
yum install inkscape
インストールしてみる。途中「y/n」で聞かれたりするのが面倒な時は、
yum install -y
で答えを全てyesでスキップすることができる。ソフトウェアによってはdependenciesを別途インストールしたりする。yumにパッケージがないソフトウェアをインストールしたい時は、直接公式サイトでrpmファイルをダウンロードし、
rpm -ivh
でインストールできる。yumでインストールできないとき。
rpmを閲覧したいときは
rpm -qa
で表示し、別途ページごとに見たい時は
rpm -qa | less
で見られるが、表示順がまばらなので、
rpm -wa | sort | less
で綺麗に閲覧できる。
which
を使って、どこに入っているかは確認できる。
which which
whichがどこに入っているか確認でき、そのwhichの全ファイルは
rpm -ql which
で確認できる。DebianやUbuntuなどのLinuxのディストリビューションを使っている時のインストールは
apt
を使う。sudo
を忘れずに。apt-cache search string #stringを検索 apt-get install [-y] package #packageをインストール apt-get remove package #packageをアンインストール apt-get purge package #packageとその構成ファイルを削除する apt-cache show package #packageの情報を閲覧できるDEBファイルからインストールしたい時は
dpkg
を使う。dpkg -l #packageを一覧できる dpkg -S /path/to/file #パッケージのファイルを一覧 dpkg -L package #packageの中のファイルを一覧 dpkg -i package.deb #packageをインストール
- 投稿日:2019-05-29T14:21:59+09:00
【Linux】過去に実行したコマンドの一覧を取得するコマンド
- 投稿日:2019-05-29T09:38:50+09:00
Arch Linux快適デスクトップ環境の構築 2019
前置き
今回のコンセプトは Mini-ITX の小型機に Ryzen 7 2700X を積む、だ。
( Ryzen 3000 は待てなかった…)
具体的な構成とお値段は以下。いずれも2019年5月時点。
分類 部品名 価格 ケース Metis Plus 5,378 CPU AMD Ryzen 7 2700X BOX (※M/B とセット価格) ※40,581 M/B GIGABYTE B450 I AORUS PRO WIFI - メモリ Patriot PSD432G2666KH (288Pin/DDR4-2666/16GBx2) 18,981 SSD WD M.2-2280 / 500GB / WD Blue 3D / SATA3.0 6,980 電源 CORSAIR SFX600 Platinum 16,020 CPUファン 虎徹 MarkⅡ(SCKTT-2000) 3,132 追加ケースファン サイズ Kaze Flex 120 PWM 989 グラボ Palit NE5105T018G1-1070F(GTX1050Ti 4G GDR5 STORMX) 14,601 上記とアイネックス ナノダイヤモンドグリス JP-DX1(1,225円)を合わせて、都合 108,556 円。
上記を組み立てインストールの儀式へと入っていった。
以降、Arch Wiki を参照しながら進めていくが、リンクは(原典な気がするので)英語版を基本的に用い、日本語版にしかないコンテンツであればそちらを貼ることとした。
英語版でもサイドペインの「日本語」リンクをクリックすればすぐに日本語版記事に飛べるので、適宜そちらも参照するとよい。OS インストール
基本は公式インストールガイドに従う。
インストールの準備
署名の検証
これは旧 Arch 機から行なった。
今回はarchlinux-2019.05.02-x86_64.iso
を用いたが、バージョンはその時最新のものを指定しよう。$ wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2019.05.02/archlinux-2019.05.02-x86_64.iso $ wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2019.05.02/archlinux-2019.05.02-x86_64.iso.sig $ sudo pacman-key -v archlinux-2019.05.02-x86_64.iso.sig今回は CD-R が余っていたので、Brasero により ISO イメージを焼いた。
前回 USB メモリを使って失敗した形跡があるので、CD はまあ無難な選択かもしれない、ライブ環境の起動
新マシンで上記 CD からライブ環境を起動する。
キーボードレイアウト
公式ガイドでは日本語に変更する方法が書いてあるが、自分は英語のままでよいので何もせず。
起動モードの確認
今回のマシンは BIOS ではなく UEFI である。
以下のディレクトリが存在しその中身があれば UEFI なので、念のためこれで UEFI であることを確定させておこう。# ls /sys/firmware/efi/efivarsパーティション
ディスクは 1 つしか積んでいない、デュアルブートの予定もなし、という前提のもとでポイントは 3 つ。
- UEFI なので EFI パーティションを作成する必要がある
- 上記以外はパーティションを分けない
- LVM を用いる
パーティションについては、UEFI なので
/boot
を 512MB FAT32 で切る。
それ以外についてだが、まず swap は swap ファイルを使うので不要。
/
と/home
を分離してリカバリを容易にする作戦もあるが、/home
の重要なものはクラウドサービスや自宅 NAS に逃がせば個人的に十分なので、再インストールは痛手ではない。
(ちなみに HDD であれば/home
を切ることで速くなるようだが、今回のマシンは SSD である)
また/var
の増加によるディスク食い潰しも起きるとも思えないので、パーティションは切らずに広くディスクを使える方が利が大きい。
この辺は人それぞれのポリシーがあると思うので、各々の判断で実施してもらいたい。LVM については、以前のマシンでディスク容量不足に陥いった時に、SSD 追加で簡単に容量の拡張ができて助かった経験があるため今回も採用した。
マシン特性的にこれ以上 SSD を積みたくないのが本音だし、その手の作業が発生しないよう自分の用途に対して十分な容量にしたつもりだが、まあお守りだ。なおファイルシステムの選定だが、SSD のパフォーマンス劣化防止のため SSD Trim を有効にすることと、swap ファイルを使うことを考えると、現時点では選択肢が ext4, JFS, XFS になるだろうか。
なお Btrfs では swap ファイルが使えない。
ファイルシステム事情には疎いのだが、JFS は 日本語 ArchWiki でext シリーズや ReiserFS ほどは広くサポートされていませんが
とあるので却下。
定番の ext4 か、RHEL で標準となった XFS かだが…今回も無難そうな ext4 を用いることとした。さて作業開始にあたり、まずはブロックデバイスを確認してみる。
root@archiso ~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 496.6M 1 loop /run/archiso/airootfs sda 8:0 0 465.8G 0 disk sr0 11:0 1 609M 0 rom /run/archiso/bootmntというわけで今回は
/dev/sda
がお目当てのブロックデバイスだ。
対象が確認できたところでパーティションを切ろう。# fdisk /dev/sdafdisk の詳細は割愛するが、
m
でヘルプが出るのでそれを見ながらパーティションを設定していく、
まずは、fdisk の ヘルプから「create a new empty GTP partition table」を見つけてそのコマンドを打つ。
これにより GPT のパーティションテーブルが作成できる。続いて、UEFI なので ESP (EFI System Partition) を作成する。
ESP の詳細が知りたければこちら。
fdisk のヘルプから「add a new partition」を見つけてそのコマンドを打つ。
そこで設定した内容は以下である。
- Partition number に 1 を指定
- First Sector には、指定可能な最小値を設定
- 2048 だった
- Last Sector には、512MB 相当のセクタ数を指定
- fdisk が「Units: sectors of 1 * 512 = 512 bytes」とか表示してくれる
- というわけで
+512M
を指定した。+
を忘れない同様に「create a new empty GTP partition table」により、残り全のセクタを Partition number 2 に割り当てる。
続いて「change partition type」よりパーティションタイプを指定する。
Partition number 1 には EFI System を設定したいのだが、悲しいことに指定可能なタイプ一覧はモニタサイズによっては見切れてしまい、何を指定すれば EFI System になるか分からなかったりする。
今回は1
を選択するのが正解であった。同様に Partition number 2 に対して change partition type を行い、今度は
Linux LVM
を設定する。最後は「write table to disk and exit」を行なう。
LVM の設定
https://wiki.archlinux.org/index.php/LVM#Installing_Arch_Linux_on_LVM
LVM の物理ボリュームの作成を行なう。
先ほどのパーティショニングにより/dev/sda2
が対象の領域となったため、以下のコマンドを実行する。# pvcreate /dev/sda2以下のコマンドで
/dev/sda2
が表示されれば成功だ。# pvdisplay続いて LVM のボリュームグループを作成する。
VolGroup00
は別の名前でも構わないはずなので、任意で変更すること。# vgcreate VolGroup00 /dev/sda2次のコマンドで
VolGroup00
が存在しているか確認する。# vgdisplay作成したボリュームグループを全て、
lvolroot
という名前で/
へ割り当てる。# lvcreate -l +100%FREE VolGroup00 -n lvolrootそして以下のコマンドを打ち、
/dev/VolGroup00/lvolroot
が想定したボリュームサイズ、つまり/boot
を除く全容量 で作成されていることを確認する。$ lvdisplayパーティションのフォーマット
# mkfs.vfat -F32 /dev/sda1 # mkfs.ext4 /dev/mapper/VolGroup00-lvolrootパーティションのマウント
作成したパーティションをマウントする。
# mount /dev/mapper/VolGroup00-lvolroot /mnt # mkdir -p /mnt/boot # mount /dev/sda1 /mnt/bootインターネットへの接続
有線接続であればライブ環境起動時に接続できるようになっているはずなので
ping 1.1.1.1
でも打って確認してみる。
接続できなければ公式のガイドを見ながら設定すること。システムクロックの更新
以下でシステムクロックを正確にする。
# timedatectl set-ntp treuインストール
ミラーの選択
/etc/pacman.d/mirrorlist
を開き利用したいミラーをアンコメントするの…というわけではなく、全てが最初からアンコメントされている方式なので、以下のようにした。# cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak # grep -A 1 Japan /etc/pacman.d/mirrorlist | grep Server > /etc/pacman.d/mirrorlistなおこのミラーリストは上から順に優先されることになる。
ベースシステムのインストール
ではいよいよインストールだ。
これで必要なパケージ群が入る。# pacstrap /mnt base base-develシステムの設定
fstab の生成
# genfstab -U /mnt >> /mnt/etc/fstab
/mnt/etc/fstab
の中身は念のため確認しておく。chroot
新しくインストールしたシステムに
chroot
する。# arch-chroot /mntタイムゾーン
日本在住なので日本にする。
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime加えてハードウェアクロックが UTC であれば、以下により
/etc/adjtime
を設定する。# hwclock --systohc --utcロケール
/etc/locale.gen
を編集し、en_US.UTF-8 UTF-8
とja_JP.UTF-8 UTF-8
をアンコメントする。
続いて以下のコマンドを実行する。# locale-gen最後にロケールの設定をするが、ここでは日本語ではなく英語を指定する。
CLI 環境で日本語が出てくると辛いため。ホストネーム
# echo お好みのほすとねーむ > /etc/hostname
/etc/hosts
にも同様の名前を設定する。127.0.0.1 localhost ::1 localhost 127.0.1.1 お好みのほすとねーむ.localdomain お好みのほすとねーむネットワーク設定
この時点で設定されなくなっている状況もあるようだが、
ping 1.1.1.1
したら通ったので何もしなかった。Initramfs
LVM のためにまずは
/etc/mkinitcpio.conf
を編集する。
https://wiki.archlinux.org/index.php/LVM#Configure_mkinitcpio
HOOK
において、base
の後にudev
を、block
の後にlvm2
を追加する。
udev
とlvm2
ではなくsystemd
とsd-lvm2
を追加するという方式もあるようだが、udev
がデフォルトで含まれていたので今回はそちらにした。その後、以下を実行する。
# mkinitcpio -p linuxRoot パスワード
任意のものを設定する。
# passwdブートローダー
UEFI なので systemd-boot を用いる。
以前は gumiboot を使っていたのだが、それはこの systemd-boot の旧名らしい。
以下でインストールする。# bootctl --path=/boot install続いて、AMD の CPU なのでマイクロコードのインストールを行なう。
https://wiki.archlinux.org/index.php/Microcode# pacman -S amd-ucode最後に、systemd-boot の設定ファイルを記述する。
まずは/boot/loader/loader.conf
に以下を設定する。default arch timeout 4 console-mode max editor no各値はこちらを見つつ変えてよいが、
editor
はセキュリティ上no
にすることが推奨されている。続いて
/boot/loader/entries/arch.conf
に以下を設定する。title Arch Linux linux /vmlinuz-linux initrd /amd-ucode.img initrd /initramfs-linux.img options root=root=/dev/mapper/VolGroup00-lvolroot rw
initrd /amd-ucode.img
により、先ほどインストールしたマイクロコードの自動更新がされるようになる。再起動
# exit # umount -R /mnt # rebootリブート時にインストールメディアを取り除くこと。
そして Arch Linux が起動すれば成功。デスクトップ機化への道のり
Arch Linux を起動したら root でログインする。
起動できなかったら上記の OS インストールに失敗している可能性があるので残念ながら原因を探しつつ修正する必要がある。個人ユーザ作成
ひとまず個人ユーザを作り、root での作業をやめる。
# useradd -m {username} # passwd {username} # pacman -S sudo # visudo作成したユーザが
sudo
で作用ができるよう、visudo
では以下を追記する。{username} ALL=(ALL) ALLここまで終わったら
exit
し、作成したユーザでログインし直す。ネットワークの有効化
今回は有線なので以下で済ませた。
@
の後はネットワーク I/F 名になるので、それはip a
コマンドで調べる。$ systemctl enable dhcpcd@enp8s0 $ systemctl start dhcpcd@enp8s0(ちなみに今回のマザボは WiFi を搭載しているがとりあえず使わない)
パッケージの更新
$ sudo pacman -SyuYay のインストール
AUR のパッケージを使いたくなるシーンがよくあるので、AUR ヘルパーである Yay を入れる。
$ sudo pacman -S git $ git clone https://aur.archlinux.org/yay.git $ cd yay $ makepkg -si $ rm -rf yay以降は
pacman
よりyay
の方がタイプ数が少ないので、yay
を使っていく。
sudo
も省略できるし。systemd-boot の自動更新
Yay が入り AUR が簡単に使えるようになったので、AUR にある systemd-boot 自動更新用パッケージを入れる。
$ yay -S systemd-boot-pacman-hooksystemd-boot は先程のインストール手順により導入されたが、
/boot
に入ったため通常の pacman 系更新コマンドでは更新されない。
そこで上記パッケージを導入することで pacman の更新にフックして systemd-boot も更新されるようにしておくのが吉。Wayland を諦めた
さて GUI 環境の構築開始だ。
RHEL 8 が Wayland を採用したし、Arch ユーザとしては負けるわけにはいかねえ! と思ったのだが諦めた。
グラボが NVIDIA じゃなければ採用したのだが…。ウィンドウマネージャに i3wm を使ってみたいと思っており、ちょうど 1.0 がリリースされた i3wm 互換の Wayland 用 ウィンドウマネージャ Sway に興味を持っていた。
が、Sway と NVIDIA は相性が悪いようだ…。参考
- https://github.com/swaywm/sway/wiki#nvidia-users
- https://nyakuo.hatenablog.com/entry/2018/12/31/100000
「機械学習って CUDA 使えた方が有利なのかね? 申し訳程度に NVIDIA にしておくか」と思って熟慮せず選んだパーツだったが、少々悔しい。
何年も前にリーナス御大が中指を立てていたことを知らなかったわけではないが、自分はその意味をよく理解していなかったのだ…。仕方なく Xorg の導入
ここでは
nvidia
パッケージを入れているが、必要なドライバはグラボのベンダーや世代によって変わるので注意すること。$ yay -S nvidia $ yay -S xorg-server $ sudo nvidia-xconfigちなみに自分の環境では
nvidia
を入れると CUI の解像度が低くなるという問題が起きており、対応は保留中…。ディスプレイマネージャの導入
Xorg の起動にあたりディスプレイマネージャを導入する。
今回は LightDM を採用した。
以前は SLiM を使っていたが開発が終了したので、他の軽量なものを選んだ。$ yay -S lightdm lightdm-webkit2-greeter $ sudo systemctl enable lightdm合わせてインストールしている
lightdm-webkit2-greeter
は Greeter と呼ばれるログイン情報入力 GUI である。
これにはいくつか選択肢があるので好みのものを使うとよい。
そしてインストールした Greeter を設定する。
/etc/lightdm/lightdm.conf
において、以下を記述する。[Seat:*] … greeter-session=lightdm-webkit2-greeterなおここで設定可能な Greeter 名は
/usr/share/xgreeters
を見れば分かる。さて LightDM の設定は色々変更できそうだが、今回は割愛する。
ウィンドウマネージャの導入
では早速 Xorg を起動! とはせずに、ウィンドウマネージャを入れよう。
これまで GNOME、Openbox、Xmonad と変遷してきたが、今回は i3wm にした。
ターミナルには従前より利用している Terminator を選んだ。
やはりタイル型はなじむ。実になじむ。$ yay -S i3-wm i3status terminator $ sudo rebootこれで成功すれば LigthDM のログイン画面が表示される。
そこで i3 のセッションを選択、id/pw を入力してログインしよう。
すると i3 のデフォルト設定がないから作るよと表示されるのでウィザードに従って作成する。あとは
mod + enter
でターミナルが起動する。
i3 は空気を読んで未設定でも Terminator を使ってくれるようだ。さて i3wm の設定もやりがいがありそうだが、今回は割愛する。
フォント
日本語フォントの導入
AUR に Nerd Fonts パッチ適用済みの Ricty が上がっているのでありがたく使う。
$ yay -S nerd-fonts-rictyあるいは好みであれば Cica フォントを入れてもいいかも知れない。
$ yay -S ttf-cica絵文字
Symbola を使う。
$ yay -S ttf-symbola日本語入力
Fctix + Mozc を使う。
本当は IBus の IM 切り替えのモッサリ感が好きではない。
Fctix は母音が変な位置に出る問題があるので一度は諦めていたが、軽く触ってみたところ修正されているようだったので改めて採用した。
なお Nimf という新興の IM フレームワークもあるが、どうも Anthy 縛りっぽいので見送った。まずは
~/.xprofile
に環境変数および自動起動の設定をする。export LC_CTYPE=ja_JP.utf-8 export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx fcitx &
LC_TYPE
で行なっているロケールの設定を忘れると、Fcitx に Mozc をはじめとした日本語 IM が追加されないので注意する。
なおこの設定は/etc/locale.conf
でやることもできるが、その場合はシステムグローバルに日本語になり、CLI でのトラブルシューティングが辛くなるのでやらない。
ここで一旦、再ログインする。そして必要なパッケージを入れる。
$ yay -S fcitx-mozc fcitx-configtool fcitx-imなお前述のロケール設定を忘れて Fcitx を起動すると Mozc が現れなくなるが、この場合は
~/.config/fcitx
を消して Fcitx を再起動すれば直るようだ。あとはタスクトレイにいる Fcitx のアイコンをクリックして Configure を選び、次の設定をして個人的な好みにした。
- インライン入力
- Addon
- Advanced にチェックを入れる
- Fcitx XIM Frontend を選択し、Configure ボタンを押す
- Use On The Spot Style for XIM にチェックを入れる
- タスクトレイのアイコンを右クリックし、restart
- ホットキーの変更
- Global Config -> Hotkey -> Trigger Input Method
Ctrl + Space
は Emacs とぶつかるのでCtrl + \
に変更ブラウザの導入
好きなものを入れれば良いが、とりあえず Chromium を入れた。
ちなみに yay ならば Vivaldi も入れられる。$ yay -S chromiumパスワードマネージャの導入
もし OSS のもを使うなら KeePassXC、あるいは後発の Bitwarden も良さそうだ。
この辺はお好みで。$ yay -S keepassxc # あるいは $ yay -S bitwarden必要なデータベースファイルやキーファイルは、何らかの手段でこの Arch 機のローカルまで持ってこよう。
さてここまでくれば、「とりあえず使えるぜ」感が出るだろう。
SSH 鍵
GitHub などへの鍵登録用。
$ yay -S openssh $ ssh-keygen -t ed25519音
$ yay -S pulseaudio pavucontrol volumeiconvolumeicon を起動し、右クリックから Status Icon を開く。
そして External mixier にpavucontrol
を指定する。続いて PulseAudio と pavucontrol を起動する。
たった今設定したように、pavucontrol はタスクトレイの volumeicon を右クリックして表示させてもいい。$ pulseaudio --start $ pavucontrol &なお PulseAudio は次回から手動で起動しなくてもよい…はず。
そして画面から適当にミュートを解除して音が出ることを確認する。
ここでブラウザで音を出そうとして出ない場合は、一度ブラウザを再起動すると直る可能性がある。ちなみに volumeicon も初期起動するよう設定しておこう。
$ echo 'volumeicon &' >> .xprofileSwap
次節のハイバネートで必要になるのでこの時点で作成する。
Swap のサイズについては RedHat の記事に従って決めると良さそうだ。
今回は 34GB になる。また、Swap はパーティションではなく Swap ファイルとして作成する。
作成とマウントには systemd-swap を使っても良さそうだったが、手動でやっても大した手間ではないので以下のように手動でやった。
最後のtee
コマンドで-a
オプションを忘れると面倒なことになるので気をつけること。$ sudo fallocate -l 34G /swapfile $ sudo chmod 600 /swapfile $ sudo mkswap /swapfile $ sudo swapon /swapfile $ echo '/swapfile none swap defaults 0 0' | tee -a /etc/fstabハイバネート
カーネルパラメータの設定が必要になる。
まずは以下を実行して表示されるphysical_offset
の最初の値を確認する。
以下の出力例においては10074112
である。$ sudo filefrag -v /swapfile | head -n 5 Filesystem type is: ef53 File size of /swapfile is 36507222016 (8912896 blocks of 4096 bytes) ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 0: 10074112.. 10074112: 1: 1: 1.. 10239: 10074113.. 10084351: 10239: unwritten続いて
/boot/loader/entries/arch.conf
にあるoption
の値を変更する。
ここまでの設定では以下のようになっているはずだ。options root=/dev/mapper/VolGroup00-lvolroot rwこれにハイバネート用のパラメータ
resume
およびresume_offset
を付け足す。
resume
にはスワップファイルの載っているデバイスファイルのパス、あるいは UUID を指定する。
あくまでデバイスファイルの情報であり、Swap ファイルそのもののパス (今回は/swapfile
) を指定しないこと。
resume_offset
は先程取得した数字を指定する。
今回の例では以下のようになる。options root=/dev/mapper/VolGroup00-lvolroot rw resume=/dev/mapper/VolGroup00-lvolroot resume_offset=10074112続いて initramfs の設定をする。
/etc/mkinitcpio.conf
のHOOKS
の中にbase
が含まれている場合 (Arch はデフォルトで含まれている)resume
をfilesystem
の前に追加する必要がある。
なお今回のように LVM を使っている場合はlvm2
の後ろでもある必要がある。HOOKS=(base udev autodetect modconf block lvm2 resume filesystems keyboard fsck)そして initramfs を再生成する。
$ sudo mkinitcpio -p linuxではハイバネートしてみよう。
(ブート時のパラメータをいじってるので、もしかしたら一度再起動してからでないとダメかも知れない…自信なし)$ systemctl hibernateなおこのハイバネート用コマンドは、後述のランチャーである Rofi に登録しておくと便利である。
さて、ここでハイバネートから復帰すると気づくことがあるだろう。
認証なしで元の状態に復帰するので危険だぞ…と。
これは次のセクションで解消する。スクリーンロック
というわけで、ハイバネートからの復帰時や、ちょっとトイレに行ってくる間にスクリーンロックをかけられるようにする。
$ yay -S xss-lock i3lockxss-lock はハイバネートやサスペンドにフックしてロックを呼び出してくれる機構であり、ロックそのものではない。
i3lock はロックであり、今回は i3wm であるため選択した。他の選択肢としては xsecurelock など複数あるので、i3wm 以外を使うのであれば調査して好きなものを入れること。xss-lock による見張りを開始するには以下のコマンドを打つ。
$ xss-lock -- i3lock &起動スクリプトへの登録しておこう。
$ echo 'env LC_CTYPE="" xss-lock -- i3lock &' >> ~/.xprofileなおここで
LC_CTYPE
環境変数の設定をしているのは、i3lock が以下のエラーを吐くためだ。xkbcommon: ERROR: couldn't find a Compose file for locale "ja_JP.utf-8" [i3lock] xkb_compose_table_new_from_locale failedちなみにスタンバイ状態にしてスクリーンロックをかけるコマンドは、自分は以下を使っている。
これも後述のランチャーから呼び出せるようにすると便利だ。$ xset dpms force standbyランチャー
Rofi を使っている。便利。
Mac で言うところの Spotlight っぽいやつ。
自前のスクリプトを仕込んだり、SSH の候補を選んだり、アクティブなウィンドウの切り替えなんかにも使える。$ yay -S rofiこの記事では前述の、ハイバネートとスタンバイをここから呼び出す設定を以下に書いておく。
必要なファイルは 2 つだ。
もっと色々設定できるが、それは Rofi について掘り下げている他の記事に譲る。~/.config/rofi/configrofi.modi: window,run,drun,system:~/.config/rofi/rofi_system.sh rofi.sidebar-mode: true rofi.hide-scrollbar: true rofi.kb-cancel: Escape rofi.theme: /usr/share/rofi/themes/glue_pro_blue.rasi~/.config/rofi/rofi_system.sh#!/usr/bin/env bash set -euCo pipefail function main() { # can not use some special charactors # e.g. ( ) local -Ar menu=( ['Standby']='xset dpms force standby' ['Hibernate']='systemctl hibernate' ) local -r IFS=$'\n' # with some arguments: execute a command mapped to $1 # without any arguments show keys [[ $# -ne 0 ]] && eval "${menu[$1]}" || echo "${!menu[*]}" } main $@さてこの Rofi をどうやって呼び出すかだが… i3 にショートキーで呼び出す設定を入れるのが良いだろう。
個人的な好みはalt + space
だ。
起動オプションは任意だが、例としては以下を i3 の設定ファイルに追記すればよい。~/.config/i3/configbindsym Mod1+space exec rofi -combi-modi -font "hack 10" -showちなみに、同設定ファイルを見ると、
$mod+d
に類似のランチャーである dmenu がデフォルトで割当てられている。
が、Rofi が dmenu replacement を謳っているためそちらは出番なし。ナイトモード
夜間はブルーライトをカットし、眠りの質を多少でも上げたい。
そもそも PC なんぞやってないで早く寝ろというのは正論だが対応が難しいため、小手先の手法で何とかしたいのが人情である。そんなニーズに応えてくれるのが Redshift である。
$ yay -S redshift引数なしで
redshift
コマンドにより起動すると、緯度経度を取得しにいってそれをベースに計算してモニタの色合いを調整してくれるようだ。
とはいえ緯度経度を毎度取得しては欲しくないので、あらかじめ/.config/redshift.conf
に記入しておくのがよい。[redshift] location-provider=manual # これはハンブルグの緯度経度である # 修正して使うこと [manual] lat=48.1 lon=11.6このパッケージには、
redshift-gtk
という GUI フロントエンドも含まれている。
これを使うためには以下のパッケージを追加する。$ yay -S python-gobject python-xdg librsvg起動するとタスクトレイに常駐する。
このアイコンを右クリックして Autostart にチェックを入れておくとよい。
redshift-gtk
も自動起動にも加えておく。$ echo 'redshift-gtk &' >> ~/.xprofileデスクトップ通知
Dunst を入れる。
Dzen2 という選択肢もあるが、見た目が気に入らず却下した記憶がある。
他にもっといいのがあれば試したい。$ yay -S dunst $ mkdir -p ~/.config/dunst $ cp /usr/share/dunst/dunstrc ~/.config/dunst/dunstrcこの dunstrc はカスタムして好みの見た目に仕上げるわけだが、
icon-path
の値は適切にしておかないと、通知時にこんなエラーが出る。WARNING: No icon found in path: 'dialog-information'
dialog-information.png
ファイルがあるアイコンテーマのパスを指定すればよく、自分の環境では以下がすでにインストールされていたのでいったん設定した。~/.config/dunst/dunstrcicon_path = /usr/share/icons/Adwaita/16x16/legacy好みのアイコンセットが各々あると思うので、好きなものを入れてパスを設定すること。
では起動の設定だ。
echo 'dunst &' >> ~/.xprofileちなみに起動が成功したかどうかのテストには以下のようなコマンドを打てば良い。
起動できていれば通知が出る。$ notify-send 'subject' 'this is test'温度やファンの回転数を見る
PC を自作する以上は重要。
温度が高すぎるならエアフローを見直す必要がある。ツールとしては lm_sensors を使う。
https://wiki.archlinux.org/index.php/Lm_sensors$ yay -S lm_sensors $ sudo sensors-detect
sensors-detect
ではいろいろ質問されるが、すべて Enter を入力すれば無難なセットアップになるようだ。さて温度などを見る方法だが、
sensors
コマンドを使って CUI で見てもいいし、GUI フロントエンドである xsensors または psensor を使ってもいい。
個人的には psensor の方が詳細で好きだ。アラーム機能もあり、タスクトレイに常駐させることもできる。$ yay -S psensor $ psensor & $ psensor & >> .xprofileWeb カメラ
ドライバの都合で使える Web カメラとそうでないものがあるようなので、まずはここを眺めて使えそうなものをピックアップする。
自分は Logicool C270 を選んだ。
この Web カメラに対応するドライバ linux-uvc であり、カーネルモジュール uvcvideo がロードされていればよいようだ。
以下で確認したらすでにロード済みのようだったので、PC にカメラを接続してみたら見事に使えた。
めでたし。$ modprobe -c | grep uvcvideoCLI ツール群
何を入れるか、どう設定するかは他に詳しい記事がいくらでもありそうなのでそちらに譲るが、現時点で個人的に使っているツールの中で基本的なものをざっと書いておく。
作業効率を考えれば、これらはこの一連のインストール作業の序盤で入れておくべきだったかも知れない。
- fish + fisherman
- tmux + tpm
- fzf
- ag
- fd
alias ls='lsd'
alias diff='colordiff'
最近は
alias cat='bat'
も検討中。Arch Linux 特有のもの
$ yay -Ss pacman-contrib pkg-tools見た目を整える
壁紙
Nitrogen を使う。
先に好きな壁紙を用意しておくのをお忘れなく。$ yay -S nitrogen $ nitrogen /path/to/壁紙画像のあるディレクトリこれで GUI が起動するので好みに設定し、Apply してから終了する。
そして起動時に壁紙を表示するように以下を行う。
$ echo 'nitrogen --restore &' >> ~/.xprofile背景透過
Compton を使う。
$ yay -S compton起動オプションは適宜調べて好みに設定すればよいが、バックグラウンド起動は
-b
でできるので最低限このオプションだけつけておけばいいだろう。$ compton -b $ echo 'compton -b' >> ~/.xprofile各種テーマの導入
今のところやってない(いずれ対応してこの記事に書くかも…)。
アイコンだけでなく、複数バージョンの GTK と Qt に対応し、かつ両者の統一感まで考え出すと面倒。
とりあえず i3 や dunst 等の見た目を整えた時点でそれっぽいやつを適宜導入していけばいいかと思った。ちなみに、アイコンや GTK のテーマを拾ってくる場所として以前は https://www.gnome-look.org/ を使っていたので、今回もお世話になりそう。
Steam
まずは Multilib を有効化する。
/etc/pacman.conf
の以下をアンコメントする。/etc/pacman.conf[multilib] Include = /etc/pacman.d/mirrorlist続いて以下を実行する。
$ yay -Syyそして 32 bit の NVIDIA ドライバと Steam を導入する。
$ yay -S lib32-nvidia-utils steamあとは
steam
コマンドで起動すればよい…のだが、この起動でけっこうトラブることがある。
そんな時は Arch Wiki の Steam トラブルシューティング記事なんかを見ながら粘る。
粘る…。チューニング
とりあえず Arch Wiki にあるもののうち Disk I/O 関連だけやっておいた。
https://wiki.archlinux.org/index.php/Improving_performanceSSD
TRIM
速度劣化を防止するため TRIM を有効化する。
まずは TRIM がサポートされているかを先に確認すること。
$ yay -S hdparm $ sudo hdparm -I /dev/sda |grep TRIM * Data Set Management TRIM supported (limit 8 blocks) * Deterministic read ZEROs after TRIM $ yay -Rs hdparm
supoprted
とあるので fstrim を有効にする。$ sudo systemctl enable fstrim.timer $ sudo systemctl start fstrim.timerちなみに日本語版の Arch Wiki にしか書いてなさそうだったのだが、
/etc/fstab
にdiscard
フラグを追加することによる TRIM の有効化は推奨されないらしい。また、今回のように LMV を使っている場合は上記に加えて
/etc/lvm/lvm.conf
のissue_discards
の値を1
に変更すること。atime
atime 情報の更新を止めて高速化を図る。
/etc/fstab
でrelatime
オプションを付与する。
最速はnoatime
オプションを使って完全に atime の更新を止めることなのだが、atime が全く更新されなくなると上手く動作しないアプリケーションが一部あるようなので、ファイル書き込み時だけは更新してくれるrelatime
を妥協案として使うのが現実解になりそうだ。そして
/etc/fstab
を変更したので再起動…と思ったら、以下のコマンドを打てばよいようだ。$ sudo mount -aI/O スケジューラ
SSD の場合は伝統的な CFQ では遅いという話があり、変更を試みた。
$ cat /sys/block/sda/queue/scheduler [mq-deadline] kyber bfq noneというわけでもともと
mq-deadline
になっていたのでこのまま行ってみることにした。ちなみに LVM を使っている都合で
dm-0
というブロックデバイスもあるが$ cat /sys/block/dm-0/queue/scheduler noneこれは…このままでいいいのかな?
none
になっていたら調整するなという記事も見かけたので。ちなみにこの
dm-X
が何かというのはこちらのスクリプトで判明する。Swap
swappiness を 10 にする。0 にはしない。
参考: https://qiita.com/rarul/items/a96b61b1fb535dea5fe3
RAM は 32GB と多く積みはしたが、正直 swappiness の挙動をちゃんと理解できておらず、0 にするのが本当に適切なのかは怪しい…。
というわけで Red Had の推奨値である 10 を設定することとした。
まあこの推奨値も、Oracle DB では、という枕詞があるわけだが…。まずはデフォルト値である
60
が設定されていることを確認しておく。$ cat /proc/sys/vm/swappiness 60というわけで 10 まで下げる。
現在のセッションで swappiness を一時的に変更するのと、永続化設定を両方入れるのでコマンドは 2 つ。$ sudo sysctl vm.swappiness=10 $ echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-sysctl.conf
- 投稿日:2019-05-29T09:38:50+09:00
Arch Linux 快適デスクトップ環境の構築 2019
前置き
今回のコンセプトは Mini-ITX の小型機に Ryzen 7 2700X を積む、だ。
( Ryzen 3000 は待てなかった…)
具体的な構成とお値段は以下。いずれも2019年5月時点。
分類 部品名 価格 ケース Metis Plus 5,378 CPU AMD Ryzen 7 2700X BOX (※M/B とセット価格) ※40,581 M/B GIGABYTE B450 I AORUS PRO WIFI - メモリ Patriot PSD432G2666KH (288Pin/DDR4-2666/16GBx2) 18,981 SSD WD M.2-2280 / 500GB / WD Blue 3D / SATA3.0 6,980 電源 CORSAIR SFX600 Platinum 16,020 CPUファン 虎徹 MarkⅡ(SCKTT-2000) 3,132 追加ケースファン サイズ Kaze Flex 120 PWM 989 グラボ Palit NE5105T018G1-1070F(GTX1050Ti 4G GDR5 STORMX) 14,601 上記とアイネックス ナノダイヤモンドグリス JP-DX1(1,225円)を合わせて、都合 108,556 円。
上記を組み立てインストールの儀式へと入っていった。
以降、Arch Wiki を参照しながら進めていくが、リンクは(原典な気がするので)英語版を基本的に用い、日本語版にしかないコンテンツであればそちらを貼ることとした。
英語版でもサイドペインの「日本語」リンクをクリックすればすぐに日本語版記事に飛べるので、適宜そちらも参照するとよい。OS インストール
基本は公式インストールガイドに従う。
インストールの準備
署名の検証
これは旧 Arch 機から行なった。
今回はarchlinux-2019.05.02-x86_64.iso
を用いたが、バージョンはその時最新のものを指定しよう。$ wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2019.05.02/archlinux-2019.05.02-x86_64.iso $ wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2019.05.02/archlinux-2019.05.02-x86_64.iso.sig $ sudo pacman-key -v archlinux-2019.05.02-x86_64.iso.sig今回は CD-R が余っていたので、Brasero により ISO イメージを焼いた。
前回 USB メモリを使って失敗した形跡があるので、CD はまあ無難な選択かもしれない、ライブ環境の起動
新マシンで上記 CD からライブ環境を起動する。
キーボードレイアウト
公式ガイドでは日本語に変更する方法が書いてあるが、自分は英語のままでよいので何もせず。
起動モードの確認
今回のマシンは BIOS ではなく UEFI である。
以下のディレクトリが存在しその中身があれば UEFI なので、念のためこれで UEFI であることを確定させておこう。# ls /sys/firmware/efi/efivarsパーティション
ディスクは 1 つしか積んでいない、デュアルブートの予定もなし、という前提のもとでポイントは 3 つ。
- UEFI なので EFI パーティションを作成する必要がある
- 上記以外はパーティションを分けない
- LVM を用いる
パーティションについては、UEFI なので
/boot
を 512MB FAT32 で切る。
それ以外についてだが、まず swap は swap ファイルを使うので不要。
/
と/home
を分離してリカバリを容易にする作戦もあるが、/home
の重要なものはクラウドサービスや自宅 NAS に逃がせば個人的に十分なので、再インストールは痛手ではない。
(ちなみに HDD であれば/home
を切ることで速くなるようだが、今回のマシンは SSD である)
また/var
の増加によるディスク食い潰しも起きるとも思えないので、パーティションは切らずに広くディスクを使える方が利が大きい。
この辺は人それぞれのポリシーがあると思うので、各々の判断で実施してもらいたい。LVM については、以前のマシンでディスク容量不足に陥いった時に、SSD 追加で簡単に容量の拡張ができて助かった経験があるため今回も採用した。
マシン特性的にこれ以上 SSD を積みたくないのが本音だし、その手の作業が発生しないよう自分の用途に対して十分な容量にしたつもりだが、まあお守りだ。なおファイルシステムの選定だが、SSD のパフォーマンス劣化防止のため SSD Trim を有効にすることと、swap ファイルを使うことを考えると、現時点では選択肢が ext4, JFS, XFS になるだろうか。
なお Btrfs では swap ファイルが使えない。
ファイルシステム事情には疎いのだが、JFS は 日本語 ArchWiki でext シリーズや ReiserFS ほどは広くサポートされていませんが
とあるので却下。
定番の ext4 か、RHEL で標準となった XFS かだが…今回も無難そうな ext4 を用いることとした。さて作業開始にあたり、まずはブロックデバイスを確認してみる。
root@archiso ~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 496.6M 1 loop /run/archiso/airootfs sda 8:0 0 465.8G 0 disk sr0 11:0 1 609M 0 rom /run/archiso/bootmntというわけで今回は
/dev/sda
がお目当てのブロックデバイスだ。
対象が確認できたところでパーティションを切ろう。# fdisk /dev/sdafdisk の詳細は割愛するが、
m
でヘルプが出るのでそれを見ながらパーティションを設定していく、
まずは、fdisk の ヘルプから「create a new empty GTP partition table」を見つけてそのコマンドを打つ。
これにより GPT のパーティションテーブルが作成できる。続いて、UEFI なので ESP (EFI System Partition) を作成する。
ESP の詳細が知りたければこちら。
fdisk のヘルプから「add a new partition」を見つけてそのコマンドを打つ。
そこで設定した内容は以下である。
- Partition number に 1 を指定
- First Sector には、指定可能な最小値を設定
- 2048 だった
- Last Sector には、512MB 相当のセクタ数を指定
- fdisk が「Units: sectors of 1 * 512 = 512 bytes」とか表示してくれる
- というわけで
+512M
を指定した。+
を忘れない同様に「create a new empty GTP partition table」により、残り全のセクタを Partition number 2 に割り当てる。
続いて「change partition type」よりパーティションタイプを指定する。
Partition number 1 には EFI System を設定したいのだが、悲しいことに指定可能なタイプ一覧はモニタサイズによっては見切れてしまい、何を指定すれば EFI System になるか分からなかったりする。
今回は1
を選択するのが正解であった。同様に Partition number 2 に対して change partition type を行い、今度は
Linux LVM
を設定する。最後は「write table to disk and exit」を行なう。
LVM の設定
https://wiki.archlinux.org/index.php/LVM#Installing_Arch_Linux_on_LVM
LVM の物理ボリュームの作成を行なう。
先ほどのパーティショニングにより/dev/sda2
が対象の領域となったため、以下のコマンドを実行する。# pvcreate /dev/sda2以下のコマンドで
/dev/sda2
が表示されれば成功だ。# pvdisplay続いて LVM のボリュームグループを作成する。
VolGroup00
は別の名前でも構わないはずなので、任意で変更すること。# vgcreate VolGroup00 /dev/sda2次のコマンドで
VolGroup00
が存在しているか確認する。# vgdisplay作成したボリュームグループを全て、
lvolroot
という名前で/
へ割り当てる。# lvcreate -l +100%FREE VolGroup00 -n lvolrootそして以下のコマンドを打ち、
/dev/VolGroup00/lvolroot
が想定したボリュームサイズ、つまり/boot
を除く全容量 で作成されていることを確認する。$ lvdisplayパーティションのフォーマット
# mkfs.vfat -F32 /dev/sda1 # mkfs.ext4 /dev/mapper/VolGroup00-lvolrootパーティションのマウント
作成したパーティションをマウントする。
# mount /dev/mapper/VolGroup00-lvolroot /mnt # mkdir -p /mnt/boot # mount /dev/sda1 /mnt/bootインターネットへの接続
有線接続であればライブ環境起動時に接続できるようになっているはずなので
ping 1.1.1.1
でも打って確認してみる。
接続できなければ公式のガイドを見ながら設定すること。システムクロックの更新
以下でシステムクロックを正確にする。
# timedatectl set-ntp treuインストール
ミラーの選択
/etc/pacman.d/mirrorlist
を開き利用したいミラーをアンコメントするの…というわけではなく、全てが最初からアンコメントされている方式なので、以下のようにした。# cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak # grep -A 1 Japan /etc/pacman.d/mirrorlist | grep Server > /etc/pacman.d/mirrorlistなおこのミラーリストは上から順に優先されることになる。
ベースシステムのインストール
ではいよいよインストールだ。
これで必要なパケージ群が入る。# pacstrap /mnt base base-develシステムの設定
fstab の生成
# genfstab -U /mnt >> /mnt/etc/fstab
/mnt/etc/fstab
の中身は念のため確認しておく。chroot
新しくインストールしたシステムに
chroot
する。# arch-chroot /mntタイムゾーン
日本在住なので日本にする。
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime加えてハードウェアクロックが UTC であれば、以下により
/etc/adjtime
を設定する。# hwclock --systohc --utcロケール
/etc/locale.gen
を編集し、en_US.UTF-8 UTF-8
とja_JP.UTF-8 UTF-8
をアンコメントする。
続いて以下のコマンドを実行する。# locale-gen最後にロケールの設定をするが、ここでは日本語ではなく英語を指定する。
CLI 環境で日本語が出てくると辛いため。ホストネーム
# echo お好みのほすとねーむ > /etc/hostname
/etc/hosts
にも同様の名前を設定する。127.0.0.1 localhost ::1 localhost 127.0.1.1 お好みのほすとねーむ.localdomain お好みのほすとねーむネットワーク設定
この時点で設定されなくなっている状況もあるようだが、
ping 1.1.1.1
したら通ったので何もしなかった。Initramfs
LVM のためにまずは
/etc/mkinitcpio.conf
を編集する。
https://wiki.archlinux.org/index.php/LVM#Configure_mkinitcpio
HOOK
において、base
の後にudev
を、block
の後にlvm2
を追加する。
udev
とlvm2
ではなくsystemd
とsd-lvm2
を追加するという方式もあるようだが、udev
がデフォルトで含まれていたので今回はそちらにした。その後、以下を実行する。
# mkinitcpio -p linuxRoot パスワード
任意のものを設定する。
# passwdブートローダー
UEFI なので systemd-boot を用いる。
以前は gumiboot を使っていたのだが、それはこの systemd-boot の旧名らしい。
以下でインストールする。# bootctl --path=/boot install続いて、AMD の CPU なのでマイクロコードのインストールを行なう。
https://wiki.archlinux.org/index.php/Microcode# pacman -S amd-ucode最後に、systemd-boot の設定ファイルを記述する。
まずは/boot/loader/loader.conf
に以下を設定する。default arch timeout 4 console-mode max editor no各値はこちらを見つつ変えてよいが、
editor
はセキュリティ上no
にすることが推奨されている。続いて
/boot/loader/entries/arch.conf
に以下を設定する。title Arch Linux linux /vmlinuz-linux initrd /amd-ucode.img initrd /initramfs-linux.img options root=root=/dev/mapper/VolGroup00-lvolroot rw
initrd /amd-ucode.img
により、先ほどインストールしたマイクロコードの自動更新がされるようになる。再起動
# exit # umount -R /mnt # rebootリブート時にインストールメディアを取り除くこと。
そして Arch Linux が起動すれば成功。デスクトップ機化への道のり
Arch Linux を起動したら root でログインする。
起動できなかったら上記の OS インストールに失敗している可能性があるので残念ながら原因を探しつつ修正する必要がある。個人ユーザ作成
ひとまず個人ユーザを作り、root での作業をやめる。
# useradd -m {username} # passwd {username} # pacman -S sudo # visudo作成したユーザが
sudo
で作用ができるよう、visudo
では以下を追記する。{username} ALL=(ALL) ALLここまで終わったら
exit
し、作成したユーザでログインし直す。ネットワークの有効化
今回は有線なので以下で済ませた。
@
の後はネットワーク I/F 名になるので、それはip a
コマンドで調べる。$ systemctl enable dhcpcd@enp8s0 $ systemctl start dhcpcd@enp8s0(ちなみに今回のマザボは WiFi を搭載しているがとりあえず使わない)
パッケージの更新
$ sudo pacman -SyuYay のインストール
AUR のパッケージを使いたくなるシーンがよくあるので、AUR ヘルパーである Yay を入れる。
$ sudo pacman -S git $ git clone https://aur.archlinux.org/yay.git $ cd yay $ makepkg -si $ rm -rf yay以降は
pacman
よりyay
の方がタイプ数が少ないので、yay
を使っていく。
sudo
も省略できるし。systemd-boot の自動更新
Yay が入り AUR が簡単に使えるようになったので、AUR にある systemd-boot 自動更新用パッケージを入れる。
$ yay -S systemd-boot-pacman-hooksystemd-boot は先程のインストール手順により導入されたが、
/boot
に入ったため通常の pacman 系更新コマンドでは更新されない。
そこで上記パッケージを導入することで pacman の更新にフックして systemd-boot も更新されるようにしておくのが吉。Wayland を諦めた
さて GUI 環境の構築開始だ。
RHEL 8 が Wayland を採用したし、Arch ユーザとしては負けるわけにはいかねえ! と思ったのだが諦めた。
グラボが NVIDIA じゃなければ採用したのだが…。ウィンドウマネージャに i3wm を使ってみたいと思っており、ちょうど 1.0 がリリースされた i3wm 互換の Wayland 用 ウィンドウマネージャ Sway に興味を持っていた。
が、Sway と NVIDIA は相性が悪いようだ…。参考
- https://github.com/swaywm/sway/wiki#nvidia-users
- https://nyakuo.hatenablog.com/entry/2018/12/31/100000
「機械学習って CUDA 使えた方が有利なのかね? 申し訳程度に NVIDIA にしておくか」と思って熟慮せず選んだパーツだったが、少々悔しい。
何年も前にリーナス御大が中指を立てていたことを知らなかったわけではないが、自分はその意味をよく理解していなかったのだ…。仕方なく Xorg の導入
ここでは
nvidia
パッケージを入れているが、必要なドライバはグラボのベンダーや世代によって変わるので注意すること。$ yay -S nvidia $ yay -S xorg-server $ sudo nvidia-xconfigちなみに自分の環境では
nvidia
を入れると CUI の解像度が低くなるという問題が起きており、対応は保留中…。ディスプレイマネージャの導入
Xorg の起動にあたりディスプレイマネージャを導入する。
今回は LightDM を採用した。
以前は SLiM を使っていたが開発が終了したので、他の軽量なものを選んだ。$ yay -S lightdm lightdm-webkit2-greeter $ sudo systemctl enable lightdm合わせてインストールしている
lightdm-webkit2-greeter
は Greeter と呼ばれるログイン情報入力 GUI である。
これにはいくつか選択肢があるので好みのものを使うとよい。
そしてインストールした Greeter を設定する。
/etc/lightdm/lightdm.conf
において、以下を記述する。[Seat:*] … greeter-session=lightdm-webkit2-greeterなおここで設定可能な Greeter 名は
/usr/share/xgreeters
を見れば分かる。さて LightDM の設定は色々変更できそうだが、今回は割愛する。
ウィンドウマネージャの導入
では早速 Xorg を起動! とはせずに、ウィンドウマネージャを入れよう。
これまで GNOME、Openbox、Xmonad と変遷してきたが、今回は i3wm にした。
ターミナルには従前より利用している Terminator を選んだ。
やはりタイル型はなじむ。実になじむ。$ yay -S i3-wm i3status terminator $ sudo rebootこれで成功すれば LigthDM のログイン画面が表示される。
そこで i3 のセッションを選択、id/pw を入力してログインしよう。
すると i3 のデフォルト設定がないから作るよと表示されるのでウィザードに従って作成する。あとは
mod + enter
でターミナルが起動する。
i3 は空気を読んで未設定でも Terminator を使ってくれるようだ。さて i3wm の設定もやりがいがありそうだが、今回は割愛する。
フォント
日本語フォントの導入
AUR に Nerd Fonts パッチ適用済みの Ricty が上がっているのでありがたく使う。
$ yay -S nerd-fonts-rictyあるいは好みであれば Cica フォントを入れてもいいかも知れない。
$ yay -S ttf-cica絵文字
Symbola を使う。
$ yay -S ttf-symbola $ fc-cache -f -vこのあと、ブラウザやターミナルエミュレータ等の GUI アプリケーションは再起動することで絵文字が表示されるようになる。
日本語入力
Fctix + Mozc を使う。
本当は IBus の IM 切り替えのモッサリ感が好きではない。
Fctix は母音が変な位置に出る問題があるので一度は諦めていたが、軽く触ってみたところ修正されているようだったので改めて採用した。
なお Nimf という新興の IM フレームワークもあるが、どうも Anthy 縛りっぽいので見送った。まずは
~/.xprofile
に環境変数および自動起動の設定をする。export LC_CTYPE=ja_JP.utf-8 export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx fcitx &
LC_TYPE
で行なっているロケールの設定を忘れると、Fcitx に Mozc をはじめとした日本語 IM が追加されないので注意する。
なおこの設定は/etc/locale.conf
でやることもできるが、その場合はシステムグローバルに日本語になり、CLI でのトラブルシューティングが辛くなるのでやらない。
ここで一旦、再ログインする。そして必要なパッケージを入れる。
$ yay -S fcitx-mozc fcitx-configtool fcitx-imなお前述のロケール設定を忘れて Fcitx を起動すると Mozc が現れなくなるが、この場合は
~/.config/fcitx
を消して Fcitx を再起動すれば直るようだ。あとはタスクトレイにいる Fcitx のアイコンをクリックして Configure を選び、次の設定をして個人的な好みにした。
- インライン入力
- Addon
- Advanced にチェックを入れる
- Fcitx XIM Frontend を選択し、Configure ボタンを押す
- Use On The Spot Style for XIM にチェックを入れる
- タスクトレイのアイコンを右クリックし、restart
- ホットキーの変更
- Global Config -> Hotkey -> Trigger Input Method
Ctrl + Space
は Emacs とぶつかるのでCtrl + \
に変更ブラウザの導入
好きなものを入れれば良いが、とりあえず Chromium を入れた。
ちなみに yay ならば Vivaldi も入れられる。$ yay -S chromiumパスワードマネージャの導入
もし OSS のもを使うなら KeePassXC、あるいは後発の Bitwarden も良さそうだ。
この辺はお好みで。$ yay -S keepassxc # あるいは $ yay -S bitwarden必要なデータベースファイルやキーファイルは、何らかの手段でこの Arch 機のローカルまで持ってこよう。
さてここまでくれば、「とりあえず使えるぜ」感が出るだろう。
SSH 鍵
GitHub などへの鍵登録用。
$ yay -S openssh $ ssh-keygen -t ed25519音
$ yay -S pulseaudio pavucontrol volumeiconvolumeicon を起動し、右クリックから Status Icon を開く。
そして External mixier にpavucontrol
を指定する。続いて PulseAudio と pavucontrol を起動する。
たった今設定したように、pavucontrol はタスクトレイの volumeicon を右クリックして表示させてもいい。$ pulseaudio --start $ pavucontrol &なお PulseAudio は次回から手動で起動しなくてもよい…はず。
そして画面から適当にミュートを解除して音が出ることを確認する。
ここでブラウザで音を出そうとして出ない場合は、一度ブラウザを再起動すると直る可能性がある。ちなみに volumeicon も初期起動するよう設定しておこう。
$ echo 'volumeicon &' >> .xprofileSwap
次節のハイバネートで必要になるのでこの時点で作成する。
Swap のサイズについては RedHat の記事に従って決めると良さそうだ。
今回は 34GB になる。また、Swap はパーティションではなく Swap ファイルとして作成する。
作成とマウントには systemd-swap を使っても良さそうだったが、手動でやっても大した手間ではないので以下のように手動でやった。
最後のtee
コマンドで-a
オプションを忘れると面倒なことになるので気をつけること。$ sudo fallocate -l 34G /swapfile $ sudo chmod 600 /swapfile $ sudo mkswap /swapfile $ sudo swapon /swapfile $ echo '/swapfile none swap defaults 0 0' | tee -a /etc/fstabハイバネート
カーネルパラメータの設定が必要になる。
まずは以下を実行して表示されるphysical_offset
の最初の値を確認する。
以下の出力例においては10074112
である。$ sudo filefrag -v /swapfile | head -n 5 Filesystem type is: ef53 File size of /swapfile is 36507222016 (8912896 blocks of 4096 bytes) ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 0: 10074112.. 10074112: 1: 1: 1.. 10239: 10074113.. 10084351: 10239: unwritten続いて
/boot/loader/entries/arch.conf
にあるoption
の値を変更する。
ここまでの設定では以下のようになっているはずだ。options root=/dev/mapper/VolGroup00-lvolroot rwこれにハイバネート用のパラメータ
resume
およびresume_offset
を付け足す。
resume
にはスワップファイルの載っているデバイスファイルのパス、あるいは UUID を指定する。
あくまでデバイスファイルの情報であり、Swap ファイルそのもののパス (今回は/swapfile
) を指定しないこと。
resume_offset
は先程取得した数字を指定する。
今回の例では以下のようになる。options root=/dev/mapper/VolGroup00-lvolroot rw resume=/dev/mapper/VolGroup00-lvolroot resume_offset=10074112続いて initramfs の設定をする。
/etc/mkinitcpio.conf
のHOOKS
の中にbase
が含まれている場合 (Arch はデフォルトで含まれている)resume
をfilesystem
の前に追加する必要がある。
なお今回のように LVM を使っている場合はlvm2
の後ろでもある必要がある。HOOKS=(base udev autodetect modconf block lvm2 resume filesystems keyboard fsck)そして initramfs を再生成する。
$ sudo mkinitcpio -p linuxではハイバネートしてみよう。
(ブート時のパラメータをいじってるので、もしかしたら一度再起動してからでないとダメかも知れない…自信なし)$ systemctl hibernateなおこのハイバネート用コマンドは、後述のランチャーである Rofi に登録しておくと便利である。
さて、ここでハイバネートから復帰すると気づくことがあるだろう。
認証なしで元の状態に復帰するので危険だぞ…と。
これは次のセクションで解消する。スクリーンロック
というわけで、ハイバネートからの復帰時や、ちょっとトイレに行ってくる間にスクリーンロックをかけられるようにする。
$ yay -S xss-lock i3lockxss-lock はハイバネートやサスペンドにフックしてロックを呼び出してくれる機構であり、ロックそのものではない。
i3lock はロックであり、今回は i3wm であるため選択した。他の選択肢としては xsecurelock など複数あるので、i3wm 以外を使うのであれば調査して好きなものを入れること。xss-lock による見張りを開始するには以下のコマンドを打つ。
$ xss-lock -- i3lock &起動スクリプトへの登録しておこう。
$ echo 'env LC_CTYPE="" xss-lock -- i3lock &' >> ~/.xprofileなおここで
LC_CTYPE
環境変数の設定をしているのは、i3lock が以下のエラーを吐くためだ。xkbcommon: ERROR: couldn't find a Compose file for locale "ja_JP.utf-8" [i3lock] xkb_compose_table_new_from_locale failedちなみにスタンバイ状態にしてスクリーンロックをかけるコマンドは、自分は以下を使っている。
これも後述のランチャーから呼び出せるようにすると便利だ。$ xset dpms force standbyランチャー
Rofi を使っている。便利。
Mac で言うところの Spotlight っぽいやつ。
自前のスクリプトを仕込んだり、SSH の候補を選んだり、アクティブなウィンドウの切り替えなんかにも使える。$ yay -S rofiこの記事では前述の、ハイバネートとスタンバイをここから呼び出す設定を以下に書いておく。
必要なファイルは 2 つだ。
もっと色々設定できるが、それは Rofi について掘り下げている他の記事に譲る。~/.config/rofi/configrofi.modi: window,run,drun,system:~/.config/rofi/rofi_system.sh rofi.sidebar-mode: true rofi.hide-scrollbar: true rofi.kb-cancel: Escape rofi.theme: /usr/share/rofi/themes/glue_pro_blue.rasi~/.config/rofi/rofi_system.sh#!/usr/bin/env bash set -euCo pipefail function main() { # can not use some special charactors # e.g. ( ) local -Ar menu=( ['Standby']='xset dpms force standby' ['Hibernate']='systemctl hibernate' ) local -r IFS=$'\n' # with some arguments: execute a command mapped to $1 # without any arguments show keys [[ $# -ne 0 ]] && eval "${menu[$1]}" || echo "${!menu[*]}" } main $@さてこの Rofi をどうやって呼び出すかだが… i3 にショートキーで呼び出す設定を入れるのが良いだろう。
個人的な好みはalt + space
だ。
起動オプションは任意だが、例としては以下を i3 の設定ファイルに追記すればよい。~/.config/i3/configbindsym Mod1+space exec rofi -combi-modi -font "hack 10" -showちなみに、同設定ファイルを見ると、
$mod+d
に類似のランチャーである dmenu がデフォルトで割当てられている。
が、Rofi が dmenu replacement を謳っているためそちらは出番なし。ナイトモード
夜間はブルーライトをカットし、眠りの質を多少でも上げたい。
そもそも PC なんぞやってないで早く寝ろというのは正論だが対応が難しいため、小手先の手法で何とかしたいのが人情である。そんなニーズに応えてくれるのが Redshift である。
$ yay -S redshift引数なしで
redshift
コマンドにより起動すると、緯度経度を取得しにいってそれをベースに計算してモニタの色合いを調整してくれるようだ。
とはいえ緯度経度を毎度取得しては欲しくないので、あらかじめ/.config/redshift.conf
に記入しておくのがよい。[redshift] location-provider=manual # これはハンブルグの緯度経度である # 修正して使うこと [manual] lat=48.1 lon=11.6このパッケージには、
redshift-gtk
という GUI フロントエンドも含まれている。
これを使うためには以下のパッケージを追加する。$ yay -S python-gobject python-xdg librsvg起動するとタスクトレイに常駐する。
このアイコンを右クリックして Autostart にチェックを入れておくとよい。
redshift-gtk
も自動起動にも加えておく。$ echo 'redshift-gtk &' >> ~/.xprofileデスクトップ通知
Dunst を入れる。
Dzen2 という選択肢もあるが、見た目が気に入らず却下した記憶がある。
他にもっといいのがあれば試したい。$ yay -S dunst $ mkdir -p ~/.config/dunst $ cp /usr/share/dunst/dunstrc ~/.config/dunst/dunstrcこの dunstrc はカスタムして好みの見た目に仕上げるわけだが、
icon-path
の値は適切にしておかないと、通知時にこんなエラーが出る。WARNING: No icon found in path: 'dialog-information'
dialog-information.png
ファイルがあるアイコンテーマのパスを指定すればよく、自分の環境では以下がすでにインストールされていたのでいったん設定した。~/.config/dunst/dunstrcicon_path = /usr/share/icons/Adwaita/16x16/legacy好みのアイコンセットが各々あると思うので、好きなものを入れてパスを設定すること。
では起動の設定だ。
echo 'dunst &' >> ~/.xprofileちなみに起動が成功したかどうかのテストには以下のようなコマンドを打てば良い。
起動できていれば通知が出る。$ notify-send 'subject' 'this is test'温度やファンの回転数を見る
PC を自作する以上は重要。
温度が高すぎるならエアフローを見直す必要がある。ツールとしては lm_sensors を使う。
https://wiki.archlinux.org/index.php/Lm_sensors$ yay -S lm_sensors $ sudo sensors-detect
sensors-detect
ではいろいろ質問されるが、すべて Enter を入力すれば無難なセットアップになるようだ。さて温度などを見る方法だが、
sensors
コマンドを使って CUI で見てもいいし、GUI フロントエンドである xsensors または psensor を使ってもいい。
個人的には psensor の方が詳細で好きだ。アラーム機能もあり、タスクトレイに常駐させることもできる。$ yay -S psensor $ psensor & $ psensor & >> .xprofileWeb カメラ
ドライバの都合で使える Web カメラとそうでないものがあるようなので、まずはここを眺めて使えそうなものをピックアップする。
自分は Logicool C270 を選んだ。
この Web カメラに対応するドライバ linux-uvc であり、カーネルモジュール uvcvideo がロードされていればよいようだ。
以下で確認したらすでにロード済みのようだったので、PC にカメラを接続してみたら見事に使えた。
めでたし。$ modprobe -c | grep uvcvideoCLI ツール群
何を入れるか、どう設定するかは他に詳しい記事がいくらでもありそうなのでそちらに譲るが、現時点で個人的に使っているツールの中で基本的なものをざっと書いておく。
作業効率を考えれば、これらはこの一連のインストール作業の序盤で入れておくべきだったかも知れない。
- fish + fisherman
- tmux + tpm
- fzf
- ag
- fd
alias ls='lsd'
alias diff='colordiff'
最近は
alias cat='bat'
も検討中。Arch Linux 特有のもの
$ yay -Ss pacman-contrib pkg-tools見た目を整える
壁紙
Nitrogen を使う。
先に好きな壁紙を用意しておくのをお忘れなく。$ yay -S nitrogen $ nitrogen /path/to/壁紙画像のあるディレクトリこれで GUI が起動するので好みに設定し、Apply してから終了する。
そして起動時に壁紙を表示するように以下を行う。
$ echo 'nitrogen --restore &' >> ~/.xprofile背景透過
Compton を使う。
$ yay -S compton起動オプションは適宜調べて好みに設定すればよいが、バックグラウンド起動は
-b
でできるので最低限このオプションだけつけておけばいいだろう。$ compton -b $ echo 'compton -b' >> ~/.xprofile各種テーマの導入
今のところやってない(いずれ対応してこの記事に書くかも…)。
アイコンだけでなく、複数バージョンの GTK と Qt に対応し、かつ両者の統一感まで考え出すと面倒。
とりあえず i3 や dunst 等の見た目を整えた時点でそれっぽいやつを適宜導入していけばいいかと思った。ちなみに、アイコンや GTK のテーマを拾ってくる場所として以前は https://www.gnome-look.org/ を使っていたので、今回もお世話になりそう。
Steam
まずは Multilib を有効化する。
/etc/pacman.conf
の以下をアンコメントする。/etc/pacman.conf[multilib] Include = /etc/pacman.d/mirrorlist続いて以下を実行する。
$ yay -Syyそして 32 bit の NVIDIA ドライバと Steam を導入する。
$ yay -S lib32-nvidia-utils steamあとは
steam
コマンドで起動すればよい…のだが、この起動でけっこうトラブることがある。
そんな時は Arch Wiki の Steam トラブルシューティング記事なんかを見ながら粘る。
粘る…。チューニング
とりあえず Arch Wiki にあるもののうち Disk I/O 関連だけやっておいた。
https://wiki.archlinux.org/index.php/Improving_performanceSSD
TRIM
速度劣化を防止するため TRIM を有効化する。
まずは TRIM がサポートされているかを先に確認すること。
$ yay -S hdparm $ sudo hdparm -I /dev/sda |grep TRIM * Data Set Management TRIM supported (limit 8 blocks) * Deterministic read ZEROs after TRIM $ yay -Rs hdparm
supoprted
とあるので fstrim を有効にする。$ sudo systemctl enable fstrim.timer $ sudo systemctl start fstrim.timerちなみに日本語版の Arch Wiki にしか書いてなさそうだったのだが、
/etc/fstab
にdiscard
フラグを追加することによる TRIM の有効化は推奨されないらしい。また、今回のように LMV を使っている場合は上記に加えて
/etc/lvm/lvm.conf
のissue_discards
の値を1
に変更すること。atime
atime 情報の更新を止めて高速化を図る。
/etc/fstab
でrelatime
オプションを付与する。
最速はnoatime
オプションを使って完全に atime の更新を止めることなのだが、atime が全く更新されなくなると上手く動作しないアプリケーションが一部あるようなので、ファイル書き込み時だけは更新してくれるrelatime
を妥協案として使うのが現実解になりそうだ。そして
/etc/fstab
を変更したので再起動…と思ったら、以下のコマンドを打てばよいようだ。$ sudo mount -aI/O スケジューラ
SSD の場合は伝統的な CFQ では遅いという話があり、変更を試みた。
$ cat /sys/block/sda/queue/scheduler [mq-deadline] kyber bfq noneというわけでもともと
mq-deadline
になっていたのでこのまま行ってみることにした。ちなみに LVM を使っている都合で
dm-0
というブロックデバイスもあるが$ cat /sys/block/dm-0/queue/scheduler noneこれは…このままでいいいのかな?
none
になっていたら調整するなという記事も見かけたので。ちなみにこの
dm-X
が何かというのはこちらのスクリプトで判明する。Swap
swappiness を 10 にする。0 にはしない。
参考: https://qiita.com/rarul/items/a96b61b1fb535dea5fe3
RAM は 32GB と多く積みはしたが、正直 swappiness の挙動をちゃんと理解できておらず、0 にするのが本当に適切なのかは怪しい…。
というわけで Red Had の推奨値である 10 を設定することとした。
まあこの推奨値も、Oracle DB では、という枕詞があるわけだが…。まずはデフォルト値である
60
が設定されていることを確認しておく。$ cat /proc/sys/vm/swappiness 60というわけで 10 まで下げる。
現在のセッションで swappiness を一時的に変更するのと、永続化設定を両方入れるのでコマンドは 2 つ。$ sudo sysctl vm.swappiness=10 $ echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-sysctl.conf
- 投稿日:2019-05-29T08:13:49+09:00
【目的別】Github手順書【初心者向け】
当記事の目的
以下の悩みを解決
- GitHubのコマンドが書いてあるページはたくさんあるけど、現状に合わせてどう組み合わせて使ったらいいか分からない
- はじめてGitHub触るけどぶっちゃけ何から手を付けたらいいか分からない
前提条件
- 構成管理システムの概念的な話は一切触れません
- GitHubのコマンドをインストール済みで、Linux上でGitHubにアクセスすることを想定
- fetchとは何か、mergeとは何か、ローカルリポジトリとは?originとは?みたいな話は別のまとめを見てください。気が向いたら参考ページ張ります
- 筆者がGitHubに慣れていくにつれ加筆されていきます
Windows環境の人は、インストールについてはそれなりに手間なので、【Windows】Gitの環境構築を参考にしてください。Linux環境の人はデフォルトでインストールされていることがほとんどですが、なければ
sudo apt-get install git
してください。インデックスを見ながら、自分に合った目的をお探しください
GitHubコマンド手順
case1 : 開発チームに入ったぞ!早速ローカルのフォルダにリモートのソースコードをクローンしてこよう!
手順
Clone or downloadをクリックし、表示されたURLを控える(
https://github.com/自分のリポジトリ.git
とする)ローカルリポジトリを作成したいフォルダに移動
$ git clone https://github.com/自分のリポジトリ.git -b branch_name local_folder_name
- branch_nameは、リモートのどのブランチをクローンするか指定
- local_folder_nameは、作成するローカルリポジトリの名称(デフォルトは
リモートURL-ブランチ名
)ユーザID、パスワード入力を求められるため、GitHubにログインする際のユーザ名とパスワードを入力する
詰まりそうな点
- 社内でエンタープライズのGitを利用している場合や、セキュリティ意識の高い方で2段階認証設定をしている場合は、GitHubホームページ上でアクセストークンを発行して、PWの代わりに使う必要がある。参考:Githubの2段階認証を実施してgitコマンドが使えないときにやったこと
case2 : ブランチを分けてカスタマイズをするぞ!まずはブランチを分けよう!
手順
- gitクローンされた、ローカルリポジトリ下にいることを確認
$ git branch
でブランチの状態を確認shun@shun-VirtualBox:~/xxx/yyy$ git branch * original_branch_name
$ git checkout -b new_branch_name original_branch_name
で新ブランチ作成
- new_branch_nameは、作成する新しいブランチの名称
- original_branch_nameは、基にするローカルのブランチ名称
- リモートからチェックアウトする場合は
$ git checkout -b branch_name origin/branch_name
- origin/branch_nameがリモート、branch_nameがローカル
$ git branch
でブランチの状態を確認shun@shun-VirtualBox:~/xxx/yyy$ git branch original_branch_name * new_branch_namecase3 : カスタマイズが終わったから、分岐したローカルブランチに対してコミットしよう!
- gitクローンされた、ローカルリポジトリ下にいることを確認
$ git status
でチェックアウトしてからの変更情報を確認
deleted: moved_file.py
は、消去されたファイル(実際にはファイル移動)modified: changed_file.py
は、変更が加えられたファイルdeleted: deleted_file.py
は、消去されたファイルnew_file.py
は、新規で作成されたファイルnew_folder/moved_file.py
は、新規で作成されたファイル(実際にはファイル移動)shun@shun-VirtualBox:~/xxx/yyy$ git status ブランチ new_branch_name Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) deleted: moved_file.py deleted: deleted_file.py modified: changed_file.py 追跡されていないファイル: (use "git add <file>..." to include in what will be committed) new_folder/moved_file.py new_file.py no changes added to commit (use "git add" and/or "git commit -a")
- この状態を想定して、まずはaddしていく
$ git add moved_file.py
$ git add deleted_file.py
$ git add changed_file.py
$ git add new_folder/moved_file.py
$ git add new_file.py
$ git status
でaddした後の状態を確認
- それぞれがrenamed, modified, deleted, new fileとしてコミット予定の発射台に乗っていることを確認する
shun@shun-VirtualBox:~/xxx/yyy$ git status ブランチ new_branch_name コミット予定の変更点: (use "git reset HEAD <file>..." to unstage) renamed: moved_file.py -> new_folder/moved_file.py modified: changed_file.py deleted: deleted_file.py new file: new_file.py Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) 追跡されていないファイル: (use "git add <file>..." to include in what will be committed) no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -m 'message'
でコミットを実行
- messageは任意のコミットメッセージを入力
詰まりそうな点
- 間違えてaddして、取り消したい場合は
$ git reset HEAD added_file
を実行。$ git reset HEAD
までは固定。renameの場合は、変更前のファイルと変更後のファイルに対して両方resetする必要がある- 一括でadd取り消したい場合は
$ git reset HEAD
- commit時にメッセージは必須で、-m以降を入力しないとvimが開いてしまう
case4 : ローカルのブランチにコミットしたぞ!リモートブランチにも反映しよう!
手順
$ git push origin new_branch_name
- originは固定値
- new_branch_nameはリモートに反映させたいブランチ名称
- new_branch_nameがリモートにない場合は、新規に作られる
詰まりそうな点
- リモートに同一名称のブランチがない場合は、new_branch_nameが新規作成される
case5 : ローカルのブランチを、リモートのブランチの状態に合わせたい!
ローカルで色々更新したんだけど、やり直したい場合を想定。同一名称のリモートブランチに別のマージが入っている場合は、以下のやり方ではなく素直
$ git pull origin develop
でプルをする。手順
$ git fetch origin
- [new branch]となっているブランチは、ローカルには無いけどリモートに存在するブランチ
- original_branch_nameは、ローカルにもリモートにも存在するブランチ
shun@shun-VirtualBox:~/xxx/yyy$ git fetch origin remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (1/1), done. From https://github.com/自分のリポジトリ * [new branch] new_branch -> origin/new_branch c5996a4..47d6cc0 original_branch_name -> origin/original_branch_name
$ git reset --hard origin/original_branch_name
git reset --hard origin/
までは固定、original_branch_nameは、合わせたいブランチ名称- fetchしてきたリモートのブランチを、ローカルの同一名称ブランチに反映させますよ!という命令
$ git checkout original_branch_name
で、reset後のブランチに移動する$ git clean -df .
で余分なファイルを削除する
- ここまでの命令では、あくまで更新情報/新規作成情報のみをリモートから取得できるが、不要ファイルの削除をしてあげる必要がある
- ここまで実行することで、リモートブランチと全く同じ状態になる
詰まりそうな点
- fetchって何?と思う人は、リモートリポジトリとローカルリポジトリの中間層があると思えばよい。そこを「origin」と呼んでおり、リモートをoriginに反映させる処理をfetchと呼ぶ。originを使ってローカルリポジトリをどうするかが、reset以降のコマンド【入門者向け】Gitのfetchコマンドについて図を用いて解説
case6 : 1つ1つaddするのめんどくさいから一括でaddしたい!
手順
$ git add -u
- トラッキング(バージョン管理)されているファイルについて、すべてaddされる
- つまり、「削除されたファイル」、「変更されたファイル」はaddされ、「新規作成されたファイル」はaddされない
$ git add -A
- トラッキング(バージョン管理)されていないファイルも含めて、すべてaddされる
- つまり、「削除されたファイル」、「変更されたファイル」、「新規作成されたファイル」がaddされる
$ git add .
- カレントディレクトリ以下に対して、
$git add -A
を実行するcase7 : プルリクも承認されたし、不要ブランチを削除するぞ!
手順
まずはローカルのブランチから削除していく
% git branch
- まずは現在のブランチの状態を確認
- developにマージが完了しており、updateDevelopを削除したいとする
shun@shun-VirtualBox:~/workspace/global$ git branch develop * updateDevelop
$ git checkout develop
- このままでは削除できないので、developブランチに移動する
マージが完了している場合
$ git branch --delete updateDevelop
- 不要ブランチを削除する
マージが完了していないが削除したい場合
$ git branch -D updateDevelop
- 不要ブランチを
マージをせずに
削除する- ※これまで反映したcommitは削除されるので注意
次にリモートブランチを削除する
% git branch --remote
- まずは現在のリモートのブランチの状態を確認
- ローカルでは削除したupdateDevelopが残っている
shun@shun-VirtualBox:~/workspace/global$ git branch --remote origin/HEAD -> origin/master origin/develop origin/updateDevelop
$ git push --delete origin updateDevelop
- 不要ブランチを削除する
もしくは以下のコマンドでも可能
$ git push origin :updateDevelop
最終的なブランチの状態を確認する
$ git branch --all
shun@shun-VirtualBox:~/workspace/global$ git branch --all* develop remotes/origin/HEAD -> origin/master remotes/origin/develop remotes/origin/developcase8 : 親ブランチにされたコミットを、今の作業ブランチに反映させたい!
手順
developブランチで作業している際に、masterブランチにコミットが入りました。そんな時はrebaseを使います。
ブランチの状態は以下の通りで、origin/maseterにコミットが加えられている
shun@shun-VirtualBox:~/workspace/global$ git branch -a master* develop remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/develop
$ git checkout -b master origin/master
- まずはローカルに、masterブランチをcheckoutします
$ git pull origin
- リモートmasterブランチへの反映を、ローカルのmasterブランチにも行います
$ git checkout develop
- 元々作業していたdevelopブランチに移動します
$ git rebase master
- masterブランチへのコミットを、現在の作業ブランチに反映ささせます
現時点のブランチの状態は以下の通りで、ローカルのmasterとdevelopは同じ状態
shun@shun-VirtualBox:~/workspace/global$ git branch -a master develop* remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/developリモートにも反映させる場合は、プッシュをしてあげればOK
$ git push origin develop
case9 : リモートブランチに反映された内容をローカルの同名ブランチにも反映させたい!
手順
現在のブランチの構成は以下の状態とし、リモートのdevelopに反映されたコミットをローカルdevelopにも反映させたいとします
shun@shun-VirtualBox:~/workspace/global$ git branch -a master develop* remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/develop一発で反映させたい場合は、以下のコマンド
$ git pull origin develop
- origin(追跡ブランチ)に、リモートのdevelopを反映させる(フェッチ)
- また、originからローカルのdevelopブランチに統合する(マージ)
上記の手順を別コマンドで行うと以下のようになる
$ git fetch origin develop
- origin(追跡ブランチ)に、リモートのdevelopを反映させる
$ git merge FETCH_HEAD
- originのFETCH_HEADからローカルのdevelopブランチに統合する
続く
- 投稿日:2019-05-29T02:33:11+09:00
C言語でファイルの更新日をナノ秒まで表示する方法
※ 2017年の自分の記事を移転しました。
C言語でファイルの更新日時をナノ秒まで表示する方法です。
用途としては、ファイルの定期的な更新確認ですかね。環境について
・Linuxカーネル2.5.48以上
・ファイルシステム XFS, JFS, Btrfs, ext4
上記以外のファイルシステムは、ナノ秒は0で表示される可能性があります。ソース
nsec_show.c#include <stdio.h> #include <sys/stat.h> #include <errno.h> #include <time.h> int main(int argc, char *argv[]) { int i; struct stat st; char date_str[256]; /* argc check */ if (argc != 2) { printf("USAGE:%s <FILE PATH>\n", argv[0]); return 1; } /* get stat */ if (stat(argv[1], &st) != 0) { printf("%s\n", strerror(errno)); return 1; } /* show */ strftime(date_str, 255, "%Y%m%d%H%I%M%S", localtime(&st.st_mtime)); printf("%s.%09ld\n",date_str, st.st_mtim.tv_nsec); return 0; }動作確認
コンパイル後、実行すると以下のような形で表示されます。
$ gcc nsec_show.c -o nsec_show $ ./nsec_show ./nsec_show.c 20170305063637.656058532ちなみに、lsコマンドで表示されるナノ秒と一致しています。
$ ls ./nsec_show.c --full-time -rw-rw-r--. 1 miyabi miyabi 581 2017-03-05 06:36:37.656058532 +0900 ./nsec_show.c参考文献
- 投稿日:2019-05-29T00:34:32+09:00
【備忘録】MD5のハッシュ値確認と照合について
装置A、装置Bが存在しているのが前提。
装置Aから装置Bにmd5sum_testディレクトリごとコピーする。
md5sum_testディレクトリにはファイルが入っている。1.装置Aで下記コマンド
$ find /home/pi/md5sum_test/1/ -type f -exec md5sum {} \; > 1_A.md5sum2.装置Aで下記コマンドで内容確認。
$ cat 1_A.md5sum 372e25f23b5a8ae33c7ba203412ace30 /home/pi/md5sum_test/1/file2 60b725f10c9c85c70d97880dfe8191b3 /home/pi/md5sum_test/1/file13.装置Bに手順1で作成したファイルを転送。
4.装置Bで下記コマンド実施。
$ md5sum -c /tmp/1_A.md5sum /home/pi/md5sum_test/1/file2: 完了 /home/pi/md5sum_test/1/file1: 完了※失敗すると下記のようになる。
/home/pi/md5sum_test/2/file2: 完了 /home/pi/md5sum_test/2/file1: 失敗 md5sum: 警告: 1 個の計算したチェックサムが一致しませんでした以上