20190324のLinuxに関する記事は4件です。

【勝手に毎日投稿祭り】スイッチングハブを勢いで購入したので、物理サーバとWindows端末の通信に使ってみた

※1週間限定で、「勝手に毎日投稿祭り」と題して毎日投稿しています。
ぜひぜひ、皆さんも便乗して下さい。

スイッチングハブを使ったことありますか?

DSC_0415.JPG

私は、スイッチングハブやルータが、業務で使われているものは見てきたが、自分で設定をしたり、使ったことはない。
家庭にあるルータも業者が設定をしてから自分で何かいじることはなかった。ルーティングとかの勉強はしてもそれを活かせる実践の場がなかったのだ。
1189863.jpg

先日、夜勤作業があった帰りにECサイトを見ていたら、1000円程で手に入るのが分かり、夜勤明けでイケイケな気分だったこともあり、即購入ボタンを押していた。

「買ってしまった」

「もったいないし、ちゃんと使わなあかんやん」

と、いうことで特に下調べとかせずに買ってしまったスイッチングハブを使ってみることにした。
まず、開封すると説明書があった。

「ふむふむ、装置の名称ね、設置場所の注意点ね、接続できないときの確認ポイントね・・・、って後はないんかい!?」

操作説明とかあるかと思ったら、特に使い方の説明はない。しょうがないので、とりあえず、使ってみることにした。
思い付きで、買っていた為、LANケーブルも一本しかなく、先ほど買い足してとりあえず、こんな風にしてみた。
DSC_0417.JPG

配線の汚さは見なかったことにしてください。
今回は、物理サーバ(CentOS6.9)とPC端末(Windows)を繋いで、以下のように接続して使用します。
Image from Gyazo

まずは、同じネットワークで繋がるように、CentOS、Windowsそれぞれに以下のように設定をした。

CentOS6.9

/etc/sysconfig/network-scripts/ifcfg-eth0

ファイル内にIPADDRとNETMASKを追加し、ONBOOTとBOOTPROTOに関しては、以下のように書き換えた。

~略~
IPADDR=192.168.10.10
NETMASK=255.255.255.0

ONBOOT=yes
BOOTPROTO=none

ネットワークを再起動し、IPアドレスが適応されていることを確認

service network restart
ip addr

その他、vsftpdのパッケージをインストールし、サービスを立ち上げと自動起動設定をして、ファイアウォールとSElinuxの無効化を行った。

Windows

ネットワークとインターネットのネットワーク接続から、LANケーブルで使用するイーサネットのIPv4に設定する

Image from Gyazo

上記を右クリックし、プロパティをクリック→ネットワークプロトコルバージョン4(TCP/IPv4)をクリック→プロパティをクリック
すると、以下のようなダイアログが表示されるので、IPとサブネットマスクに設定を入力しOKボタンを押下
Image from Gyazo

では、これで使えるかやってみる

Windows側で、コマンドプロンプトを立ち上げ、まずは、pingが通るか

Image from Gyazo

通った!
次に、ftp接続ができるかやってみる。
Image from Gyazo
接続できた。
スイッチングハブ自体には、設定なく繋ぐだけで使えることが分かった。これから活用してみようと思う。
皆さんも、手ごろな価格で手に入るので、是非、試してみて下さい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macbook に Debian系 Linux をインストールした後にすること

はじめに

Macbook に Debian系 Linux をインストールした際に色々と初期設定することをここにまとめておく。
不定期に更新していくことになる。

iSight を使えるようにする

iSight は Macbook の内蔵カメラのこと。ファームウェアのコピーが必要となる。
なにか色々と問題がありそうなので、参考になるリンクを貼っておく。
「isight-firmware-tools」と言うツールを使う。

$ sudo apt-get install isight-firmware-tools

「isight-firmware-tools」を実行してファームウェアファイルを要求されるのでファイルの場所を指定すれば完了。
リブートすれば「iSight」が使えるようになる。cheeseなどのカメラツールで動作確認する。
「isight-firmware-tools」実行時にファームウェアが無いと「isight-firmware-tools」が実行できなくなる。そのためアンインストールしてから再インストールすることになる。

$ sudo apt-get remove --purge isight-firmware-tools
$ sudo apt-get install isight-firmware-tools

ファンクションキーのデフォルト設定

ファンクションキーが「fn」キーを押しながらでないときかない。
「fn」キーを押しながらでなくてもファンクションキーとして動作するようにする設定。

$ sudo su
# echo 2 > /sys/module/hid_apple/parameters/fnmode
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ディープラーニングを始めたいひとのLinux環境構築【Python×Keras】

LinuxでKerasを動かす際の環境構築手順をまとめました。
ディストリビューションはUbuntu 16.04 LTS、GPUで学習を行うことを想定しています。
なお、本投稿によって生じた全ての事象について私は責任を負いかねますので、必ず自己責任で行うようお願いします。
今回はこのような流れで進めていきます。

  • はじめに
  • Google Chromeをインストール
  • Visual Studio Codeをインストール
  • fishをインストール
  • Pythonをインストール
  • CUDAをインストール
  • Tensorflow/Kerasをインストール
  • Kerasでmnistの学習を実行
  • 終わりに

はじめに

まずはじめにターミナルを開き、下記を実行しておきます。

$ sudo apt update
$ sudo apt upgrade

Google Chromeをインストール

普通にChromeをインストールしようとすると「インストール中」でフリーズするので、まず下記のパッケージをインストールする必要があります。

$ sudo apt install libappindicator1

# ここでエラーが発生する場合は現状インストールされているChromeを削除します。
$ sudo apt remove google-chrome-stable

その後下記URLから.devのインストーラをダウンロード、インストールを行います。
https://www.google.co.jp/chrome/browser/desktop/

下記コマンドでChromeが起動します。

$ google-chrome

Visual Studio Codeをインストール

ソースコードを編集する際に必要なエディタをインストールします。
ソースコードエディタは種類が豊富で、PythonにはPyCharmという統合開発環境もありますが、個人的な好みと拡張機能の多さから今回はVisual Studio Code(以下VSCode)をインストールします。
Ubuntuを使っているので下記URLから.debのインストーラをダウンロード、インストールを行います。
https://code.visualstudio.com/download

その後下記コマンドでVSCodeが起動します。

$ code

また下記の基本的な拡張機能をインストールしておくと便利です。

  • Japanese Language Pack for VS Code
  • Python extension for Visual Studio Code

次にUbuntuはデフォルトのフォントが少々見づらいので、フォントをFira Codeに変更します。
下記Githubの指示に沿ってインストールしていけばいいのですが、今回は下部のManual Installation通りにインストールしました。
https://github.com/tonsky/FiraCode/wiki/Linux-instructions#installing-with-a-package-manager

まずシェルスクリプトを作ります。

$ touch download_and_install.sh

上記のファイルを開き、リンク先に書いてあるソースコードをコピペします。

download_and_install.sh
#!/usr/bin/env bash

fonts_dir="${HOME}/.local/share/fonts"
if [ ! -d "${fonts_dir}" ]; then
    echo "mkdir -p $fonts_dir"
    mkdir -p "${fonts_dir}"
else
    echo "Found fonts dir $fonts_dir"
fi

for type in Bold Light Medium Regular Retina; do
    file_path="${HOME}/.local/share/fonts/FiraCode-${type}.ttf"
    file_url="https://github.com/tonsky/FiraCode/blob/master/distr/ttf/FiraCode-${type}.ttf?raw=true"
    if [ ! -e "${file_path}" ]; then
        echo "wget -O $file_path $file_url"
        wget -O "${file_path}" "${file_url}"
    else
    echo "Found existing file $file_path"
    fi;
done

echo "fc-cache -f"
fc-cache -f

download_and_install.shを実行します。

$ sh download_and_install.sh

これでFira Codeをインストールできたので、VSCodeに適用します。
メニューの「Code」→「基本設定」→「設定」を開き、
Editor:Font Family"Fira Code Retina"
Editor: Font Ligatures有効にすればフォントが変更されます。
変更されないときはRetina部分をRegularや、Boldにしたりしてみてください。
あとはメニューの「Code」→「基本設定」→「配色テーマ」から、カラーテーマを好きなものに変更します。

最後に個人的に不便なプレビューモードを解除しておきます。
Workbench › Editor: Enable Previewと、
Workbench › Editor: Enable Preview From Quick Open無効にすればOKです。

fishをインストール

引き続きターミナルを操作していきますが、今回はshellにfishを使用します。
fishはfriendly interactive shellの略称とのことですが、特徴はやはりわかりやすさだと感じます。コマンドを途中まで入力するとその先をわかりやすく補完してくれたり、シンタックスハイライトによってそのコマンドが正しいのか間違っているのかということも示唆してくれます。
Ubuntuのデフォルトシェルはbashですが、一応現在のシェルを確認しておきます。現在のシェルはSHELLという環境変数に設定されているので$SHELLの中身を出力することで確認できます。

$ echo $SHELL
/bin/bash

それではデフォルトシェルをbashからfishに変更していきます。
まずはfishをインストールします。

$ sudo apt install fish

インストールができたら、fishのパスを確認します。

$ which fish
/usr/local/bin/fish

自分のマシン環境で使用可能なシェル一覧を確認します。

$ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/fish

末尾に上記fishのパスが追加されていたらOKですが、なければvimを使って手動で追記します。
下記コマンドでvimエディタを開いたらiでインサートモードに切り替え、テキストを入力します。
入力が終わったらescでノーマルモードに戻り、:wで上書き保存、:qでエディタを閉じます。

$ sudo vim /etc/shells

# vimがインストールされていなかったら下記を実行します。
$ sudo apt install vim

下記コマンドでデフォルトシェルをfishに変更します。

chsh -s /usr/local/bin/fish

これでデフォルトシェルを変更できました。パソコンを一度ログアウトするとこの変更が適用されます。
再ログインして変更が適用されたかを確認します。ターミナルを起動し、最初のメッセージがbashのときから変わってWelcome to fish, the friendly interactive shellと表示されていたらOKです。一応現在の環境変数も確認しておきます。

$ echo $SHELL
/usr/local/bin/fish

なお、現在使用しているシェルは下記方法でも確認できます。

cat /etc/passwd | grep username

デフォルトシェルはbashのままfishを起動したい場合は.bashrcの末尾にexec fishと記述しておけば同様にfishを使用できます。

Pythonをインストール

pyenvをインストール

pyenvはPythonのバージョン管理ができるコマンドラインツールです。
pyenvを使うことで例えばディレクトリAではPython2系を使う、ディレクトリBではPython3系を使うといったことが可能になります。
公式Github:https://github.com/pyenv/pyenv/wiki
まず上記Githubからpyenvをホームディレクトリにダウンロードします。

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv

# Gitがインストールされておらず、上記でエラーが起こる場合はまずこちらを実行します。
$ apt install git

次にダウンロードしたpyenvのパスを通します。
「パスを通す」とは「コマンド検索パスを追加する」ことだと考えるとわかりやすいです。コマンドライン上に入力したコマンド(例えばlscd)が正しく動作するのと同じように、コマンドライン上でpyenvと入力したらどのファイルを実行してねということを設定します。
現時点ではパスを通していないので下記を実行しても何も表示されません。

$ which pyenv

それではpyenvのパスを通します。今回はシェルスクリプトにfishを使っているので書き込み先は.config/fish/config.fishです。

$ echo 'set -x PATH $HOME/.pyenv/bin $PATH' >> .config/fish/config.fish
$ echo '. (pyenv init - | psub)' >> .config/fish/config.fish

書き込みを適用します。(下記コマンドではなくターミナルを再起動しても適用されます。)

$ source .config/fish/config.fish

これでpyenvのパスが通ったので、再度下記を実行するとパスが表示されます。

$ which pyenv
/home/username/.pyenv/bin

Anacondaをインストール

Anacondaは機械学習やデータサイエンスをするうえで必要になる色々なPythonパッケージをまとめて提供してくれます。
現時点ではどのバージョンもインストールしていないので下記を実行するとsystemというデフォルト項目だけが表示されます。

$ pyenv versions
* system

インストールできるバージョンを確認します。
下記を実行するとpyenvでインストールできるバージョンがリスト表示されます。

$ pyenv install -l

今回はanaconda3-5.2.0をインストールします。anacondaのバージョンが新しすぎるとtensorflowをインストールできないことがあるので注意してください。

$ pyenv install anaconda3-5.2.0

ここで再度下記を実行するとインストールできていることがわかります。
*が現在適用されているバージョンを示します。

$ pyenv versions
* system
  anaconda3-5.2.0 (set by /home/username/.pyenv/version)

pyenvではインストールしたバージョンを現在のアカウント全体で使うか、特定のディレクトリだけで使うかを指定することができます。今回はanaconda3-5.2.0をアカウント全体に適用します。

$ pyenv global anaconda3-5.2.0

下記を実行すると*が移動していることがわかります。

$ pyenv versions
  system
* anaconda3-5.2.0 (set by /home/username/.pyenv/version)

CUDAをインストール

CUDAはGPUを使って学習を行う際に必要になります。
まず公開鍵を取得します。

$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub

続いてパッケージをダウンロードします。

$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.2.88-1_amd64.deb

ダウンロードしたパッケージをインストールします。

$ sudo dpkg -i cuda-repo-ubuntu1604_9.2.88-1_amd64.deb

APTをアップデートし、下記をインストールします。

$ sudo apt update
$ sudo apt install cuda cuda-drivers

ここでPCを再起動します。

$ sudo reboot

このあと.config/fish/config.fishに追記します。

$ echo 'set -x PATH /usr/local/cuda/bin $PATH' >> .config/fish/config.fish
$ echo 'set -x LD_LIBRARY_PATH /usr/local/cuda/lib64 $LD_LIBRARY_PATH' >> .config/fish/config.fish

最後にログオフをして再度ログイン後、下記コマンドを実行、接続しているGPUが表示されたらOKです。

$ nvidia-smi

Tensorflow/Kerasをインストール

続いてTensorflow、そのあとにKerasの順でインストールします。
今回はGPUを使用するのでtensor-gpuとしていますが、tensorflowだけでも問題はありません。

$ conda install tensorflow-gpu
$ conda install keras

Kerasを実行

最後にKerasでmnistの学習を実行して動作確認をします。
コードはこちらを使用します。
https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py

適当なPythonファイルを作成します。

$ touch train.py

作成したtrain.pyに上記URLのコードをコピペして保存、下記を実行します。
エラーなく処理が進めばクリアです!

$ python train.py

終わりに

私なりの手順を書かせていただきましたが、上記の手順のなかで不備や漏れ、お気づきのことがございましたらコメントをいただけますと幸いです。

また本稿作成にあたり下記を参考にさせていただきました。
https://qiita.com/shuntksh/items/1995e87fe5c1ac88296f
https://qiita.com/tkmpypy/items/9bd9692ad44dcd5710da
https://qiita.com/yukoba/items/3692f1cb677b2383c983

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Yubikey 5のPIVで遊ぶ ( SSH鍵生成&保管 )

Yubikeyには、PIVという規格/機能が備わっています。これを使って、SSH秘密鍵を生成したり、認証情報を保管したり、署名することができるので、今回はそれで遊びます。

PIV とは

PIVは、Personal Identity Verificationの略で、アメリカ連邦政府で使われているスマートカードの規格です。
連邦職員が所持している身分証明カードは、このPIV規格に沿ったICチップが入っており、自分の身分を証明するために使用します。

Yubikeyがあれば、PIV対応のハード/ソフトで認証に使用したりすることができます。
ただ、日本でPIV認証に対応した場所はありません。
なので、今回はPIVにあるRSA/ECC鍵を生成して保管する機能を使って、SSH秘密鍵保管庫としてYubiukeyで遊んでみようと思います。

要するに「内部で秘密鍵を保管してくれて、ファイルや文字列をぶん投げると署名して返してくれるUSBデバイス」です。

YubikeyのPIV

  • PIV機能に対応したYubikeyは、Yubikey 4,5,NEOです。また、NEOはECC鍵に対応しておらず、RSA鍵しか使えません。

  • USB接続だけではなく、NFCでも使用できます。

  • YubikeyのPIVには、9a 9c 9d 9eの計4つの「スロット」があります。
    つまり、4つの秘密鍵を保管することができます。

  • 既にある秘密鍵をYubikeyに保管させることもできますが、Yubikey内で秘密鍵を生成し、公開鍵だけ出力することで、一切秘密鍵を外に持ち出せないようにすることもできます。
    そちらのほうが安全なので、今回は後者を使います。

  • 対応するアルゴリズムは RSA 1024, RSA 2048, ECC secp256r1 です。

  • YubikeyのPIV鍵は、PINコードで保護されており、PINコードを入力しないとYubikeyに物理的にアクセスできても使うことはできません。

  • 9a 9c 9d 9eの各スロットは、もともとは利用目的があるため、微妙にPINコードの管理が異なります。
    9aと9dは、認証に使うため(パソコンにセットするとか)に作られたため、一度PINコードを入力するとUSB接続が切れるまで使えます。
    9cはファイルのデジタル署名に使うため、署名するたびにPINコードが必要になります。
    9eは、建物の入館時のドアロックの解除などに使うため、PINコードが必要ありません。
    まーーー我々は連邦職員じゃないので、好きなスロット使えば良いですね。

  • 実はスロットは9a 9c 9d 9e以外にも82 83 84 ... 95まで20個あります。ここには、9a 9c 9d 9eに以前登録していた鍵が保存されています。
    つまり、間違えて、使ってるスロットの鍵を上書きしちゃっても、順次以前使っていた鍵がこのスロットにスライドされて来るのでなんとかなります。

ツールのインストール

$ sudo pacman  -S yubikey-manager opensc ccid

鍵の生成

$ ykman piv generate-key -a RSA2048 9a pubkey.pem
$ ykman piv generate-certificate -s "SSH Key" 9a pubkey.pem

スロット9aに、RSA2048bitの鍵を生成します。公開鍵はpubkey.pemという名前でカレントディレクトリに生成されます。
また、2つ目のコマンドで、SSHに使用する情報の生成やスロットへの名前付をしています。

sshクライアントの設定

.ssh/configに、以下のようにホスト情報を追記します。
IdentityをPKCS11Providerに置き換えて使えます。

Host hoge.com
  User fuga
  PKCS11Provider /usr/lib/opensc-pkcs11.so

これで、sshするときにPINコードが尋ねられます。
YubikeyのデフォルトPINコードは123456です。

公開鍵の変換

Yubikeyの公開鍵を、sshが使える形式に変換します。

$ ssh-keygen -i -m PKCS8 -f pubkey.pem > pubkey.txt

pubkey.txtの中には、見覚えのある文字列(公開鍵)があるので、ssh先の.ssh/authorized_keysに貼り付けましょう。

おまけ

PINコードの変更

デフォルトのPINコードは123456で脆弱なため、変更しましょう。
変更するコマンドは以下です。

$ ykman piv change-pin

PINコードブロックの解除

PINコードの入力を3回以上間違えると、PINコードがブロックされ、PIV機能が使えなくなります。
PUKコードを使うことで、PINコードを新しものに変更できます。

$ ykman piv unblock-pin

デフォルトのPUKコードは12345678です。(デフォルトのPINコードの末尾に78を追加)

PUKコードの変更

$ ykman piv unblock-pin

PIVリセット

PINコードもPUKコードも忘れてしまった場合、YubikeyのPIV機能をすべてリセットすることができます。
もちろん、保管してある鍵はすべて消去されます。

$ ykman piv reset

マネジメントキー

マネジメントキーは、鍵の生成やインポートに使います。

デフォルトのマネジメントキーは010203040506070801020304050607080102030405060708です。

自分はマネジメントキーは変更する必要はないと思いますが、変更したい人はykman piv change-management-keyで変更できます。

まとめ

これで、ssh鍵を物理的に安全に保つことができるようになりました。新しいマシンを触る度に鍵を生成してgithubに公開鍵を登録するよりかは、よっぽど便利なので、ぜひ使っていきたいですね。

参考

https://orebibou.com/2019/03/macos%E3%81%A7ssh-agent%E3%81%AByubikey%E3%81%AE%E9%8D%B5%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8Bopensc%E7%B5%8C%E7%94%B1/
https://developers.yubico.com/PIV/Guides/SSH_with_PIV_and_PKCS11.html
https://wiki.archlinux.org/index.php/YubiKey#CCID_Smartcard

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む