ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

リモートデスクトップ(RDP)、VNCで外部から安全に接続 sshポートフォワーディング

男のロマン 外出先から自PCの操作

PCをある程度操作できるようになり、あー便利な道具だなぁ、と思い出す頃に誰しも考えるのがPCのリモート操作ではないだろうか。
最初は漠然と誰かのPCを操作したり、外部から自分の端末を操作することを考えるだろう。
全く知らない誰かの端末を操作することは法的にも技術的にも困難なのだが、外部から自宅のPCや、全く異なる場所に配置されたサーバなどを操作することで、不可能であった仕事を可能にしたり、移動にかかるコストを完全に無くすことができる。
そして何より「オレITやってるー、うわぁいw」と自己陶酔したい。 そう、そこには男のロマンがある。 ネットワークを介して自宅のPCを操作して、仕事中にあれをしたりこれをしたりグフグフするわけである。
しかし、その男のロマンのためにセキリュティを犠牲にすることは以ての外である!!

…いやすまない、少し熱くなりすぎたようだ。
仕事中に遊ぶなど品行方正な我が社では許されることではないのだが、やってしまったものは仕方がない。 ボク以外のそういったユーモアのある諸君のためにも、安全に快適にリモート操作ができるように、その方法を提示しておきたい。

SSHポートフォワーディングの概要と目的

下記リンクページから抜粋させていただく。

sshポート転送(フォワーディング)とは他マシンにあるIPポートを、自マシンのポートとして扱うための技のひとつ

上記リンクもすごくわかりやすいのだが、あえて初学者向けに図に描いてみると下記のようになる。

SSHポートフォワーディングのイメージ

f:id:tokixy56:20160312173631p:plain
よく聞いて欲しい、この図はボクがワードを使って2時間くらいかけて描いた。
すごいと褒めてくれ。

つまり、sshポートフォワーディングとは、ローカルのポートを別のポートに転送すること。 図にあるように、サーバ側のLAN内の別のサーバのポートに転送することも可能なのだ。

目的は、インターネットを介した安全な通信

SSHサーバを立てる際、公開鍵方式で通信するのが一般的であり、またそうすべきである。 SSHの設定や運用については他にたくさん資料があるのでそちらを検索して調べてみよう。
SSH通信では、通信の際にやりとりするデータが暗号化されているので、途中でデータを改ざんされたり、不正に見られることはほぼ無い。
SSHポートフォワーディングでは、その通信方法、通信経路を利用して他のプロトコルを安全に使用することができる。 RDPやVNCは、デフォルトでは暗号化などのセキュリティ対策が多分全く施されていないので、インターネットを介した利用は絶対に避けるべきである。

したがってほとんどのsshポートフォワーディングの目的は、単純なポート転送でなく、安全な通信、安全なRDPやVNC通信、その他の通信プロトコルを実現することである、と言ってもいいだろう。

外部から自宅のサーバへアクセスする方法について

自宅に回線を引く場合、プロバイダから提供されるルータを使用することになると思う。 多分、普通にLANをつないだりWifiアクセスポイントとして使っている場合、デフォルトゲートウェイは[192.168.0.1]に設定されているはずだ。 その場合は、ブラウザのアドレスバーに[192.168.0.1]と入力すれば、デフォルトゲートウェイであるルータにアクセスできる。 ルータのIPアドレスが上記と違うときは、自端末のネットワーク設定を確認してみよう。「デフォルトゲートウェイ」あるいは「ゲートウェイ」に設定されているIPアドレスがそれに当たる。
ブラウザからルータに接続する際、ユーザ名とパスワードの入力を求められると思うが、機器によってデフォルトのユーザ名とパスワードが異なるため、説明書を読むか、プロバイダに問い合わせして確認しよう。

プロバイダによってルータは様々だと思うが、ボクの家のルータはポート転送機能が付いている。

ルータのポート転送のイメージ

f:id:tokixy56:20160313210102p:plain
よく聞いて欲しい、この図はボクの適当な手描きの絵を、知人がイラストレータで一生懸命描いた
すごい綺麗に描けてるし、その完成度にビックリ。サーバの図とか見て。やばい。
どんだけー。

プロバイダから提供される各ルータには、そのプロバイダからグローバルIPアドレスが割り振られる。 このグローバルIPアドレスは、上記で説明したように、LAN内の端末のブラウザから確認したりすることができる。 外部からそのグローバルIPアドレスのポート22番にアクセスすると、普通はルータのファイアウォールに接続を拒否される。
そこでルータに実装されたポート転送機能を使用してLAN内の特定のポートを、例えば192.168.0.100の22番とか、192.168.0.111の3000番という風に、任意に設定したポートに転送する。
この機能を利用することによって、外部から自宅へアクセスできるのだが、例えば単純にRDP用3389番ポートを、普通にローカルのリモート接続可能なWindowsへ転送することは、あまりに危険であることは想像に難くないだろう。
そこで、sshポートフォワーディングを利用するわけだ。
したがって、上記の図のように、63000を3389へ転送する設定などはしないようにしよう。

更に突っ込んだ注意点

もうひとつ大きな注意点として、sshポートフォワーディングをする際、クライアント端末にファイアウォール設定などが適切に設定されておらず、ローカルネットワーク内のどんな端末からも接続可能な場合だ。 例えばその設定で公共の場で使用し、そのクライアント端末から自宅へ接続しているとき、そのクライアント端末を踏み台にしてアクセスされることが考えられる。
ちゃんとファイアウォールの設定や使用する場所に配慮して利用するようにしよう。

SSHポートフォワーディングの構成と設定

クライアント-サーバ間の構成(例)

まず、sshポートフォワーディングをするためには、sshサーバが必要になる。
またsshサーバと別にリモートデスクトップができるWindowsや、その他のVNCサーバも必要だ。

今回は上記にある図を元に設定するとする。
また、sshクライアントのTeratermの設定と、sshサーバのポートフォワーディングに関する設定を主として説明し、その他のRDPサーバ、VNCサーバの設定の詳細は説明しない。
LinuxVNCデーモンであるtightvncなどの設定は、いずれ別記事でまとめたい。

クライアント端末(例)
項目
OS Windows 10
sshクライアント Teraterm
RDPクライアント 標準リモートデスクトップクライアント
vncクライアント RealVNC
ルータ(例)
項目
グローバルIPアドレス 123.234.111.100
ローカルIPアドレス 192.168.0.1
ポート転送 ポート22 → 192.168.0.100のポート22
sshサーバ(sshポートフォワーディングサーバ)(例)
項目
OS CentOS 7
IPアドレス 192.168.0.100
sshデーモン openssh[:22] (ココがルータのポート転送の転送先)
vncデーモン tightvnc or x11vnc[:5900]
Windowサーバ(例)
項目
OS Window 10
IPアドレス 192.168.0.10
RDPサービス リモートデスクトップ[:3389]
vncデーモン RealVNC[:5900]
Linuxサーバ(例)
項目
OS Ubuntu 14.04
IPアドレス 192.168.0.50
sshデーモン openssh[:2222]
vncデーモン tightvnc or x11vnc[:5900]

SSHサーバの設定

SSHサーバの設定は特に無い。 /etc/ssh/sshd_configをいじる必要もない。 普通にsshサーバとして稼働させておけば良いだけだ。
sshサーバの設定は、OSとマシンは違うのだが、ボクの過去記事を参考にしてもらいたい。
が、下記の記事は実際、余計な説明にかなり多くを割いているので、他の人が書いたページを参考にした方がいいと思う。 と、言いつつ一応リンクを貼っておく。
Raspberry Piでサーバ構築①(ssh編 公開鍵未設定)
Raspberry Piでサーバ構築②(Samba編)
Raspberry Piでサーバ構築③(ssh公開鍵編)
新しく発売されたRasbperry Pi 3を買って、sshポートフォワーディングサーバにしてもいいなと思った今日このごろ。

SSHクライアントの設定(Teratermの設定)

まず上記のSSHポートフォワーディングの構成と設定の設定値に合わせて、RDPを例にとって手順を簡単に説明すると、

  1. Teratermで事前にクライアント端末のlocalhost:3389を、サーバ側の192.168.0.10:3389へ転送するよう、ルールを設定しておく。
  2. Teratermで123.234.111.100:22のsshサーバに接続する。
  3. Teratermで接続したまま、RDPクライアントを起動する。
  4. 転送ルールにしたがって、RDPクライアントよりlocalhost:3389にアクセスする。

最重要なのは、1.Teratermで事前に転送ルールを設定の部分だ。

Teratermでポートフォワーディングの設定

ここがsshポートフォワーディングで一番肝心な部分となる。
この説明でもRDPを例にとって手順を説明する。

Teraterm [設定]メニュー

f:id:tokixy56:20160313193347p:plain
Teratermの[設定]から、[ssh転送]をクリック

sshポート転送画面

f:id:tokixy56:20160313193806p:plain
[追加]ボタンをクリック

sshポート転送設定画面

f:id:tokixy56:20160313193818p:plain
この画像の[ローカルのポート]がクライアントマシンのポート番号を指す。
そして、[リモート側ホスト]の方で、sshで接続しているサーバ側の、サーバを含むLAN内のいずれかのIPアドレスとポート番号を指定する。
設定が終わったら[OK]をクリック

設定を保存

f:id:tokixy56:20160313193347p:plain
上記の設定が終わったら、[設定]メニューから[設定の保存]をしておくと、次回から毎回設定する必要がなくなる。

リモートデスクトップで接続

f:id:tokixy56:20160313193827p:plain
Teratermで普通にサーバに接続した状態にしておく。
接続したままの状態で、この画像のようにリモートデスクトップlocalhostの3389へアクセスすれば、サーバ側のリモートデスクトップサーバにアクセスできるはず。
もちろん切断する場合は、RDPを切断してからsshを切断するようにしよう。

その他のVNCや他のsshサーバへの接続も、この設定と同様に設定していけばよい。 これにて、sshポートフォワーディングの設定方法の説明はサラッと終わらせてもらう。

余談 チャットツール

皆さんは、普段どういった方法で友人と連絡を取り合うのだろうか。
ボクは普段はもちろんLINEを使用しているのだが、どうしても好きになれない。
スタンプの機能も今ではほとんど使わなくなった。

あのさぁ、できればみんなSkypeGoogle hangouts使おうよー。
SkypeGoogle hangouts布教していこうよー。

というわけで、Skypeかhangouts、どちらがいいかコメントお待ちしている。

Raspberry PiのRAM化(SDカード延命対策)

近況2016-03-06

新入社員として働き出して2ヶ月が経つ。 仕事の内容も興味のある分野を多く取り扱っているし、話が合うあるいは話が面白い上司や同僚がいて、非常に楽しい。 こんなに楽しいならもっと早くに転職しておけば良かったと本当に思った。 まぁトラブルが多く続くとコンニャロと思うこともあるのだが、それでも定時には帰れるし、しなければならない作業も前倒しでできるくらいの余裕もある。
文句なしです。
今後はもう少し技術的にも難しいことを任されることになるし、逆に面倒なだけの作業や、突発的な事に関しても動かなければならなくなると思うので、できる限り上司の足を引っ張らないように進めていきたい。

加えて、今までボクが働いてきた職場には全く女性がいなかった。
現在の職場ではほぼ半数が女性である。
素晴らしいのである。

眼前を 過ぎる女性の 美しさ 香る艶美と 春の訪れ

セクハラ逮捕だけは勘弁してください。

Raspberry PiのSDカード延命

前回まで書いていた記事の番外編的な位置付けで書こうと思う。
tokixy56.hatenablog.com
これの①〜③ね。

SDカードはフラッシュメモリの一種で、書き込み回数に上限がある。
おそらく同じ箇所に対して数万回くらいの書き込みは可能なのだと思うが、例えばRPiを何かのサーバ代わりに使用するとしたら、結構早い段階で寿命が来てしまう可能性がある。
特に、サーバとして使用する場合には、サーバデーモンがアクセスログデバッグログ、その他のシステムログをずっと書き込んでいる。 前回までに紹介した方法では、例えば8GBあるSDカードの領域のうち、前方の1GBしか利用しないわけだから、全体を使うのと比べて同じ領域にたくさん書き込みをしてしまうだろう。 そこで、できる限りSDカードへの書き込みを抑えるため、RAM上にファイルを配置するという方法をとって、不要な書き込みを防いでSDカードの寿命を伸ばしてみよう。

本記事では、下記のページを抜粋させて頂いてる。
www.pc-links.com
ほぼ丸写しサーセン

fstabでマウントする場所を指定

/etc/fstabファイルで、各ディレクトリをマウントする場所を決める。
tmpfsにマウントすることによってRAM化することができるようだ。
Linuxにおけるtmpfsの技術的な仕様についてはwikipediaを参照しよう。

/etc/fstabの修正
# tmpファイルはRAMディスク上に保管する(追記)
tmpfs /tmp     tmpfs defaults,size=32m,noatime,mode=1777  0       0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777  0       0
# /var/logディレクトリはRAMディスク上に配置する
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755  0       0

rsyslogの不要なログを停止

上記のtmpfsに加え、不要なログを残さないようにすることで、SDカードへのアクセスを減らす。
www.atmarkit.co.jp

rsyslogってよくわかってなかったけど、次世代のログシステム、ログデーモンなんですって。 reliableシスログってことだな。

/etc/rsyslog.confの修正

[root@ms03 ~]# vi /etc/rsyslog.conf
...
###############
#### RULES ####
###############
...
#下記をコメントアウト
# daemon.*                          -/var/log/daemon.log
# kern.*                            -/var/log/kern.log
# lpr.*                             -/var/log/lpr.log
# mail.*                            -/var/log/mail.log
# user.*                            -/var/log/user.log
...
#下記をコメントアウト
# mail.info                         -/var/log/mail.info
# mail.warn                         -/var/log/mail.warn
# mail.err                          /var/log/mail.err
...
#下記をコメントアウト
# news.crit                         /var/log/news/news.crit
# news.err                          /var/log/news/news.err
# news.notice                       -/var/log/news/news.notice
...
#下記をコメントアウト
# *.=debug;\
#        auth,authpriv.none;\
#        news.none;mail.none        -/var/log/debug

ボクの環境ではこれで特に問題なく動作している。 あとは実際ずっと稼働させてどれくらい持つのかが問題だけど、そこまでRPiを酷使する予定は今のところない。

余談 新しくなるコマンドたち

先日CentOS7をインストールしてサーバを構築したのだが、その際ネットワーク設定でハマりかけた。
まずipconfigがない。
ここでいきなり躓いたもんだから、ヤッパヤメタしようかなと思ったけど、仕事で使う予定だったのでどっちみち逃げることができないと悟り、頑張って設定した。
ipconfigがレガシーなツールになるなんて夢にも思わなかったなぁ。 あとはSELinuxやfirewalldも設定することになったし、散々な目にあった。 しかし、こういう新しい技術もたくさん情報があることがわかったし、しっかり理解すればかなり確実にセキュアなシステムを構築できる。 仕事上Windowsを利用することが多く、セキュリティソフトもファイアウォールも多額の費用を費やして利用しているのだが、今後費用の面などでこういうOSも使うことになると思う。 すべてを置き換えることはできないとしても、使える使えないでSEとしての柔軟さが大きく変わってくると思うので、しっかり勉強していこうと思う。

MINIBIAN 最小構成のRASPBIAN (Raspberry Pi) ③

全然覚えられないIT業界用語シリーズ

IT業界の専門用語が全然覚えられない。 「IT」からいきなり略称だ。 これはInformation Technorogyの略だけれども、このように頭文字を並べた略称や覚えにくい用語がIT業界には大量に存在する。 しかもかぶっているものもあったりする。 このIT業界の用語が僕は好きになれないというか覚えられないんですすみません。
とりあえず最近覚えた、覚えたい、難しいと感じる略称・用語を挙げてみたい。

  • ARP
    Address Resolution Protocol
    IPアドレスからEthernetMACアドレスの情報を得られるプロトコル
  • ARM
    ARMホールディングス(旧:Advanced RISC Machines社)で開発されているCPUのアーキテクチャの名称。
  • LDAP
    Lightweight Directory Access Protocol
    軽量ディレクトリアクセスプロトコル
  • DHCP
    Dynamic Host Configuration Protocol
    動的ホスト設定プロトコル
  • RAID
    Redundant Arrays of Inexpensive Disks または
    Redundant Arrays of Independent Disks
    複数台のハードディスクを組み合わせることで仮想的な1台のハードディスクとして運用し冗長性を向上させる技術(Wikipediaより抜粋)。
  • クエリ
    query。問い合わせ。
  • クーリエ
    courier。添乗員、案内人、ガイド。
  • SQL
    Structured English Query Languageが由来のデータベース言語。
  • リゾルバ
    resolver。解決者。ドメイン名を解決するもの。

パッと浮かんだものだけでもこれくらいある。 えらい偏ってる。 なんかややこしく聞こえるものがたくさんあるなぁ。 名称はあまり略さずに使用していただきたい。 イニシャル三文字シリーズがもう嫌で嫌で…。 VPNとかVPSとかVLANとかあああああぁぁぁぁ。

続 Raspberry Piで遊ぶ

RPiで引き続き遊んでみよう。

今回は以下の順番で、オリジナルのディスクイメージを作成してみたい。

  1. GPartedでSDカードにパーティションを作る。
    64MBのFAT32領域と960MBのext4領域の起動用SDカードを作成する。
  2. MINIBIANのディスクイメージをLinuxBean上にマウントし、中身だけをSDカードの各領域にコピーする。
  3. その状態で起動できるか試す。
  4. 起動することが確認できたら、SDカードのその起動イメージを書き出す。

こうすることによって、RPiのイメージをPC上でいじったり、丸ごとバックアップすることができる。

GPartedでSDカードの操作

LinuxBeanでは標準でインストールされている、パーティション操作ツールだ。

GPartedイメージ

f:id:tokixy56:20160131224528p:plain

GPartedでSDカードのすべての領域を削除

f:id:tokixy56:20160131224936p:plain
まずは一度すべての領域を削除する。
間違ってもPCのパーティションを削除しないように!!
マウント状態だと削除できないので、各パーティションをアンマウントした状態で削除。

GPartedでFAT32領域を作成

f:id:tokixy56:20160131225141p:plain
次はFAT32領域を作成。なぜかわからないが、前方に1MBの空き領域を作成しなければならないようなので、実際には63MBのFAT32領域となる。

GPartedでext4領域を作成

f:id:tokixy56:20160131225530p:plain
追加ボタンをクリックして完了。

GPartedでのパーティショニング完了

f:id:tokixy56:20160131230957p:plain
これで「↵」ボタンを押して適用すれば、パーティショニングが完了する。

MINIBIANディスクイメージをLinuxBean上にマウント

まずは下記のように、カレントディレクトリを整理しよう。

% ls -l
drwxrwxr-x 5 tokixy56 tokixy56       4096 Jan 31 17:10 .
drwxrwxr-x 6 tokixy56 tokixy56       4096 Jan 19 23:04 ..
...
-rwxrwxr-x 1 tokixy56 tokixy56  832569344 Jan 20 23:55 2015-11-12-jessie-minibian.img
drwxrwxr-x 2 tokixy56 tokixy56       4096 Jan 19 22:05 mnt

2015-11-12-jessie-minibian.imgがMINIBIANのディスクイメージである。 カレントディレクトリにmntディレクトリを作成しておき、ここにマウントするようにしたい。

MINIBIANディスクイメージのFAT領域をマウント

まずは、fdiskコマンドでディスクイメージの情報を確認する。

% fdisk -l 2015-11-12-jessie-minibian.img

Disk 2015-11-12-jessie-minibian.img: 832 MB, 832569344 bytes
255 heads, 63 sectors/track, 101 cylinders, total 1626112 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

                         Device Boot      Start         End      Blocks   Id  System
2015-11-12-jessie-minibian.img1              16      125055       62520    b  W95 FAT32
2015-11-12-jessie-minibian.img2          125056     1626112      750528+  83  Linux

次に、ディスクイメージの情報をみて、オフセットを調べる。 上記の情報ではStart位置は16、これはブロックサイズ、つまりセクタサイズだ。 コマンドの下に表示されている「Units = sectors...」にあるように、1セクタは512バイト。 よって、512byte×16=8192バイトずらしたところがマウントする先頭位置となる。

% sudo mount -t vfat -o loop,offset=8192 2015-11-12-jessie-minibian.img mnt

これでmntディレクトリにFAT領域がマウントされる。
f:id:tokixy56:20160131230718p:plain
この中身をすべてSDカードのFAT32領域にコピーする。 GUIのファイルマネージャ(PCManFM)ではコピーできなかったので、僕はこのコマンドを使用した。

% sudo cp -r mnt/* /media/tokixy56/[FAT32のディレクトリ]

コピーが完了したら、アンマウントを忘れないように。

% sudo umount mnt
MINIBIANディスクイメージのext4領域をマウント

次はext4領域をマウントする。

sudo mount -t ext4 -o loop,offset=64028672 2015-11-12-jessie-minibian.img mnt

これもFAT32の時と同じように512byte×先頭位置で計算した値をoffset値としてセットする。 RPiのrootディレクトリがmntにマウントされていることがわかる。
f:id:tokixy56:20160131233212p:plain
これもSDカードのext4領域にコピーする。

% sudo cp -r mnt/* /media/tokixy56/[ext4のディレクトリ]

コピーが完了したら忘れずにumount。

ここで一度起動確認

何事もなければ起動するはず。
起動しない場合はもう一度手順を確認してみよう。

SDカードからディスクイメージを書き出す

ddコマンドを利用して、先ほど作成したSDカードのディスクイメージをPCへ書き出す。

ddコマンドでSDカードから書き出し

sudo dd if=/dev/sd[SDカード] of=minibian.img bs=512 count=2097152

僕の場合は/dev/sdgがSDカードデバイスだった。
出来上がったファイルをfdisk -lコマンドでみてみる。

% fdisk -l minibian.img
...
       Device Boot      Start         End      Blocks   Id  System
minibian.img1            2048      131071       64512    b  W95 FAT32
minibian.img2          131072     2097151      983040   83  Linux

% fdisk -l 2015-11-12-jessie-minibian.img
...
                         Device Boot      Start         End      Blocks   Id  System
2015-11-12-jessie-minibian.img1              16      125055       62520    b  W95 FAT32
2015-11-12-jessie-minibian.img2          125056     1626112      750528+  83  Linux

元々のMINIBIANのディスクイメージとは、Startセクタやブロックサイズが異なることがわかる。 このようにすれば、自分が作成したSDカードの状態をそのままバックアップとして保存できるため便利だ。
また、前述のマウントの手順を踏めば、自分が作成したディスクイメージも同じようにマウントできる。 自分が作成したプログラムを、マウントしたディスクイメージにコピーし、SDカードにddで書き込むということも可能になるわけだ。
ddによるSDへの書き込みは下記のコマンドを実行。

ddコマンドでSDカードへ書き込み

sudo dd if=minibian.img of=/dev/sd[SDカード] bs=512 count=2097152

書き出しコマンドのifofの値を入れ替えただけ。 これでネットワーク越しやUSBメモリをさしてファイルをコピーする必要もなくなるわけだ。
SDカードをPCに挿せば普通にマウントしてくれるからここまでする必要はないのだけども…。 まぁ遊びの一貫ということで。

今後

この状態だと、SDカードの一部だけが使用されることになり、局所的に寿命を早めてしまう。 仕方ないことではあるのだが、ちょっとでも寿命を伸ばすために、/tmpディレクトリや/var及び/var/logをRAM上に配置するようにしたい。
この設定をすると、電源を落とすたびにログファイルなどが消滅してしまうが、遊びで使っているので全く必要ない。 デバッグなどで残す必要がある場合にはその都度ROM領域にコピーするようにすればいいだろう。

MINIBIAN 最小構成のRASPBIAN (Raspberry Pi) ②

ちょっとページ長いっぽいので目次を入れてみた。

正式に正社員、スーツを卒業

僕は今年からITインフラ管理の仕事に転職したのだが、2月から正式に正社員として採用していただけた。 上司からの評価も(本当かどうかはわからないが採用担当の話では)良いらしく、すこぶる嬉しい。 逆に、僕はいい上司に出会えて喜んでいたところだったし。
しかしそんな中些細ではあるが、一つ悩みができた。 スーツでなく私服で出勤するということだ。
僕は正直それほど私服のセンスもなく、UNIQLOがなければ今頃田舎の中学2年生のような格好をしていただろう。 今はなんとか中学3年生くらいの格好はできているはず。 また、「あまり派手でなく、一般的なオフィスカジュアルで」という事を言われたのだが、一般的なオフィスカジュアルがどういった服装なのか全くわからない。 とりあえず、月曜日はスーツで行ってもう一度、良い服装、ダメな服装を聞いておこうと思う。 加えて、それに回答できる読者の方、コメントしていただくようよろしくお願いします。

最近、僕の応援していたブロガーの方も異国の地で就職を勝ち取れたようだ。2016年、僕に加えて彼までも迎え入れたIT業界は、きっと良い風が吹くのではないかなぁ…(この超絶上から目線はジョークです、御了承お願い致します)。

Raspberry Piで遊ぶ

前回の予告したが、とりあえず今回は以下のうち最初の1つを記したい。

  • raspi-configなしでディスクを拡張
    MINIBIANにはraspi-configがないので、知っておくと便利。

  • RPiのイメージを1GBキッチリにしたい。
    いくつか方法があるが、SDカードにGPartedでパーティションを作りたい。 FAT32を64MB、ext4を960の合計キッチリ1GBの領域を確保する。 そこに必要なファイルをコピーし、イメージの作成、読み出しなどをする。

  • イメージファイルをPC上にマウントして中身を書き換えたい。
    イメージファイルはPC上にマウントすることができる。なんか面白いのでやってみたい。

[raspi-config]なしでディスクパーティションを拡張

こちらのページが非常にわかりやすい。
wordpress.ideacompo.com
tomoyukim.hatenablog.com

僕が利用しているOS、MINIBIANにはraspi-configがインストールされていない。よって、このような作業が必要になる。
ほぼ転載にはなるが、自分でもう一度手順を記しておきたい。

df -hでデバイスを確認

% df -h
Filesystem     Size Used Avail Use% Mounted on
/dev/root      705M  431M  223M  66% /
...
/dev/mmcblk0p1  61M   20M   42M  32% /boot
% ls -l /dev
...
brw-rw---- 1 root disk  179,   0 Nov 10 00:32 mmcblk0
brw-rw---- 1 root disk  179,   1 Nov 10 00:32 mmcblk0p1
brw-rw---- 1 root disk  179,   2 Nov 10 00:32 mmcblk0p2
...

上記の/dev/mmcblk0p1がbootパーティション、つまりFAT領域だ。
そしてdf -hでは表示されていないが、/dev/mmcblk0p2Linuxファイルシステムとして使われている。 SDカードのデバイス名は/dev/mmcblk0である。
RPiのイメージをSDカードに書き込んですぐの時点では、ディスクデバイスドライバファイルシステムはSDカード全体を使うように設定されていない。 その2つを適切に設定すれば、目標達成である。 SDカード/dev/mmcblk0の2つ目のパーティションを拡張して、FAT領域とext4領域とを合わせて1GBとなるようにする。

fdiskでパーティションを作り直す

# fdisk /dev/mmcblk0

上記のコマンド実行後、以下のように操作する。

  1. p : パーティションのアドレス情報などを表示
  2. d : 隠し部分のパーティション削除
  3. 2 : 2番目のパーティションなので、2を指定。
  4. p : 結果確認
  5. n : 新しいパーティション作成
  6. p : primaryを指定
  7. 2 : 2番目のパーティションを指定
  8. 数字 : 最初のpで表示した2番めのパーティションのstartアドレスを指定
  9. 2097152 : 1セクタが512として、1GBを計算した値を入力
  10. w : 変更を書き込み。
root@minibian:~# fdisk /dev/mmcblk0
...
#1. p : パーティションのアドレス情報などを表示
Command (m for help): p
Disk /dev/mmcblk0: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
...

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1          16  125055  125040 61.1M  b W95 FAT32
/dev/mmcblk0p2      125056 1626112 1501057  733M 83 Linux
#2. d : 隠し部分のパーティション削除
Command (m for help): d
#3. 2 : 2番目のパーティションなので、2を指定。
Partition number (1,2, default 2): 2

Partition 2 has been deleted.
#4. p : 結果確認
Command (m for help): p

#/dev/mmcblk0p2が消えた
Device         Boot Start    End Sectors  Size Id Type
/dev/mmcblk0p1         16 125055  125040 61.1M  b W95 FAT32

#5. n : 新しいパーティション作成
Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
#6. p : primaryを指定
Select (default p): p
#7. 2 : 2番目のパーティションを指定
Partition number (2-4, default 2): 2
#8. 数字 : 最初のpで表示した2番めのパーティションのstartアドレスを指定
#この場合、デフォルト値が先頭セクタからずれているので、入力し直すこと。
First sector (125056-31116287, default 126976): 125056
#9. 2097152 : 1セクタが512として、1GBを計算した値を入力
# 512 x 2097152 = 1073741824 = 1GB(1024^3で割る)
Last sector, +sectors or +size{K,M,G,T,P} (125056-31116287, default 31116287): 2097152

Created a new partition 2 of type 'Linux' and of size 963 MiB.
#10. w : 変更を書き込み。
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
# reboot

ここでfdiskコマンドから抜ける。 そして再起動。

resize2fsファイルシステムを拡張

# resize2fs /dev/mmcblk0p2
...
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       932M  432M  442M  50% /
...
/dev/mmcblk0p1   61M   20M   42M  32% /boot

以上で、ディスクの拡張が終わり、(このログではわからないが)キッチリ1GBの領域を使用するRPiができた。

私事

次回予告中、1つしか書けなかったけど、まぁ許してください、次回また書きますゆえ。

最近はあまりRPiで遊べていないのが現状。 今の仕事は組込みとは全くかけ離れた領域の仕事である。 ネットワーキング、DNS、MTA、データベース、LDAPなどの各種サーバについての知識などを猛勉強中。 まさに僕が避け続けてきた分野だ。 誰かがやってくれるだろう、と思っていたことであった。 こんなことなら、このあたりももっと勉強しておくんだったなと思う自分と、それでも仕事を通して勉強できて幸せだなと思う自分がいて面白い。
うん、なんか幸せ。

MINIBIAN 最小構成のRASPBIAN (Raspberry Pi) ①

組込み開発っぽい事したい

みんな大好きRaspberry Pi(以下RPi)に、僕もまた夢中なのだ。
www.raspberrypi.org

概要はここで説明せずとも、検索すればたくさんの記事が見つかる、とてもメジャーな製品だ。
使い方は様々なのだが、僕は特に「組込みっぽく」使うことを心がけている。 ネットワークに接続せず、USBシリアル変換ケーブルの給電のみで作動させている。
過去記事はこちら

また、USBシリアル変換ケーブルの給電のみでは、時折バグる。 そのため、現在ではこちらのUSBハブを仲介して接続している。
www.amazon.co.jp
要は、セルフパワーのUSBハブを介することで、電源を補えばよかったのだ!!

ファームウェアの読み書き

組込み開発の醍醐味といえば、PCでクロスコンパイルしたバイナリイメージや実行ファイルをターゲットに書き込む作業だ。 少なくとも僕の中ではそうだ。
「ちゃんと動いてくれるかな??」
と胸踊らせながらターゲットに書き込む。
答えは電源を入れた時、あるいはボタンを押した時にわかる、というのが組込み開発でしょう。
アプリやウェブの開発でも、「動かす直前」が最もドキドキするはず。

そんなわけで僕は、ネットワーク越しに実行ファイルを渡したり、USBメモリさしてコピーするみたいな、普通のPC操作をするのは嫌だった。 組込み開発ぽい雰囲気を出すことが大事なのだ。
そこで、ちょっとMっぽい条件を自分に課せた。

  • 通信はUSBシリアル変換ケーブルしかできない。
  • ファイルのやりとりは、ノートパソコンに付いているSDカードリーダのみ使用できる。
  • OSはLinuxBeanのみ使用する。

これだけあれば十分だ。
さぁ、旅に出よう(自分自身いろいろ不可解)。

ターゲット用OSはMINIBIAN

以前にも説明したこちらのターゲットOS、というかイメージ。
minibianpi.wordpress.com
最新のものはRPi2にも対応しているはずなので、少しファイルサイズが大きい。
こちら2014-11-24-wheezy-minibian.tar.gzが一番ファイルサイズが小さいと思うので、RPi(2じゃない)を使用する場合は、お好みで選ぼう。

SDカードは2GBでも十分。 今後拡張していくにしても、ApacheSambaやGitやMySQLを入れてサーバ化するとかしなければ十分な容量だ。 僕は特にIOの制御、IPC関連のシステムコールを使用したシステムを作ってみたいと思っていて、それほど容量は必要ないと考えている。
ネットワークのsocketやlisten、bind、IPCは共有メモリやSemaphore、低レベルのIO制御のioctlとか使ってみたい。

何をするかによるけれども、とりあえずそういうシステムコールを使用するプログラムを作成する、というのが私の勉強スタイルだ。 目的のための勉強ではない、勉強そのものが目的なのだ!!(聞き飽きたフレーズ感がすごい)

LinuxでのSDカードへの書き込み

開発環境にはLinuxBeanを選定しているので、Linuxではお馴染みのddコマンドを利用しよう。
(ちなみに、僕はzsherなので、プロンプトは'%'です。)

SDカードにMINIBIANイメージの書き込み
% ls -1                                               {~/Work/RPi/img}
.
..
2015-11-12-jessie-minibian.img
% sudo dd if=2015-11-12-jessie-minibian.img of=/dev/sdg

僕の環境の場合、SDカードは/dev/sdgとして認識されていた。 SDカードがどのデバイスかは、抜き差ししてls /devして調べられたし。 なんか接続した時のログみて判断するのがいいみたいだけど、メンドイからやめた。

上記のコマンドが終了し、プロンプトが戻ってくれば書き込み完了。 実機に差し込み電源を投入(USBシリアルを接続)すれば、起動成功だ。

Linuxのシリアルコンソール

LiunxBeanはUbuntuベースのディストリビューションなので、Ubuntuのソフトが使える。
使いやすかったソフトはgtkterm。 こちらの設定をしてみよう。

gtktermのインストール
#gtktermのインストール
% sudo apt-get install gtkterm

インストール直後はgtktermは使えない。 使いたいデバイス(ttyUSB*)へのアクセス権がないからだ。 次のコマンドで自ユーザをdialoutグループに追加する。

dialoutグループにユーザを追加
#デバイスがあるかどうか確認
% ls -l /dev/tty*
#ttyUSB0がUSBシリアルデバイス
#所有グループがdialoutになっている
crw-rw---- 1 root dialout 188,  0 Jan 20 23:10 /dev/ttyUSB0
...
% sudo addgroup [ユーザ名] dialout
#rootも追加しておいていいかもしれない
% sudo addgroup root dialout

これでUSBシリアルケーブルを使用したRPiとの通信が正常にできる。 念の為に一度PCを再起動しておこう。

gtktermの使い方

LinuxBeanを使用しているならば、メニュー→アクセサリ→Serial port terminalから起動できる。 もちろんshellからgtktermとコマンドしても良い。

gtktermイメージ


通信時の設定は以下となっている。

gtkterm通信設定
設定項目
ポート /dev/ttyUSB0
ボーレート 115200
パリティ なし

その他もろもろはデフォルトでおk。

gtkterm設定画面

f:id:tokixy56:20160121001009p:plain
上記の設定が完了すれば、gtktermイメージにあるように感動の起動ログを眺めることができる。

次回予告 Raspberry Piのイメージで遊ぶ

大体こういうことをする。

  • raspi-configなしでディスクを拡張
    MINIBIANにはraspi-configがないので、知っておくと便利。
  • RPiのイメージを1GBキッチリにしたい。
    いくつか方法があるが、SDカードにGPartedでパーティションを作りたい。
    FAT32を64MB、ext4を960の合計キッチリ1GBの領域を確保する。 そこに必要なファイルをコピーし、イメージの作成、読み出しなどをする。
  • イメージファイルをPC上にマウントして中身を書き換えたい。
    イメージファイルはPC上にマウントすることができる。なんか面白いのでやってみたい。

LinuxBean + FreeBSD + Windows10 マルチブート

FreeBSDが気になって仕方がない

もうずっとずっと気になっている。
毎朝、向かいのホームで電車を待つ彼女、くらい気になる。
以前に一度Linuxとのデュアルブートでインストールしようとしたのだが、Grubから起動できなかったり、ちょっと扱いに困ったので諦めた。

FreeBSDのインストールは、この年末年始に取り組んだ課題の一つである。 ではなぜFreeBSDが気になるのか。 OS関連の書籍などを読んでいるとよく目にする、UNIXの歴史的経緯。

A diagram showing the key Unix and Unix-like operating systems

BSDは何を隠そう、Unix V6の正当な子孫なのだ。 つまり、僕の大好きなDennis Richie(デニス・リッチー)の子孫でもあるわけだ。 そんなデニスの子孫になんとなく触れてみたい、というただそれだけの理由で気になっている。

因みにLinuxはその横のMinixに触発されて作成されたそうだ。

僕はBSDLinuxのどっちが好きとか優れてる、なんて考えは全く持っていなくて、どっちも大好き。 現在も現役バリバリで働いてるOS、特にUnix系OSの話題の記事など読んでいてテンションが上がる。

こんな記事も見つけた。
osdn.jp
リーナスさんは言います。
「どちらも優れているし、どちらもソフトウェアとして正しい、方向性は違えども。」
本当にそう思います(よくわかってないけど)。

FreeBSDのハードルの高さ

まず、FreeBSDを使ってみようと思ったとき、お試しする方法としては、以下の3つの方法があると思う。

普通に考えてFreeBSDを直接インストールして単一で使おうとは思わないだろう。 僕の場合、上の2つは考えていなかった。 やっぱりOSは直接インストールしてこそ本領を発揮するし、その本領を見なければ試す意味もないと思う。 だからといって、今まで使ったこともないOSのみでマシンを駆動するのも大変だ、ということでマルチブートを採用した。

FreeBSDのインストール方法についてはこちらを参照しよう。
https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/bsdinstall-start.html
The FreeBSD Project
「インストール手順も書きなさいよ」と言われそうだが…。
FreeBSDは、単純にUnixに触れてみたいという思いだけでは使えないと思う。 Linuxは大抵のディストリビューションにおいて、インストール直後から必要なものの150%くらいを用意してくれている。 だから軽量Linuxなどはその余計なものを取っ払って、100%にしたり80%に抑えてあとはユーザに任せたりする。

FreeBSDは全然違っていて、僕のなんとなくの直感だけど、まず20%くらいしか用意してくれていない。 そこから必要な物を各自が用意していくという感じだ。
それぞれのツール、その用途をわかった上で自らチューニングしながらインストールしていかなければならない。 そういった部分からすでに、ハードルの高さが全く違うわけだ。

不要なものを削っていく、あるいは停止させる作業と、無いものを順次作って用意していく作業とでは、その難易度に差があって当然。 だから、FreeBSDをちょっと使ってみようと思った皆様方は、上記に張っているリンクへ飛び、しっかりとドキュメントを読み、基礎的な知識を得てインストールする、ということをおすすめする。

Linuxを極めし者ギークとなり、FreeBSDを極めしは「道」となる。

いう慣用句がもう少しでできるとか。
インストール手順を書くのが面倒だという訳ではないのですよ(という言い訳)。

FreeBSDのパッケージ管理

あと、FreeBSDを扱う上でよくわからなかったのが、パッケージ管理。 そもそも僕はUnix系OSMacOSXLinuxしか触れたことがなく、主にLinuxを使用していたので、わざわざソースをコンパイルしてインストールするということはあまりなかった。 単純に「apt-get」で大抵のツールが手に入ったからだ。

だから、FreeBSDportsとか「pkg」がよくわかっていなかった。
FreeBSDでは、この2つがパッケージ管理の要になるようだ。

  • pkg → コンパイル済パッケージの管理
  • ports → ソースの依存関係の解決、管理

簡単に説明すると、「pkg」は「apt-get」と同様、リポジトリにおいてあるコンパイル済バイナリパッケージを、依存関係を解決しながらインストールしていく仕組みである。
ports」はソースコードコンパイルしていく仕組みで、あるパッケージをインストールする際に依存関係にあるソースコードも取得してコンパイルしていく。 /usrディレクトリにportsディレクトリがあり、各パッケージはその中でカテゴリ別にディレクトリ分けされている。
インストールしたいパッケージのディレクトリに入り、makeしてインストールするのがportsの仕組みだ。
portsを使用すると、そのパッケージのコンパイル方法を詳細に決めることができ、運用方法に見合ったパッケージを作成することができる。

マルチブート環境

あまり詳細にインストール手順などは書くつもりはないのがだ、僕は以下のパーティション分けでインストールした。

  • LinuxBean 14.04 : 200GB
  • FreeBSD 10.2 : 80GB
  • Windows10 : 残り容量

よく、「マルチブート環境ではWindowsからインストールする」みたいな記事をよく見かけるのだが、僕はとりあえず上記の順番にインストールしていった。 Windowsをあとからインストールすると、MBRを上書きされてしまいgrubを再度インストールする手間があるが、Windows7からWindows10へアップグレードなどでどんな挙動をするかわからなかったので、この順番を採用した。

FreeBSDのインストール

FreeBSDをインストールする上で、一点ハマったことがあったので、メモしておく。
2.6. ディスク領域の割り当て
ディスク領域の割り当てをするときに、他の領域と同じように作成したパーティションに、直接ルート("/")ディレクトリを割り当てられないということ。

FreeBSDパーティション作成(サンプル画像)

https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/bsdinstall/bsdinstall-part-review.png
これはFreeBSDを単一でインストールする場合のパーティション分けになっている。
マルチブートする場合、この何もマウントしないfreebsd-ufs領域を作成し、その下にもう一つfreebsd-ufs領域を作成して、それにルート("/")ディレクトリを割り当てなければならない。

ada0
    ada0p1 200GB ext4 (Linux)
    ada0p2 80GB  freebsd-ufs   NONE
                    |
                    ----- freebsd-ufs   /
    ada0p3 216GB NTFS 

みたいな。
具体的な画像とか残せたらよかったけど、インストール中のスクリーンショットってどうやって撮るんだろう…。

LinuxBeanでgrubの再インストール

上記のOSを全てインストールできたら、grubの再インストールをする。 LinuxBeanのLiveCDを起動し、ターミナルから以下のコマンドを実行する。

# mount /dev/sda1
# grub-install /dev/sda1

パーティションをマウントしないとビジー状態で書き込みができない、みたいなエラーが出る。
上記のコマンドが成功したら、再起動する。 これで起動時にいつものgrubの画面が表示されるはずだ。

FreeBSD起動メニューの作成

grubLinuxWindowsに関しては自動で起動パーティションを見つけてくれるのだが、FreeBSDファイルシステムは見つけてくれないようだ。
grubからFreeBSD起動する場合は、Grub Customizerでメニューを作成する必要がある。  

Grub Costomizer


このようにFreeBSDの起動メニューは自動では作成されない。
追加ボタンをクリックし、以下の画面を表示する。

Grub Costomizer メニュー追加


ソースタブをクリックし、以下のテキストを貼り付け。

set root='(hd0,msdos2)'
chainloader +1

これでOKすれば完了。
hd0,msdos2はHDDのパーティションをどのように分けたかなど、インストールした環境によって変わる。
こちらの記事とかがわかりやすいので拝読してみるべし。
jp.linux.com

上記の設定完了後、再起動すると、めでたくマルチブート環境の完成だ。

FreeBSDの実際

少しだけ試してみたけど、portsを利用するとコンパイルに時間がかかって大変だった。
デスクトップ環境を構築しようと思ってコンパイルをしていったのだが、依存関係のパッケージをコンパイルする度にオプションを指定しなければならなかった。 その度にコンパイルがストップするので、ずっと監視していなければならずなかなか大変だった。
デスクトップ以外にもvimzshも同様に結構な時間がかかり、単純にlxdeを起動してターミナルからvimを起動するだけでも、FreeBSDインストールを始めてから丸2日ほどかかったと思う。
うーん、今後どのように使っていくべきか考えねばならぬ。
使い方さえしっかり覚えれば爆速環境を構築できるはずなのだが…。

MacOSX El CapitanにHomebrewをインストール

あけましておめでとうございます。

もう1月も半ばとなったが初エントリ。
前職を年末の少し早い時期に退職し、年末年始はおよそ丸半月、無職の期間を過ごした。 この間、次の仕事のために日々IT関連の勉強に励み、中でもネットワーク関連の書籍を3冊ほどざっと読んだ。 ごく簡潔にOSI参照モデルインターネットプロトコルスイート、TCP/IPプロトコルDNSといった基本的な知識を得た。
新年より新入社員としての仕事が始まり、まさに今取り組んでいる作業は「社内にある携帯電話の所在を調べる」である。 年末年始に学んだものが役に立っているようだ(皮肉である)。
けれど、もちろんそれだけが作業内容の全てではなく、ドメインコントローラーや社内で扱っているサーバの管理なども範疇で、まだまだ見えていない楽しい仕事がたくさん待っている模様。 社内SEではなく、実際はITインフラ管理というのが正しい。 その「管理」するものの中には、沼化しているカテゴリも多少あるようだが、そんな五里霧中を雲散霧消するのが僕の当面の仕事である。 美人社員に「Amaizing!!」といって喜んでもらえるように日々仕事に取り組みたい。

Homebrewをインストール

年末年始は、読書ばかりしていても飽きるので、ブログ書いたりPCの設定を結構した。
そしてPCを二台購入した…
ノートとデスクトップ…
いや、だって、社内SE頑張るし…
PC買って勉強したいし…
という自分に対する言い訳を並べ立てて「買い物かごに入れる」をポチった。
まぁそれも含めていくつか面白いこともやったので、順次書いていきたい。

Homebrewの詳細は以下。
Homebrew
Homebrew — OS X 用パッケージマネージャー

MacOSXのパッケージマネージャと呼ばれるもので、Homebrew以外には、

というものがある。気になる人は要チェック。
パッケージマネージャ比較
MacWiki - リスト/UNIXパッケージ

僕はパッケージ管理は何でもよかったのだが、とりあえず最近はHomebrewが主流になってきているということで、これを採用した。
そもそもHomebrewを入れてしたかったことは、Rictyを生成すること。
プログラミング用フォント Ricty http://blog-imgs-60.fc2.com/k/e/n/kenapnet/ricty-005.png プログラミング以外でももちろん使用できるし、非常に読みやすく、僕は多用している。
Ricty著作権上の問題があり、生成物をそのまま頒布することができないようだ。
Rictyの生成にはフォント作成ツールFontforgeが必要、ということで、Fontforgeをインストールできればパッケージマネージャは何でも良かったわけだ。

インストールパスの指定

僕は本当は、Macにパッケージマネージャを入れるつもりはなかった。 MacOS環境が汚れるのはあんまり好むところではない。 ゴリゴリいじり倒しても大丈夫なようにLinuxマシンを使っているのだから。
しかし、少し調べてみると、Macの/usr/local以外にもインストールでき、あまり環境を汚さずにインストールできるようなので、試してみた。

今回は、~/homebrewを作成し、この~/homebrewフォルダ以下にインストールする。
ターミナルから以下を実行する。

Homebrewインストール
$ pwd
/Users/[ユーザ名]

$ curl -L https://github.com/Homebrew/homebrew/tarball/master | tar xz --strip 1 -C homebrew

上記でhomebrewの本体のインストールは完了。 このページAlternative Installsを参照すると良い。
上記のコマンド完了後、~/homebrew/bin環境変数PATHに通す。

Macのターミナルや環境変数PATHは他の記事に譲ろう。

JAVA JDK

Homebrewのインストールが完了し、環境変数PATHの設定もし終えると、brewコマンドが使用可能になる。
このbrewコマンドを使用して、各種パッケージをインストールしていく。

Homebrew パッケージインストール
$ brew install fontforge

パッケージインストールを進めようとすると、JAVA関連のダイアログが表示され、インストールできないことがある。
僕の場合、Fontforgeがまさにそうだった。その場合は下記のページからJava JDKをダウンロードしてインストールしよう。

Java SE Development Kit 8 - Downloads

Java JDK ダウンロードページ イメージ

f:id:tokixy56:20151228034352p:plain
8u65、8u66のどちらでもいい、と思う。
このページで、Accept License Agreementの方にラジオボタンでチェックを入れないとダウンロードできないので注意。 f:id:tokixy56:20151228034402p:plain
Mac用のdmgファイルがあるのでダウンロードしてインストール。
これで問題なくパッケージインストールが可能になる。
レッツコマンドライフ。

Macに対する思い

僕のMacは2009 Midモデルだ。
多少ハードウェアを変えていて、HDDを2TBにし、MacOSXに1TB、Windows10に500GB、LinuxBeanに500GBという設定で使っている。
メモリももちろん8GBに増設。
Macintoshはやっぱり使いやすい。
入力機器が良い。
トラックパッドのジェスチャが好き。
キーボードの軽さも素敵。
ディスプレイも綺麗。

MacOSXも好きだ。
アップグレードされるたびに、不要な機能が増えつつも、UIは洗練され、Windowsに比べても間違いなく使いやすい。
けれど、このゴージャスなPCよりも、おもちゃみたいにレトロなマシンに、LinuxBeanのようなおもちゃみたいなOSを入れて遊ぶのが好きな僕。
僕のこのレトロマシン愛好魂はどこから生まれたのか…未だに解決しない謎である。