2016年9月24日土曜日

ファイルの中身を逆順にするRubyスクリプト

ぐぐってみたけど、しっくりくるものが見つからなかったので、載せておきます。
プログラミング授業の課題でありそうなので、参考にしてください。
#!/usr/local/bin/ruby
require 'fileutils'

orgFile = "original.txt"
newFile = "new.txt"

File.open(newFile, "w") do |new_f|
  File.open(orgFile) do |org_f|
    lines = org_f.readlines # ファイルの中身を一行ずつ読み込み、配列に格納する
    lines.reverse!          # 配列の中身の順序を入れ替える
    lines.each do |s|
      new_f.puts(s)         # 配列の中身を一行ずつファイルに書き込む
    end
  end
end

実行すると、こんな感じになります。
# cat original.txt
1, aaa
2, bbb
3, ccc
# ruby  reverse.rb
# cat new.txt
3, ccc
2, bbb
1, aaa

もちろん、色々なやり方があると思いますが、自分は上のやり方がわかりやすいと思いました。

2016年8月28日日曜日

VirtualBoxのCentOS7入れて、sshでログインできるようにするまで

今までVMware使ってたけど、Mac環境なのでVirtualBoxを入れてみた。
そして、CentOS7をインストールして環境準備したけど。。

ホスト→ゲストに繋がらない。。
WindowsでVMware使ってたときは、ゲストOSのネットワーク設定をブリッジにしたら、ちゃんと別のIPアドレスが割り当てられたのに、VirtualBoxだと別セグメントのIPアドレスが割り当てられている。


色々調べてみると、2種類のNICを準備する必要があることが判明。
  • NAT
  • ホストオンリーアダプター(ネットワーク)
NATのNICで、【VMゲスト(CentOS)】ー【インターネット】との通信を行う。
ホストオンリー〜のNICで、【VMゲスト(CentOS)】ー【VMホスト(Mac)】の通信を行う。
詳細は以下で行うが、ネットワークのイメージはこんな感じ。
(IPアドレス、NIC名はウチで試した結果なので、環境によって異なります)



ホストオンリーアダプターの作成

まずVirtualBoxの設定で、ホストオンリーアダプターを準備する。

  1. VirtualBoxの「環境設定」メニューを選択
  2. 「ネットワーク」⇒「ホストオンリーネットワーク(H)」をクリック
  3. 右側にある一番上のボタンをクリックし、ホストオンリーネットワークを作成



仮想マシンにNICを割り当てる

次に、VMゲストの設定で、NICを2つ割り当てる。
  1. VirtualBoxで作成したVMを選択し、「設定」ボタンをクリック
  2. 「ネットワーク」をクリック
    (デフォルトでアダプター1にNATが割り当てられていることを確認、なければNATを割り当てる)
  3. アダプター2を選択し、ネットワークアダプターを有効化を選択。名前は先程作成したホストオンリーネットワークを選ぶ



仮想マシン上のOSでNICを有効化


最後に、VMゲストのOS上の設定で、NICを有効化する。
ただ、うまく行ってれば、自動的に認識され、有効化されているはず。
確認はifconfigを実行してみる。

# ifconfig
enp0s3: flags=4163  mtu 1500
        ether 08:00:27:4c:ef:c2  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163  mtu 1500
        inet 192.168.56.101  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:fe8e:fbd2  prefixlen 64  scopeid 0x20
        ether 08:00:27:8e:fb:d2  txqueuelen 1000  (Ethernet)
        RX packets 48  bytes 7479 (7.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 42  bytes 7737 (7.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


一瞬、3つ認識されているから大丈夫かと思ったが、インターネットへの通信に失敗している。
よくみると、NATのNIC(enp0s3)がIPアドレス割り当てられていない。
NICの設定を見る。

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

 すると、「ONBOOT=no」となっており、有効化されていなかった。
「ONBOOT=yes」に書き換えてネットワークを再起動。

すると、今度はちゃんとIPアドレスが割り当てられており、インターネットへの接続も成功した。

# ifconfig
enp0s3: flags=4163  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:fe4c:efc2  prefixlen 64  scopeid 0x20
        ether 08:00:27:4c:ef:c2  txqueuelen 1000  (Ethernet)
        RX packets 2  bytes 1180 (1.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9  bytes 1254 (1.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163  mtu 1500
        inet 192.168.56.101  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:fe8e:fbd2  prefixlen 64  scopeid 0x20
        ether 08:00:27:8e:fb:d2  txqueuelen 1000  (Ethernet)
        RX packets 578  bytes 51817 (50.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 334  bytes 57715 (56.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ちなみに、ルーティングテーブルはこんな感じになってるはず。

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 enp0s3
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 enp0s3
192.168.56.0    0.0.0.0         255.255.255.0   U         0 0          0 enp0s8


以上、VirtualBoxでVM作った際のネットワーク設定についてでした。

2016年7月24日日曜日

楽譜として使えるタブレットPCか電子書籍リーダーはないか

楽器を演奏するときに譜面を見るけど、いい加減電子化したい。
大学の頃からPDF化しまくってて、弾きたい楽譜が3桁いっちゃってるのはどうにかしたい。

2年以上前にiPadを購入したときに試しにやろうと思ってPDFの楽譜を表示させてみたけど、全然小さくて使い物にならず。。
やはりA4サイズ以上は欲しいところと思って、A4サイズ以上のタブレットPCとか電子ペーパーを探そうと思った。

・・・ただ、ここで気になったのがA4サイズって何インチなんだろうってこと。
探す前に確認すると、A4は14.3インチだった。ちなみに、A3で20.3インチ。

戻って、タブレットPCを調べるために価格コムへ。
一番大きいサイズで20インチのP社タブレットPCが出てきたけど、30万もするのでボツ。
S社で15.6インチが9万弱だったので、これも高いなぁ。。。

ただ、P社タブレットPCは大体A3、S社タブレットPCはA4くらいのサイズなので、
これ以上小さいのは使えないだろうなぁ・・・なんて思って探すのを中断した。

ミュージシャンの皆さんどうしているんでしょう?やっぱりまだ電子化するには早いのかな。
もっと安く済ますことはできないのかな。。

2016年6月18日土曜日

ubuntuに/var/wwwディレクトリがない

今までRedHat系ばっかり使っていてubuntuを食わず嫌いしてたので、最近触っています(大学生の頃には使ってたけど、そこまでOSに詳しくなかったし)

でもっていきなりはまったのが、「/var/www」ディレクトリが見つからない件。
デフォルトでapacheとかインストールされたりしないんだっけ。。

って思って調べてたら、やっぱりきちんとインストールが必要だったみたい。
デスクトップ版なせいか標準では入らないのかな。

$ sudo apt-get install apache2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています 
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
liblua5.1-0
提案パッケージ:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom
以下のパッケージが新たにインストールされます:
apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap liblua5.1-0
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 82 個。
1,532 kB のアーカイブを取得する必要があります。
この操作後に追加で 6,350 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 libapr1 amd64 1.5.2-3 [86.0 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1 amd64 1.5.4-1build1 [77.1 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1-dbd-sqlite3 amd64 1.5.4-1build1 [10.6 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1-ldap amd64 1.5.4-1build1 [8,720 B]
取得:5 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 liblua5.1-0 amd64 5.1.5-8ubuntu1 [102 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 apache2-bin amd64 2.4.18-2ubuntu3 [918 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 apache2-utils amd64 2.4.18-2ubuntu3 [81.1 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 apache2-data all 2.4.18-2ubuntu3 [162 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 apache2 amd64 2.4.18-2ubuntu3 [86.6 kB]
1,532 kB を 1秒 で取得しました (1,484 kB/s)
以前に未選択のパッケージ libapr1:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 244131 個のファイルとディレクトリがインストールされています。)
.../libapr1_1.5.2-3_amd64.deb を展開する準備をしています ...
libapr1:amd64 (1.5.2-3) を展開しています...
以前に未選択のパッケージ libaprutil1:amd64 を選択しています。
.../libaprutil1_1.5.4-1build1_amd64.deb を展開する準備をしています ...
libaprutil1:amd64 (1.5.4-1build1) を展開しています...
以前に未選択のパッケージ libaprutil1-dbd-sqlite3:amd64 を選択しています。
.../libaprutil1-dbd-sqlite3_1.5.4-1build1_amd64.deb を展開する準備をしています ...
libaprutil1-dbd-sqlite3:amd64 (1.5.4-1build1) を展開しています...
以前に未選択のパッケージ libaprutil1-ldap:amd64 を選択しています。
.../libaprutil1-ldap_1.5.4-1build1_amd64.deb を展開する準備をしています ...
libaprutil1-ldap:amd64 (1.5.4-1build1) を展開しています...
以前に未選択のパッケージ liblua5.1-0:amd64 を選択しています。
.../liblua5.1-0_5.1.5-8ubuntu1_amd64.deb を展開する準備をしています ...
liblua5.1-0:amd64 (5.1.5-8ubuntu1) を展開しています...
以前に未選択のパッケージ apache2-bin を選択しています。
.../apache2-bin_2.4.18-2ubuntu3_amd64.deb を展開する準備をしています ...
apache2-bin (2.4.18-2ubuntu3) を展開しています...
以前に未選択のパッケージ apache2-utils を選択しています。
.../apache2-utils_2.4.18-2ubuntu3_amd64.deb を展開する準備をしています ...
apache2-utils (2.4.18-2ubuntu3) を展開しています...
以前に未選択のパッケージ apache2-data を選択しています。
.../apache2-data_2.4.18-2ubuntu3_all.deb を展開する準備をしています ...
apache2-data (2.4.18-2ubuntu3) を展開しています...
以前に未選択のパッケージ apache2 を選択しています。
.../apache2_2.4.18-2ubuntu3_amd64.deb を展開する準備をしています ...
apache2 (2.4.18-2ubuntu3) を展開しています...
libc-bin (2.23-0ubuntu3) のトリガを処理しています ...
man-db (2.7.5-1) のトリガを処理しています ...
systemd (229-4ubuntu6) のトリガを処理しています ...
ureadahead (0.100.0-19) のトリガを処理しています ...
ufw (0.35-0ubuntu2) のトリガを処理しています ...
libapr1:amd64 (1.5.2-3) を設定しています ...
libaprutil1:amd64 (1.5.4-1build1) を設定しています ...
libaprutil1-dbd-sqlite3:amd64 (1.5.4-1build1) を設定しています ...
libaprutil1-ldap:amd64 (1.5.4-1build1) を設定しています ...
liblua5.1-0:amd64 (5.1.5-8ubuntu1) を設定しています ...
apache2-bin (2.4.18-2ubuntu3) を設定しています ...
apache2-utils (2.4.18-2ubuntu3) を設定しています ...
apache2-data (2.4.18-2ubuntu3) を設定しています ...
apache2 (2.4.18-2ubuntu3) を設定しています ...
Enabling module mpm_event.
Enabling module authz_core.
Enabling module authz_host.
Enabling module authn_core.
Enabling module auth_basic.
Enabling module access_compat.
Enabling module authn_file.
Enabling module authz_user.
Enabling module alias.
Enabling module dir.
Enabling module autoindex.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module filter.
Enabling module deflate.
Enabling module status.
Enabling conf charset.
Enabling conf localized-error-pages.
Enabling conf other-vhosts-access-log.
Enabling conf security.
Enabling conf serve-cgi-bin.
Enabling site 000-default.
libc-bin (2.23-0ubuntu3) のトリガを処理しています ...
systemd (229-4ubuntu6) のトリガを処理しています ...
ureadahead (0.100.0-19) のトリガを処理しています ...
ufw (0.35-0ubuntu2) のトリガを処理しています ...


ちゃんとブラウザでも見れることをチェック。

2016年4月3日日曜日

続:自宅のデータ管理について考える (実はランサムウェア対策にもなっていた我が家の管理方法)

過去の記事で、自宅のデータ管理を考えてみたが、今の我が家のやり方をまとめた。
と言うのも、半年近く前になるけど、メインPCを新型Mac(21インチ 4K)に新調し、デスクトップまわりをすっきりさせた。(今は他の書類とかでぐちゃぐちゃで見せれませんが・・)

なので、今はMac1台とデスクトップPC1台を使っている。
ただ、デスクトップPCがVM動かす用になっており、必要性が限りなく低い状況なので、メインで使っているMacのデータ管理方法を教えます。

ハードウェア構成

  • MacのストレージをFusion Drive 1TBにカスタマイズ
  • 外付けHDDとして"KURO-DACHI/CLONE/U3"を使ってWDのHDD 2TBを接続
"KURO-DACHI/CLONE/U3"については、過去の記事でも書いたけど、常に2台のHDDを繋いでおくと、2つともドライブがマウントされてしまい、データの整合性が取れなくなる可能性があるため、メインHDDとバックアップ用HDDに分けておく。

次にソフトウェア(OSとか)設定です。

ソフトウェア設定

  • 外付けHDDは常時USB接続して利用。
  • 外付けHDDのパーティションを、通常利用向け(1TB)と、TimeMachineバックアップ向け(1TB)に分ける。
  • TimeMachineでバックアップとるとき、外付けHDDは除外。Fusion Driveのみバックアップを取る。

実際のイメージは以下のようになります。
あえてパーティションを分けたのは、外付けHDDの用途として「ディスク容量拡張用」と「バックアップ用」の2つがあって、それぞれを満たしたかったため。
 また、TimeMachineの設定で外付けHDDを除外にしないと、自分のHDD内部の資源を同じHDDにバックアップすることとなってしまい、ディスク領域を無駄遣いするためです。

効果・メリット

  • HDDをUSBで常時接続することで、TimeMachineで毎時バックアップを取ることが可能
  • KURO-DACHIを利用することで、HDDのバックアップを定期的に取ることができ、RAID0のように安全なバックアップが取れること
  • バックアップHDDをバックアップ時以外は取り外しておくことで、HDDの故障時にはそのまま復旧が可能
  • さらにランサムウェア対策として必須である「オフラインのディスクへのHDDバックアップ」を実現
二種類のバックアップにより、例えば以下のパターンのように復旧の幅が広がるのが良いなと思った。

  • 必要だったデータを誤って削除してしまった→【TimeMachineから復旧】
  • なんらかの問題でデータが破損してしまった→【TimeMachineから復旧】
  • HDDが壊れた→【別HDDのバックアップを利用して復旧】
  • ランサムウェアなどのウィルス感染してしまった →【別HDDのバックアップを利用して復旧】

他の人でがっつりバックアップ取ったりしてる人のも見るけど、手間がかかってめんどくさそうに思えたので、自分のできる範囲で結構しっかりとしてデータ管理ができるようになってよかった。
今後はデータの中身を整理しなきゃ・・・