- 投稿日:2019-03-23T22:40:27+09:00
 
Trusted Platform ModuleでSSH鍵を作る
SSHする際の秘密鍵は、ssh-keygenコマンドなどで生成します。
ただ、最近のマザーボードには、TPMと呼ばれるハードウェア生成器がついているので使ってみましょう。Trusted Platform Module とは
TPMとは、Trusted Platform Moduleの略で、耐タンパー性があるチップです。
つまり、物理的な分解、ノイズ解析や、攻撃に耐性があります。
通常のCPUで行う演算の一部を、TPMに委託することで、ある程度安全に暗号計算やハッシュ計算を行えます。TPMにはバージョンがあり、1.2と2.0が主流です。
機能は以下となります(wikipediaより引用TPM 1.0 / 1.2
- RSA演算
 - RSA鍵生成
 - RSA鍵格納
 - SHA-1ハッシュ
 - ハッシュ値計算
 - ハッシュ値保管
 - 乱数生成
 TPM1.2から以下の機能が追加された。
- カウンタ
 - 単純増加カウンタ
 - ティックカウンタ
 - オーナー権委任(パスワードは公開しない)
 - 不揮発性ストレージ保存機能
 TPM 2.0
- TPM 1.2の機能
 - シードとオブジェクトの概念
 - 認証形式の追加(KDFによるセッション鍵生成、Policy認証)
 - 認証と秘密通信の高速化
 - アルゴリズムの大幅な追加
 - 各種ハッシュ演算(SHA256、SM3、HMAC、KDFなど)
 - 楕円曲線暗号(NIST curve P-256、SM2など)
 - AES(128bit~256bit、OFB、CTRなどの各種モード)
 - グループの複製(Key duplication)
 - 不揮発性カウンタ
 - 不揮発性ビットフィールド
 TPMでSSH鍵生成
ツール/ライブラリのインストール
$ sudo modprobe tpm $ sudo pacman -S tpm2-tools tpm2-tssこれで、
/dev/tpm[0-9]*、/dev/tpmrm[0-9]*とコマンド類が手に入ります。
udevでルールが追加されているので、一回再起動しましょう。おわりに
ここまで書いてなんですが、Linuxカーネルでのtpm2は十分にサポートされていないらしく、実際自分の手元でも動作が不安定なため、いつかtpm2がちゃんと動くときまで保留しておきます
参考:
https://blog.hansenpartnership.com/tpm2-and-linux/
https://wiki.archlinux.org/index.php/Trusted_Platform_Module
- 投稿日:2019-03-23T22:18:36+09:00
 
文字コードをコマンドで切り替える(iTerm2 )
環境、ファイルごとに文字コードがeuc, utf-8と混在しており、頻繁に日本語が文字化けしていました。
毎回iTerm2の設定画面で切り替えていましたが、面倒なのでコマンドで切り替えれるようにします。プロファイルを文字コードの数だけ作る
iTermを開いている状態で
cmd + ,でPreferencesを開き、
+ボタンから必要な数だけプロファイルを作成します。
名前は文字コード名がよいでしょう。
コマンドでプロファイルを切り替える
$ echo '\033]1337;SetProfile=プロファイル名\a'で任意のプロファイルに切り替えることができます。utf-8に切り替えてみる
$ echo '\033]1337;SetProfile=utf-8\a' $ cat test.txt aaa あああeucに切り替えてみる
$ echo '\033]1337;SetProfile=euc\a' $ cat test.txt aaa 秧???????参考:https://www.iterm2.com/documentation-escape-codes.html
シェルに切り替えコマンドを登録する
毎回コマンドを打つのは面倒なのでbash_profileや.zshrcに登録しておきます。
zshrcを更新後、
source .zshrcコマンドやログインし直して設定値を読み込み直します。alias utf="echo -e '\033]1337;SetProfile=utf-8\aencording:utf-8'" alias euc="echo -e '\033]1337;SetProfile=euc\aencourding:euc'"簡単に文字コードを切り替えることができるようになりました。
$ utf encoding:utf-8 $ cat test.txt aaa あああ$ euc encoding:euc $ cat test.txt aaa 秧???????
- 投稿日:2019-03-23T21:38:14+09:00
 
【vim入門】vimtutorはいいぞ
先日Twitterで「Lpic持ってるのにvim(vi)が使えない人がいて困った」という内容のツイートを見ました。
最初はそんな事あるのか?と思ったんですが、実機操作はせずに完全にping-t等で問題を丸暗記して受験に受かったらそうなるか…
と納得しました(偉そうな事を言っていますが僕はLpic-1すら持っていません)※因みにLpic-1では「103.8基本的なファイル編集」の部分でviによるファイル操作を学習することになります。
LPIの公式HP↓
https://www.lpi.org/ja/our-certifications/exam-101-objectives個人的にですが、基本的なvimの習得という観点で言うならLpicよりも"vimtutor"コマンドで学習するのが
学習コストも少なく学べるのではないかと思ったので、"vimtutor"について紹介記事を書く事にしました。対象者
・vimなんもわからん
・lpicの学習でviは勉強したけどもう忘れた
・vimの学習したいけど文字読むだけだとつまらん前提条件
PC上(Linux)でvimが使える状態である事。
やり方
$ vimtutorこのコマンドを打つだけで以下のようなチュートリアルが起動します。
=============================================================================== = V I M 教 本 (チュートリアル) へ よ う こ そ - Version 1.7 = =============================================================================== Vim は、このチュートリアルで説明するには多すぎる程のコマンドを備えた非常 に強力なエディターです。このチュートリアルは、あなたが Vim を万能エディ ターとして使いこなせるようになるのに十分なコマンドについて説明をするよう になっています。 チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ け時間を使うのかにもよりますが、およそ25から30分です。 ATTENTION: 以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前 にコピーを作成しましょう("vimtutor"したならば、既にコピーされています)。 このチュートリアルが、使うことで覚えられる仕組みになっていることを、心し ておかなければなりません。正しく学習するにはコマンドを実際に試さなければ ならないのです。文章を読んだだけならば、きっと忘れてしまいます! さぁ、Capsロック(Shift-Lock)キーが押されていないことを確認した後、画面に レッスン1.1 が全部表示されるところまで、j キーを押してカーソルを移動しま しょう。大体30分~45分くらいで全部終わると思います。
カーソルの移動やvimの起動、終了など、本当に初歩の部分から教えてくれるので
このチュートリアルを1週間ほど毎日実施していれば、かなりvimの操作は上達するはずです。
※少なくとも現場でvi(vim)の使い方が分からなくて怒られたり、マウントを取られたりすることは無くなると思います。最後に
これはvimの操作に限った事ではないのですが、何か技術的な勉強する際には文章を読むだけではなく、
実際に手を動かしてやる方が圧倒的に効率が良いです。
実際に手を動かして、苦労しながらやった事の方が記憶には残りやすいですね。このチュートリアルが、使うことで覚えられる仕組みになっていることを、心し ておかなければなりません。正しく学習するにはコマンドを実際に試さなければ ならないのです。文章を読んだだけならば、きっと忘れてしまいます!vimtutorのATTENTIONからの抜粋、めっちゃ良い事言ってますね
- 投稿日:2019-03-23T21:38:14+09:00
 
vimtutorはいいぞ
先日Twitterで「Lpic持ってるのにvim(vi)が使えない人がいて困った」という内容のツイートを見ました。
最初はそんな事あるのか?と思ったんですが、実機操作はせずに完全にping-t等で問題を丸暗記して受験に受かったらそうなるか…
と納得しました(偉そうな事を言っていますが僕はLpic-1すら持っていません)※因みにLpic-1では「103.8基本的なファイル編集」の部分でviによるファイル操作を学習することになります。
LPIの公式HP↓
https://www.lpi.org/ja/our-certifications/exam-101-objectives個人的にですが、基本的なvimの習得という観点で言うならLpicよりも"vimtutor"コマンドで学習するのが
学習コストも少なく学べるのではないかと思ったので、"vimtutor"について紹介記事を書く事にしました。対象者
・vimなんもわからん
・lpicの学習でviは勉強したけどもう忘れた
・vimの学習したいけど文字読むだけだとつまらん前提条件
PC上(Linux)でvimが使える状態である事。
やり方
$ vimtutorこのコマンドを打つだけで以下のようなチュートリアルが起動します。
=============================================================================== = V I M 教 本 (チュートリアル) へ よ う こ そ - Version 1.7 = =============================================================================== Vim は、このチュートリアルで説明するには多すぎる程のコマンドを備えた非常 に強力なエディターです。このチュートリアルは、あなたが Vim を万能エディ ターとして使いこなせるようになるのに十分なコマンドについて説明をするよう になっています。 チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ け時間を使うのかにもよりますが、およそ25から30分です。 ATTENTION: 以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前 にコピーを作成しましょう("vimtutor"したならば、既にコピーされています)。 このチュートリアルが、使うことで覚えられる仕組みになっていることを、心し ておかなければなりません。正しく学習するにはコマンドを実際に試さなければ ならないのです。文章を読んだだけならば、きっと忘れてしまいます! さぁ、Capsロック(Shift-Lock)キーが押されていないことを確認した後、画面に レッスン1.1 が全部表示されるところまで、j キーを押してカーソルを移動しま しょう。大体30分~45分くらいで全部終わると思います。
カーソルの移動やvimの起動、終了など、本当に初歩の部分から教えてくれるので
このチュートリアルを1週間ほど毎日実施していれば、かなりvimの操作は上達するはずです。
※少なくとも現場でvi(vim)の使い方が分からなくて怒られたり、マウントを取られたりすることは無くなると思います。最後に
これはvimの操作に限った事ではないのですが、何か技術的な勉強する際には文章を読むだけではなく、
実際に手を動かしてやる方が圧倒的に効率が良いです。
実際に手を動かして、苦労しながらやった事の方が記憶には残りやすいですね。このチュートリアルが、使うことで覚えられる仕組みになっていることを、心し ておかなければなりません。正しく学習するにはコマンドを実際に試さなければ ならないのです。文章を読んだだけならば、きっと忘れてしまいます!vimtutorのATTENTIONからの抜粋、めっちゃ良い事言ってますね
- 投稿日:2019-03-23T21:25:45+09:00
 
コマンドラインのショートカット
コマンド 内容 Ctrl+b 後方に一文字分移動する Ctrl+f 前方に一文字分移動する Ctrl+a 行頭に移動する Ctrl+e 行末に移動する Alt+b 後方に単語一つ分移動する Alt+f 前方に単語一つ分移動する BS, Ctrl+h カーソル位置の後方に一文字削除する Delete, Ctrl+d カーソルの位置の一文字を削除する Ctrl+w 後方にスペース区切りで1単語ぶんを削除する Ctrl+k カーソル位置から行末までを削除する Ctrl+u カーソル位置から行頭までを削除する Ctrl+y 最後に削除した内容を挿入する Ctrl+s 画面表示をロックする Ctrl+q 画面表示のロックを解除する Ctrl+l 画面を消去する Ctrl+p, ↑ 一つ前のコマンド履歴に移動する Ctrl+n, ↓ 次のコマンド履歴に移動する Ctrl+r 履歴をさかのぼってインクリメンタル検索する (インクリメンタル検索時)文字の入力 検索語を追加して再検索 (インクリメンタル検索時)Ctrl+r 一つ前の検索結果へ移動 (インクリメンタル検索時)Enter 現在の検索結果をそのまま実行 (インクリメンタル検索時)Esc 現在の検索結果を表示したまま、コマンドラインに戻る (インクリメンタル検索時)Ctrl+g 検索結果を破棄し、プロンプトに戻る 
- 投稿日:2019-03-23T16:48:34+09:00
 
Rでdhcpd.leasesを読み込んでみた
昔rubyで作った dhcpd.leases を読み込むスクリプトを眺めていたところ「そういえばRでこの手のCSVとかじゃないファイルを処理したことないな」と意味もなく思ったので、じゃあ試しに作ってみよっかていう話です。
使用用途は全く考えていないです。dhcpサーバーにRがインストールされているなんていう場面は想像できないので、
scpコマンドやrsyncコマンドでローカルにして処理するって話になるかなと思うんですが、それでも何に使うんだ?ってな話です。dhcpd.leasesの中身と攻略方法
dhcpd.leasesはの中身は以下のようなフォーマットとなります。これをどうやって変換しようかという話なんですが、今回は「{}」で囲まれているからというか私が好きだからという理由でJSON形式に整形してパースすることとしました。JSON形式のパースはライブラリまかせなので dhcpd.leases をJSON形式に整形するスクリプトを書けば良いという話になります。
dhcpd.leaseslease 192.168.0.126 { starts 5 2019/02/01 09:31:09; ends 6 2019/02/02 01:31:09; binding state active; next binding state free; hardware ethernet b8:08:cf:e4:11:11; uid "\001\270\010\317\344\021\021"; client-hostname "foo"; } lease 192.168.0.130 { starts 5 2019/02/01 05:40:01; ends 6 2019/02/02 03:40:01; binding state active; next binding state free; hardware ethernet 9c:e3:3f:b5:22:22; uid "\001\234\343?\265\042\042"; client-hostname "bar"; }作ってみたスクリプト
スクリプトの流れとしては攻略方法のとおりで、 dhcpd.leases を読み込んでJSON形式に整形して、それを
fromJSON()でパースして data frame形式に変換するという流れです。
ある程度使ったこのある書き方で書きたいなと思ったので、data.tableとかとか、そのライブラリ使わなくてもできるんじゃない?っていうライブラリも私好みで使いまくっています。
それと「binding state」みたいにスペースが入っていたりすると扱いにくかったので「state」みたいに名前を変えていたり、ターゲットを「starts」「ends」「binding state」「hardware」「client-hostname」のみを絞っちゃったりしています。dhcpd_leases.Rlibrary(dplyr) library(stringr) library(data.table) library(lubridate) library(jsonlite) dhcpd_leases <- fread("dhcpd.leases", sep=NULL, header=FALSE, data.table=FALSE, col.names="t") %>% mutate(t=str_trim(t)) %>% mutate(t=str_replace(t,'^(starts|ends) [0-9] (.+);', '"\\1":"\\2"')) %>% #対象とする行の末尾は;を入れない mutate(t=str_replace(t,'^binding state (.+);', '"state":"\\1"')) %>% mutate(t=str_replace(t,'^hardware ethernet (.+);', '"ethernet":"\\1"')) %>% mutate(t=str_replace(t,'^client-hostname (.+);', '"hostname":\\1')) %>% mutate(t=str_replace(t,'^lease ([0-9.]+) \\{', '{"ip":"\\1"')) %>% filter(!str_detect(t,";$")) %>% #今回対象としない行(末尾が;)は削除 filter(!str_detect(t,"^#")) %>% filter(!str_detect(t,"^$")) %>% `[[`("t") %>% str_flatten(",") %>% str_replace_all(",\\}", '}') %>% str_replace("\\},$", '}') %>% sprintf("[%s]", .) %>% fromJSON() %>% mutate(starts=parse_date_time(starts,"%y/%m/%d %H:%M:%S",tz="GMT")) %>% mutate(ends=parse_date_time(ends,"%y/%m/%d %H:%M:%S",tz="GMT")) %>% mutate(starts=with_tz(starts,"Asia/Tokyo")) %>% #タイムゾーンを日本に変更 mutate(ends=with_tz(ends,"Asia/Tokyo"))実行結果
変換後は以下のような感じとなります。
実行結果> # テスト(内容確認) > options(width=120) > dhcpd_leases %>% head ip starts ends state ethernet hostname 1 192.168.0.126 2019-02-01 18:31:09 2019-02-02 10:31:09 active b8:08:cf:e4:11:11 foo 2 192.168.0.130 2019-02-01 14:40:01 2019-02-02 12:40:01 active 9c:e3:3f:b5:22:22 bar 3 192.168.0.250 2018-05-24 11:36:50 2018-05-25 03:36:50 free 4c:57:ca:18:cc:cc <NA> 4 192.168.0.146 2019-02-01 18:16:56 2019-02-02 10:16:56 active 00:1e:33:28:aa:aa baz 5 192.168.0.145 2019-02-01 18:19:34 2019-02-02 10:19:34 active 9c:b7:0d:72:dd:dd qux元のデータは以下のような感じ
dhcpd.leaseslease 192.168.0.126 { starts 5 2019/02/01 09:31:09; ends 6 2019/02/02 01:31:09; binding state active; next binding state free; hardware ethernet b8:08:cf:e4:11:11; uid "\001\270\010\317\344\021\021"; client-hostname "foo"; } lease 192.168.0.130 { starts 5 2019/02/01 05:40:01; ends 6 2019/02/02 03:40:01; binding state active; next binding state free; hardware ethernet 9c:e3:3f:b5:22:22; uid "\001\234\343?\265\042\042"; client-hostname "bar"; } lease 192.168.0.250 { starts 4 2018/05/24 02:36:50; ends 4 2018/05/24 18:36:50; tstp 4 2018/05/24 18:36:50; binding state free; hardware ethernet 4c:57:ca:18:cc:cc; uid "\001LW\312\030\314\314"; } lease 192.168.0.146 { starts 5 2019/02/01 09:16:56; ends 6 2019/02/02 01:16:56; binding state active; next binding state free; hardware ethernet 00:1e:33:28:aa:aa; uid "\001\000\0363(\252\252"; client-hostname "baz"; } lease 192.168.0.145 { starts 5 2019/02/01 09:19:34; ends 6 2019/02/02 01:19:34; binding state active; next binding state free; hardware ethernet 9c:b7:0d:72:dd:dd; uid "\001\234\267\015r\335\335"; client-hostname "qux"; }思ったよりもするするっと書けた
最初はどうかなーって思っていたんですが思ってた以上に気持よく書くことができました。あと試しに10万行くらいのデータを作って読み込ませてみましたがストレスなく動きましたので速度的にも問題なさそうです。
R使う機会増やしてみようかなって思う今日このごろです。
- 投稿日:2019-03-23T16:32:52+09:00
 
【root on ZFS】Ubuntu 18.04.2 LTSをLet's noteにインストールする
この記事は何か
Ubuntu 18.04.2のrootをZFS+LUKS上に構築した実録である。
ZFSに至るまで
個人的に最近Linux熱が高まっているのだが、筆者の萌えポイントはZFSである。Solarisに実装された時には非常に興奮したことを覚えているが、当時悩んだ末に、グラフィック性能が必要だったため結局SUNではなくSilicon GraphicsのIndigoを購入した。
そんなわけでZFSを利用する機会は失ったのだが、つい最近、LinuxのカーネルモジュールとしてZFSが使えるようになっていることを知った。
参考にした記事
この記事は以下のドキュメントを参考に筆者が実際にノートPCにインストールした実録記事である。タイトルにあるとおりroot、すなわちシステム全体をZFSに乗せることを目的としている。
またLUKS(Linux Unified Key Setup)を組み合わせてファイルシステムを暗号化している。上記記事は英語である上に非暗号化、暗号化の両方について説明しているので、ストレートに暗号化ZFSのHOWTOが、それも日本語で必要な人に参考としてもらえればありがたい。
環境及び前提条件
この記事は全てのPCへのインストール方法を記述したものでは無い。筆者の環境及びインストール要件、前提とした条件を整理する。
インストール環境
インストールした環境は以下のようなものである。
Item Configuration PC Let's note CF-SZ6 CPU Intel Core™ i5-7300U vPro™ 2.60GHz Memory 8GB LPDDR3 SDRAM Disk 256GB SSD System Software UEFI OS Ubuntu 18.04.2 LTS Desktop Encryption LUKS インストールの前提条件
- ディスク(SSD)全体をZFSでフォーマットする。デュアルブートは一切考慮していない。
 - ディスクは1台でミラーリングやRAIDZは考慮していない。
 - 起動OSはUbuntuのDesktop版を用いる。Server版ではないので注意のこと。
 暗号化について
オリジナルのZFSはそれ自体に暗号化機能を含んでいるが、Linux版はまだ暗号化機能は実装途中で正式版としてはリリースされていない。
このため本記事ではLinuxで広く用いられているLUKSを利用してディスク全体を暗号化した。このチュートリアルでは、ブートローダー、カーネル、initrd以外の全て、すなわちOS、スワップ、ホームディレクトリなど全てを暗号化する。
なおLUKSでは起動時に復号のためのパスワードを求められるため、コンソールを操作できないリモート環境では利用できない。インストール手順
インストール環境の準備
1.1. UbuntuのLiveイメージからブートする。筆者はUSBメモリにインストールしたイメージから起動した。メニューが現れたらインストールではなくTry Ubuntuを選択する。デスクトップが起動したらCtrl-Alt-Tを押下してターミナルを開く。
1.2. リポジトリを設定する。
$ sudo apt-add-repository universe $ sudo apt update1.3. 他の端末からインストール操作を行うためSSHのインストールを行う。
$ passwd $ sudo apt install --yes openssh-serverコンソールで
# ip a | grep inetとしてIPアドレスを調べ、他の端末から# ssh ubuntu@IPADDRESSで接続する。1.4. ルートになってLive環境にZFS関連のツールのインストールを行う。
$ sudo -i # apt install --yes debootstrap gdisk zfs-initramfsディスクのフォーマット
2.1. ディスクが再利用の場合には既存のパーティションを削除しておく。
# sgdisk --zap-all /dev/sda2.2. ディスクのUUIDを調べ、環境変数にセットする。
# ls -la /dev/disk/by-id | grep sda # export DISK=ata-SAMSUNG_MZNLN256HMHQ-XXXXXX2.3. パーティションを切る。
# sgdisk -n2:1M:+512M -t2:EF00 /dev/disk/by-id/$DISK # sgdisk -n3:0:+512M -t3:BF01 /dev/disk/by-id/$DISK # sgdisk -n4:0:0 -t4:8300 /dev/disk/by-id/$DISK2.4. boot用のプールを作成する。
# zpool create -f -o ashift=12 -d \ -o feature@async_destroy=enabled \ -o feature@bookmarks=enabled \ -o feature@embedded_data=enabled \ -o feature@empty_bpobj=enabled \ -o feature@enabled_txg=enabled \ -o feature@extensible_dataset=enabled \ -o feature@filesystem_limits=enabled \ -o feature@hole_birth=enabled \ -o feature@large_blocks=enabled \ -o feature@lz4_compress=enabled \ -o feature@spacemap_histogram=enabled \ -o feature@userobj_accounting=enabled \ -O acltype=posixacl -O canmount=off -O compression=lz4 -O devices=off \ -O normalization=formD -O relatime=on -O xattr=sa \ -O mountpoint=/ -R /mnt \ bpool /dev/disk/by-id/$DISK-part32.5. root用のプールを作成する。
# cryptsetup luksFormat -c aes-xts-plain64 -s 256 -h sha256 \ /dev/disk/by-id/$DISK-part4 # cryptsetup luksOpen /dev/disk/by-id/$DISK-part4 luks1 # zpool create -o ashift=12 \ -O acltype=posixacl -O canmount=off -O compression=lz4 \ -O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa \ -O mountpoint=/ -R /mnt \ rpool /dev/mapper/luks1システムのインストール
3.1. コンテナとなるデータセットを作成する。
# zfs create -o canmount=off -o mountpoint=none rpool/ROOT # zfs create -o canmount=off -o mountpoint=none bpool/BOOT3.2. ルートとブートファイルシステムのためのデータセットを作成する。
# zfs create -o canmount=noauto -o mountpoint=/ rpool/ROOT/ubuntu # zfs mount rpool/ROOT/ubuntu # zfs create -o canmount=noauto -o mountpoint=/boot bpool/BOOT/ubuntu # zfs mount bpool/BOOT/ubuntu3.3. 各ディレクトリ用のデータセットを作成する。
# zfs create rpool/home # zfs create -o mountpoint=/root rpool/home/root # zfs create -o canmount=off rpool/var # zfs create -o canmount=off rpool/var/lib # zfs create rpool/var/log # zfs create rpool/var/spoolスナップショット作成から除外するデータセットの作成。
# zfs create -o com.sun:auto-snapshot=false rpool/var/cache # zfs create -o com.sun:auto-snapshot=false rpool/var/tmp # chmod 1777 /mnt/var/tmp3.4. 最小システムをインストールする。
# debootstrap bionic /mnt # zfs set devices=off rpoolシステムの設定
4.1. ホストネームを設定する。HOSTNAME、FQDNはそれぞれホストネーム、ドメインネームとする。
# echo $HOSTNAME > /mnt/etc/hostname # echo "127.0.1.1 $FQDN $HOSTNAME" >> /mnt/etc/hosts4.2. ネットワークインタフェースの設定を行う。
# ip aとしてインタフェース名を調べる。以下、INTERFACEは調べたインタフェース名とする。# nano /etc/netplan/01-netcfg.yaml network: version: 2 ethernets: $INTERFACE: dhcp4: true4.3. パッケージ取得のソースリストを設定する。
# nano /mnt/etc/apt/sources.list deb http://archive.ubuntu.com/ubuntu bionic main universe deb-src http://archive.ubuntu.com/ubuntu bionic main universe deb http://security.ubuntu.com/ubuntu bionic-security main universe deb-src http://security.ubuntu.com/ubuntu bionic-security main universe deb http://archive.ubuntu.com/ubuntu bionic-updates main universe deb-src http://archive.ubuntu.com/ubuntu bionic-updates main universe4.4. ライブ環境から新しいシステムの環境へ移行する。
# mount --rbind /dev /mnt/dev # mount --rbind /proc /mnt/proc # mount --rbind /sys /mnt/sys # chroot /mnt /bin/bash --login4.5. 基本的な環境を設定する。
# ln -s /proc/self/mounts /etc/mtab # apt update # dpkg-reconfigure locales # dpkg-reconfigure tzdata日本語ロケールを選択するにしても、必ず
en_US.UTF-8も選択する。
viは辛いのでnanoをインストールしておいた。# apt install --yes nano4.6. chrootした新しい環境にZFS関連のツールをインストールする。
# apt install --yes --no-install-recommends linux-image-generic # apt install --yes zfs-initramfs4.7. LUKSのセットアップを行う。
# apt install --yes cryptsetup # echo luks1 UUID=$(blkid -s UUID -o value \ /dev/disk/by-id/$DISK-part4) none \ luks,discard,initramfs > /etc/crypttab4.8. ブートローダーをインストールする。
# apt install dosfstools # mkdosfs -F 32 -s 1 -n EFI /dev/disk/by-id/$DISK-part2 # mkdir /boot/efi # echo PARTUUID=$(blkid -s PARTUUID -o value \ /dev/disk/by-id/$DISK-part2) \ /boot/efi vfat nofail,x-systemd.device-timeout=1 0 1 >> /etc/fstab # mount /boot/efi # apt install --yes grub-efi-amd64-signed shim-signed4.9. ルートパスワードを設定する。
passwd4.10. bpoolが常に読み込まれることを確実にする。
# cat >> /etc/systemd/system/zfs-import-bpool.service << EOF [Unit] DefaultDependencies=no Before=zfs-import-scan.service Before=zfs-import-cache.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/sbin/zpool import -N -o cachefile=none bpool [Install] WantedBy=zfs-import.target EOF # systemctl enable zfs-import-bpool.service4.11. tmpfs(RAMファイルシステム)を/tmpにマウントする。
# cp /usr/share/systemd/tmp.mount /etc/systemd/system/ # systemctl enable tmp.mountブートローダーのインストール
5.1. ZFSがブートシステムとして認識されていることを確認する。
# grub-probe /boot zfs5.2. initrdファイルをリフレッシュする。
# update-initramfs -u -k allこのときWARNINGがでるが、気にしなくて良い。
5.3. デバッグしやすくするためにGRUBの設定を変更する。
Set: GRUB_CMDLINE_LINUX="root=ZFS=rpool/ROOT/ubuntu" Comment out: GRUB_TIMEOUT_STYLE=hidden Set: GRUB_TIMEOUT=5 Below GRUB_TIMEOUT, add: GRUB_RECORDFAIL_TIMEOUT=5 Remove quiet and splash from: GRUB_CMDLINE_LINUX_DEFAULT Uncomment: GRUB_TERMINAL=console5.4. GRUBの設定をアップデートする。
# update-grub5.5. GRUBをインストールする。
# grub-install --target=x86_64-efi --efi-directory=/boot/efi \ --bootloader-id=ubuntu --recheck --no-floppy5.6. ZFSモジュールがインストールされていることを確認する。
ls /boot/grub/*/zfs.mod5.7. ファイルシステムのマウント順序を修正する。
# umount /boot/efi # zfs set mountpoint=legacy bpool/BOOT/ubuntu # echo bpool/BOOT/ubuntu /boot zfs \ nodev,relatime,x-systemd.requires=zfs-import-bpool.service 0 0 >> /etc/fstab # zfs set mountpoint=legacy rpool/var/log # echo rpool/var/log /var/log zfs nodev,relatime 0 0 >> /etc/fstab # zfs set mountpoint=legacy rpool/var/spool # echo rpool/var/spool /var/spool zfs nodev,relatime 0 0 >> /etc/fstab # zfs set mountpoint=legacy rpool/var/tmp # echo rpool/tmp /tmp zfs nodev,relatime 0 0 >> /etc/fstab最初の起動
6.1. これまでの状態のスナップショットを取っておく。
# zfs snapshot bpool/BOOT/ubuntu@install # zfs snapshot rpool/ROOT/ubuntu@install6.2. chroot環境から抜ける。
# exit6.3. 全てのファイルシステムをアンマウントする。
# mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -i{} umount -lf {} # zpool export -a6.4. リブート!
# reboot A dependency job for reboot.target failed. See 'journalctl -xe' for details.ところが筆者の環境では上のようなメッセージが表示されリブートが止まってしまった。
journalctl -xeで詳細を見てもよくわからなかったので、電源長押しで強制的にシャットダウンを行ったが何事もなくブートしてくれた。6.5. LUKSのパスワードを入力して起動後、rootでログインする。
6.6. ユーザーアカウントを作成する。$YOURUSERNAMEはアカウント名である。
# zfs create rpool/home/$YOURUSERNAME # adduser $YOURUSERNAME # cp -a /etc/skel/.[!.]* /home/$YOURUSERNAME # chown -R $YOURUSERNAME:$YOURUSERNAME /home/$YOURUSERNAME6.7. アカウントを管理者グループに追加する。グループはお好みで。
# usermod -a -G adm,cdrom,dip,lpadmin,plugdev,sambashare,sudo YOURUSERNAMEスワップの設定
7.1. スワップのためのデータセットを作成する。
# zfs create -V 4G -b $(getconf PAGESIZE) -o compression=zle \ -o logbias=throughput -o sync=always \ -o primarycache=metadata -o secondarycache=none \ -o com.sun:auto-snapshot=false rpool/swap7.2. スワップを設定する。
# mkswap -f /dev/zvol/rpool/swap # echo /dev/zvol/rpool/swap none swap defaults 0 0 >> /etc/fstab # echo RESUME=none > /etc/initramfs-tools/conf.d/resume7.3. スワップを有効化する。
# swapon -av7.4. 設定したZFSはファイルシステムそのものが圧縮を行っているため、logrotateが圧縮を行わないように設定する。
# for file in /etc/logrotate.d/* ; do if grep -Eq "(^|[^#y])compress" "$file" ; then sed -i -r "s/(^|[^#y])(compress)/\1#\2/" "$file" fi done7.5. リブートする。
# reboot最後のクリーンアップ
8.1. インストール時に作成したスナップショットを削除する。
$ sudo zfs destroy bpool/BOOT/ubuntu@install $ sudo zfs destroy rpool/ROOT/ubuntu@install8.2. rootのパスワードを無効化する。
sudo usermod -p '*' root8.3. GRUBのグラフィカルインタフェースを有効にする。
$ sudo nano /etc/default/grub Uncomment: GRUB_TIMEOUT_STYLE=hidden Add quiet and splash to: GRUB_CMDLINE_LINUX_DEFAULT Comment out: GRUB_TERMINAL=console Save and quit. $ sudo update-grubおわりに
とても長い道のりだったがこれで最小構成のubuntu on ZFSがインストールできたことになる。あとはサーバー系のソフトウェアを入れるなり、デスクトップ環境を構築するなり、各自でカスタマイズして欲しい。
- 投稿日:2019-03-23T11:52:05+09:00
 
【勝手に毎日投稿祭り】物理サーバなくてもBIOS設定をいじってサーバを動かすことできます
※1週間限定で、「勝手に毎日投稿祭り」と題して毎日投稿しています。
ぜひぜひ、皆さんも便乗して下さい。サーバの電源投入は自動化出来るのか?
最近、調査した問題で、電源を落としても勝手にまた起動しているサーバがあり、サーバの自動電源ONの仕組みってどう設定がされているのかを調べる機会がありました。
電源が落ちてたら、いくらcronでスケジューリングしても、実行される事はないし、外部機器とかを使わないと自動で電源がつくことはないと考えていました。が、しかし!
自動化は、サーバだけで実現できることに気づきました!
方法としては、BIOSを使用します。
BIOSの種類によって、Auto Power Onで設定したり、Power On By RTC Alarmを使ったりと設定方法は、多々ありますが、BIOSに電源設定機能が備わっている場合は、設定できます(私のPCは出来ませんでしたが、Windows等でも出来るようです)。ですが、サーバのBIOSって敷居が高いというか物理のサーバを使わなくちゃなかなか操作できないから覚えられないって思いませんか?
実は、仮想サーバでもBIOSはいじれました!
VMwareを使って仮想サーバのBIOS表示する場合は、以下のようにします。仮想マシン起動時にF2キーを押下
vmwareマークが出ている間に押下しなくては、いけないのだが、この時間が、非常に短く、上手くできない場合は、仮想マシンの
[マシン名].vmxファイルに以下を追加すれば、BIOSに入れる時間を延ばすことができる。
bios.bootDelay="10000"←例では、10秒に設定。これで、仮想サーバしかいじれない環境でもBIOSをいじってサーバを動かしてみることが出来る。
是非、使ってみて下さい。
- 投稿日:2019-03-23T11:35:41+09:00
 
無線網(Wi-Fi) 空中線(Antenna)(101) FullMAC/SoftMAC
Linux Wi-FiドライバのFullMAC/SoftMAC
https://qiita.com/eggman/items/461cefea5ba254cbbf7dDo Access points use softMAC or hardMAC?
https://stackoverflow.com/questions/28343384/do-access-points-use-softmac-or-hardmacThe term 'SoftMAC' refers to a wireless network interface device (WNIC) which does not implement the MAC layer in hardware, rather it expects the drivers to implement the MAC layer.
'HardMAC' (also called 'FullMAC') describes a WNIC which implements the MAC layer in hardware.
The advantages of SoftMAC are:
Potentially lower hardware costs
Possibility to upgrade to newer standards by updating the driver only
Possibility to correct faults in the MAC implementation by updating the driver onlyhttps://wireless.wiki.kernel.org/en/developers/documentation/glossary
FullMACFullMAC is a term used to describe a type of wireless card where the MLME is managed in hardware. You would not use mac80211 to write a FullMAC wireless driver.
SoftMAC
SoftMAC is a term used to describe a type of WNIC where the MLME is expected to be managed in software. mac80211 is a driver API for SoftMAC WNIC, for example.
About mac80211
https://wireless.wiki.kernel.org/en/developers/documentation/mac80211A Modular, Flexible and Virtualizable Framework for IEEE 802.11
Pablo SALVADOR, Stefano PARIS, Claudio PISA, Paul PATRAS, Yan
GRUNENBERGER, Xavier PEREZ-COSTA, Janusz GOZDECKI, 2012
http://homepages.inf.ed.ac.uk/ppatras/pub/funems12.pdfReferences
[1] “IEEE Standard for Information Technology-Telecommunications and Information Exchange Between Systems-Local and Metropolitan Area Networks-Specific Requirements - Part 11: Wireless LAN MAC and Physical Layer (PHY) Specifications,” IEEE Std 802.11-2007 (Revision of IEEE Std 802.11-1999).
[2] Linuxkernelmac80211frameworkforwirelessdevicedriver. http://linuxwireless.org/en/developers/Documentation/mac80211.
[3] FLAVIA Project (Flexible Architecture for Internet Access). http://www.ict-flavia.eu/.
[4] “IEEE Standard for Information technology–Telecommunications and information exchange between systems–Local and metropolitan area networks–Specific requirements Part 11: Wireless LAN MAC and PHY Specifications Amendment 5: Enhancements for Higher Throughput,” IEEE Std 802.11n-2009.
[5] G.Bhanage,D.Vete,I.Seskar,andD.Raychaudhuri,“SplitAP:LeveragingWirelessNetworkVirtualiza- tion for Flexible Sharing of WLANs,” in IEEE GLOBECOM, pp. 1 –6, dec. 2010.
[6] T. Hamaguchi, T. Komata, T. Nagai, and H. Shigeno, “A Framework of Better Deployment for WLAN Access Point Using Virtualization Technique,” in IEEE WAINA, pp. 968 –973, Apr. 2010.
[7] L. Xia, S. Kumar, X. Yang, P. Gopalakrishnan, Y. Liu, S. Schoenberg, and X. Guo, “Virtual WiFi: bring virtualization from wired to wireless,” in Proc. of the 7th ACM SIGPLAN/SIGOPS, VEE ’11, (Newport Beach, California, USA), pp. 181–192, 2011.
[8] G.AljabariandE.Eren,“VirtualizationofwirelessLANinfrastructures,”inIEEEIDAACS,vol.2,pp.837 –841, Sept. 2011.
[9] D.Camps-Mur,X.Pe ́rez-Costa,andS.Sallent-Ribes,“Designingenergyefficientaccesspointswithwi-fi direct,” Elsevier Comput. Netw., vol. 55, pp. 2838–2855, Sept. 2011.
[10] K.Huang,K.R.Duffy,andD.Malone,“H-RCA:802.11Collision-awareRateControl,”Technicalreport, Hamilton Institute, 2011.Wiki
Wireless network interface controller
https://en.wikipedia.org/wiki/Wireless_network_interface_controllerComparison of open-source wireless drivers
https://en.wikipedia.org/wiki/Comparison_of_open-source_wireless_driversLinux
https://github.com/torvalds/linux/tree/v5.0
driver
Realtek https://github.com/lwfinger/rtlwifi_new
rtl8188ee, rtl8192c, rtl8192ce, rtl8192cu, rtl8192de, rtl8192ee, rtl8192se, rtl8723ae, rtl8723be, rtl8723com, rtl8723de, rtl8821ae, rtl8822beMediatek (from Ralink)
https://github.com/terence-deng/mt7601u
- 投稿日:2019-03-23T01:04:18+09:00
 
CentOSにmysql 5.7をインストールする
インストール。
$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el6-8.noarch.rpm $ sudo yum install mysql mysql-devel mysql-server mysql-utilitiesmysqlを起動。
$ sudo service mysqld start初回パスワードを確認。
$ grep 'temporary password' /var/log/mysqld.log
2019-03-22T15:55:51.996547Z 1 [Note] A temporary password is generated for root@localhost: O=XXXXXXXXX
初回パスワードは
XXXXXXXXXだとわかる。初期設定を行う。
$ mysql_secure_installation指示に従いパスワードと初期設定を行って終了。
念の為mysqlにrootでログインできるか確認。$ mysql -uroot -p先程設定したパスワードできたらOK。
- 投稿日:2019-03-23T00:18:42+09:00
 
CentOSでnginxを起動する
まずはインストール。
$ sudo yum install nginx確認。
$ nginx -v nginx version: nginx/1.10.2少しバージョンが古いけど一旦これでOKとする。
起動。$ sudo nginx80ポートを開ける。
$ sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPTを追記する。
iptablesを再起動する。$ sudo service iptables restartブラウザでサーバのIPを叩いてみる。
成功。
- 投稿日:2019-03-23T00:18:42+09:00
 
CentOSでnginxをインストールして起動する
まずはインストール。
$ sudo yum install nginx確認。
$ nginx -v nginx version: nginx/1.10.2少しバージョンが古いけど一旦これでOKとする。
起動。$ sudo nginx80ポートを開ける。
$ sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPTを追記する。
iptablesを再起動する。$ sudo service iptables restartブラウザでサーバのIPを叩いてみる。
成功。





