USB外付けHDDを接続する

さて、今度は bigswifty に USB の外付け HDD を接続してみる。
マシンを起動した状態で繋いで見ると次のようになる。

[takatoh@bigswifty ~]$ sudo blkid
[sudo] takatoh のパスワード:
/dev/sda1: UUID="4c426dd3-8999-4bc0-ba95-2a21ffe751f1" TYPE="xfs" 
/dev/sda2: UUID="3JSzi4-m7uB-BxAK-ue4f-DaUl-d3G5-pIbs9U" TYPE="LVM2_member" 
/dev/mapper/centos_bigswifty-root: UUID="b05ee492-4803-4e72-9b6b-e180623577f0" TYPE="xfs" 
/dev/mapper/centos_bigswifty-swap: UUID="48a4fa87-45ef-4fce-acaf-3020d65d8874" TYPE="swap" 
/dev/mapper/centos_bigswifty-home: UUID="4e1e2a4f-ebce-49e9-bf84-4c5e53306c6a" TYPE="xfs" 
[takatoh@bigswifty ~]$ lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                         8:0    0 232.9G  0 disk 
├─sda1                      8:1    0     1G  0 part /boot
└─sda2                      8:2    0 231.9G  0 part 
  ├─centos_bigswifty-root 253:0    0    50G  0 lvm  /
  ├─centos_bigswifty-swap 253:1    0   3.8G  0 lvm  [SWAP]
  └─centos_bigswifty-home 253:2    0 178.1G  0 lvm  /home
sdb                         8:16   0 931.3G  0 disk

sudo blkid コマンドでは出てこないけど lsblk コマンドでは sdb ってのが出てくる。これが外付け HDD だろう。もともとは Windows マシンで使っていたものだけど、ディスク消去ソフトでデータを消去してあるので、ファイルシステムも何もない。これを ext4 にフォーマットして使う。

まずはパーティションを切ることから。

[takatoh@bigswifty ~]$ sudo fdisk /dev/sdb
[sudo] takatoh のパスワード:
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x7a9ef1d0.

コマンド (m でヘルプ): p

Disk /dev/sdb: 1000.0 GB, 1000010997760 bytes, 1953146480 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x7a9ef1d0

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
パーティション番号 (1-4, default 1): 
最初 sector (2048-1953146479, 初期値 2048): 
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-1953146479, 初期値 1953146479): 
初期値 1953146479 を使います
Partition 1 of type Linux and of size 931.3 GiB is set

コマンド (m でヘルプ): p

Disk /dev/sdb: 1000.0 GB, 1000010997760 bytes, 1953146480 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x7a9ef1d0

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1            2048  1953146479   976572216   83  Linux

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

パーティションができたら、次はフォーマット。

[takatoh@bigswifty ~]$ sudo mkfs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
61038592 inodes, 244143054 blocks
12207152 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2392850432
7451 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done     

これでOK。確かめてみる。

[takatoh@bigswifty ~]$ sudo blkid
/dev/sda1: UUID="4c426dd3-8999-4bc0-ba95-2a21ffe751f1" TYPE="xfs" 
/dev/sda2: UUID="3JSzi4-m7uB-BxAK-ue4f-DaUl-d3G5-pIbs9U" TYPE="LVM2_member" 
/dev/mapper/centos_bigswifty-root: UUID="b05ee492-4803-4e72-9b6b-e180623577f0" TYPE="xfs" 
/dev/mapper/centos_bigswifty-swap: UUID="48a4fa87-45ef-4fce-acaf-3020d65d8874" TYPE="swap" 
/dev/mapper/centos_bigswifty-home: UUID="4e1e2a4f-ebce-49e9-bf84-4c5e53306c6a" TYPE="xfs" 
/dev/sdb1: UUID="3bdf3a15-2722-4992-9c77-cf1c2349b385" TYPE="ext4" 
[takatoh@bigswifty ~]$ lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                         8:0    0 232.9G  0 disk 
├─sda1                      8:1    0     1G  0 part /boot
└─sda2                      8:2    0 231.9G  0 part 
  ├─centos_bigswifty-root 253:0    0    50G  0 lvm  /
  ├─centos_bigswifty-swap 253:1    0   3.8G  0 lvm  [SWAP]
  └─centos_bigswifty-home 253:2    0 178.1G  0 lvm  /home
sdb                         8:16   0 931.3G  0 disk 
└─sdb1                      8:17   0 931.3G  0 part

最後に、/etc/fstab ファイルに設定を書き込んで再起動すればマウントされるはずだ。マウントポイントは /mnt/wiwaxia にした。

# USB HDD - WIWAXIA
UUID=3bdf3a15-2722-4992-9c77-cf1c2349b385 /mnt/wiwaxia ext4 defaults 0 0

再起動した結果、次のようになった。

[takatoh@bigswifty ~]$ lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                         8:0    0 232.9G  0 disk 
├─sda1                      8:1    0     1G  0 part /boot
└─sda2                      8:2    0 231.9G  0 part 
  ├─centos_bigswifty-root 253:0    0    50G  0 lvm  /
  ├─centos_bigswifty-swap 253:1    0   3.8G  0 lvm  [SWAP]
  └─centos_bigswifty-home 253:2    0 178.1G  0 lvm  /home
sdb                         8:16   0 931.3G  0 disk 
└─sdb1                      8:17   0 931.3G  0 part /mnt/wiwaxia
[takatoh@bigswifty ~]$ df -h
ファイルシス                      サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos_bigswifty-root    50G  3.9G   47G    8% /
devtmpfs                            1.8G     0  1.8G    0% /dev
tmpfs                               1.8G   30M  1.8G    2% /dev/shm
tmpfs                               1.8G  9.7M  1.8G    1% /run
tmpfs                               1.8G     0  1.8G    0% /sys/fs/cgroup
/dev/sda1                          1014M  223M  792M   22% /boot
/dev/sdb1                           917G   77M  870G    1% /mnt/wiwaxia
/dev/mapper/centos_bigswifty-home   179G  305M  178G    1% /home
tmpfs                               359M   32K  359M    1% /run/user/1000

CentOS7: ノートPCを閉じてもサスペンドさせない

CentOS をインストールしたノートPCをサーバとして動かすとき、ふだんは閉じていると思う。だけど、デフォルトの設定では、閉じるとサスペンドしてしまって、サーバの役目を果たさない。これはどうにかしなきゃならない。
というわけで、ググってみたらちょうどそのまんまの記事をみつけた。

cf. CentOS7でノートPCを閉じてもサスペンドさせない – Qiita

/etc/systemd/logind.conf ファイルを下のように編集する。

#HandleSuspendKey=suspend
#HandleHibernateKey=hibernate 
#HandleLidSwitch=suspend
HandleSuspendKey=ignore 
HandleHibernateKey=ignore
HandleLidSwitch=ignore

コメントアウトしてあるのがもともとの設定(もとからコメントアウトしてあった)で、下の 3 行が変更した設定。
logind をリスタートして変更を反映させる。

[takatoh@bigswifty ~]$ sudo systemctl restart systemd-logind

これで一晩おいてから確かめてみると、閉じている状態でもちゃんと動いていることが確認できた。

CentOS7でNginxを動かす

OS のインストールが終わった bigswifty、Web サーバにするので Nginx をインストールする。と言っても、過去記事があるのでそこにリンクするだけにしておく。

cf. CentOS 7にNginxをインストールする

上の記事に、インストールからファイアウォールの設定、Nginx の起動まで書いてある。

別のマシンからブラウザでアクセスしてみて、ちゃんと動いているのを確認した。

新しいノートPCにCentOS7をインストールした

新しいといっても中古だけど。
インターネットに公開してるサーバのバックアップにしようと思って、HP のノートPCを中古で買ったんだ。4年落ちくらいの Windows7 Pro がインストールされてるやつ。で、サーバにするので、Windows はサクッと消して CentOS をインストールしようというわけ。

修復ディスクの作成

万が一、CentOS がインストールできなくても Windows PC として使えるように、修復ディスクを作っておく。USB メモリを買っておいたんだけど、Windows 7 では DVD にしか作れないようだ。無駄になった。
それはさておき、コントロールパネル → システムとセキュリティ → バックアップと復元 とたどって開いたウィンドウの左側にある、「システム修復ディスクの作成」を選んで修復ディスクを作成した。

CentOS 7のインストール

9月に、nightschool にインストールしたのと同じ CentOS 7.5 1804 のディスクを使う。
ノートPC の電源を入れ、起動の途中で ESC キーを押してセットアップメニューに入る。F9 のブートオプションから USB CD/DVD ブートを選んで起動する。ソフトウェアの選択では「サーバ(GUI使用)」を選んだ。ユーザー takatoh を管理者として作成。ホスト名は bigswifty。
後はインストールが済むのを待つ。
終わると再起動して、ライセンスに同意。これでインストール終了。

日本語入力

左上のメニューから、アプリケーション → システムツール → 設定 → 地域と言語 とたどって、入力ソースのところで + ボタンを押し、「日本語(かな漢字)」を追加する。これで、Windowsキー + スペースキーで日本語入力に切り替えられるようになった。

パッケージのアップデート

[takatoh@bigswifty ~]$ sudo yum update

361個のパッケージがアップデートされた。

さて、ひとまずここまで。

Dropboxに接続できなくなった

メインの Windows 10 マシン(montana)で、Dropbox に接続できなくなった。
いつからかはわからないけどファイルの同期ができなくなっていて、それで仕方がなく再インストールするも、インストール自体はできるけど、その後の設定の場面で「ご使用のコンピュータは現在オフラインです。ネットワーク設定をご確認ください。」のメッセージが出て接続できない。

ブラウザでは問題なく Dropbox のサイトに接続できているし、ほかの Windows 10 マシン(sofa と flambay)でも Dropbox に接続(っていうか同期)できている。なぜか montana だけができない状態。

目下のところ打つ手なし。お手上げ状態。どうすりゃいいんだ。

UbuntuでBitbucketからgit cloneできなくなったのはIPv6のせいらしい

一昨日の問題、解決した。どうも IPv6 で Bitbucket に接続しようとしていたかららしい。↓このページが役に立った。

cf. 突然Bitbucketにgitで接続できなくなったらIPv6関連を疑ってみるとよいかも 2016/07/20 – Qiita

IPv4 で接続するようにするには、下のような ~/.ssh/config ファイルを作ってやればいい。

Host bitbucket.org
HostName bitbucket.org
AddressFamily inet

これで bitbucket.org には IPv4 で接続するようになる。

takatoh@apostrophe $ git clone [email protected]:takatoh/grp.git
Cloning into 'grp'...
remote: Counting objects: 638, done.
remote: Compressing objects: 100% (392/392), done.
remote: Total 638 (delta 382), reused 343 (delta 229)
Receiving objects: 100% (638/638), 509.65 KiB | 658.00 KiB/s, done.
Resolving deltas: 100% (382/382), done.
Checking connectivity... done.

できた。

UbuntuでBitbucketからgit cloneできなくなった

今朝試したら、SSH での git clonegit pull ができなくなっていた。HTTPS では clone できる。git push は試してない。
また、Windows マシンでは SSH で問題なく clone できる。

SSH の鍵を変えたわけでも、他の設定を変えたわけでもない。確か先週は普通にできたはずだ。
GitHub では問題ない。

SSH の鍵を登録しなおしてもダメ。どうすりゃいいんだ?

症状はこんな感じ。Bitbucket。

takatoh@apostrophe $ git clone [email protected]:takatoh/grp.git
Cloning into 'grp'...
Connection to bitbucket.org closed by remote host.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Github は大丈夫。

takatoh@apostrophe $ git clone [email protected]:takatoh/jscale.git
Cloning into 'jscale'...
remote: Enumerating objects: 39, done.
remote: Counting objects: 100% (39/39), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 274 (delta 19), reused 36 (delta 19), pack-reused 235
Receiving objects: 100% (274/274), 34.27 KiB | 0 bytes/s, done.
Resolving deltas: 100% (115/115), done.
Checking connectivity... done.

リスト(配列)の中で隣り合う同じ値をグループ化する(3)

しつこいようだけど、今度は Go でやってみた。

package main

import (
    "fmt"
)

func main() {
    var l1 = []int{1, 1, 2, 2, 3, 1, 1}
    var l2 = []int{}

    fmt.Printf("%v\n", adjacentGroup(l1))
    fmt.Printf("%v\n", adjacentGroup(l2))
}

func adjacentGroup(l []int) [][]int {
    var result [][]int

    if len(l) == 0 {
        return result
    }

    var current = []int{l[0]}
    for i := 1; i < len(l); i++ {
        if current[0] == l[i] {
            current = append(current, l[i])
        } else {
            result = append(result, current) current = []int{l[i]}
        }
    }
    result = append(result, current) return result
} 
^o^ > go run adjacentGroup.go
[[1 1] [2 2] [3] [1 1]]
[]

リスト(配列)の中で隣り合う同じ値をグループ化する(2)

こないだのやつを Scheme と Haskell でやってみた。

まずは Scheme 版。

(define adjacent-group
  (lambda (lis)
    (let loop ((l (cdr lis)) (c (car lis)) (r (cons (list (car lis)) '())))
      (if (null? l)
          (reverse (map reverse r))
          (if (= (car l) c)
              (loop (cdr l) c (cons (cons (car l) (car r)) (cdr r)))
              (loop (cdr l) (car l) (cons (list (car l)) r)))))))

(print (adjacent-group '(1 1 2 2 3 1 1)))
^o^ >gosh adjacent-group.scm
((1 1) (2 2) (3) (1 1))

基本的な考え方は、Ruby や Python のと同じ。ちょっと工夫したのは、先頭の要素を最初から結果のリストに入れたこと。これで分岐条件が1つ減った。
……のはいいんだけど、これって引数に空リストが来た時のことが考えられてないじゃないか。まあ、グループ化しようというんだから空リストは考えなくてもいいか……ホントか?

さて、Haskell 版。こっちはちゃんと空リストが来ても大丈夫(実行例は示さないけど)。

adjacentGroup :: [Int] -> [[Int]]
adjacentGroup [] = []
adjacentGroup (x:xs) = reverse $ map reverse $ foldl f [[x]] xs
  where
    f (y:ys) z = if head y == z
                 then (z:y):ys
                 else (z:[]):y:ys

main :: IO()
main = print $ adjacentGroup [1, 1, 2, 2, 3, 1, 1]
^o^ >runhaskell adjacentGroup.hs
[[1,1],[2,2],[3],[1,1]]

[追記](9/27)

Scheme 版を空リスト対応にした。分岐条件が1つ増えた。

(define adjacent-group
  (lambda (lis)
    (let loop ((l lis) (c (undefined)) (r '()))
      (if (null? l)
          (reverse (map reverse r))
          (cond
            ((undefined? c) (loop (cdr l) (car l) (cons (list (car l)) r)))
            ((= (car l) c) (loop (cdr l) c (cons (cons (car l) (car r)) (cdr r))))
            (else (loop (cdr l) (car l) (cons (list (car l)) r))))))))

(print (adjacent-group '(1 1 2 2 3 1 1)))
(print (adjacent-group '()))
^o^ >gosh adjacent-group2.scm
((1 1) (2 2) (3) (1 1))
()

[さらに追記](9/28)

分岐条件を工夫して2つに減らせた。cond じゃなく if になった。

(define adjacent-group
  (lambda (lis)
    (let loop ((l lis) (c (undefined)) (r '()))
      (if (null? l)
          (reverse (map reverse r))
          (if (and (not (undefined? c)) (= (car l) c))
              (loop (cdr l) c (cons (cons (car l) (car r)) (cdr r)))
              (loop (cdr l) (car l) (cons (list (car l)) r)))))))

(print (adjacent-group '(1 1 2 2 3 1 1)))
(print (adjacent-group '()))
^o^ > gosh adjacent-group3.scm
((1 1) (2 2) (3) (1 1))
()

サーバのOSをUbuntuからCentOSに変えた

やっと書く気になってきた。
インターネット回線を乗り換えたので、一昨日、その工事があった。その関係で外部公開している WEB サーバを止めなくちゃいけなかったので、ついでにサーバの OS をクリーンインストールすることにした。というのも、どういうわけだかわからないけどずっとサーバの調子が悪くてたびたび WEB サーバが落ちる、ということが続いていて、それも最近は頻度が多くなっていたから。で、ちょうどいいので OS のインストールからやり直すことにしたってわけ。OS はタイトルのとおり、Ubuntu から CentOS に変更した。この記事はその顛末。
といっても、CentOS のインストールと WEB サーバ、アプリの構築は去年の年末から今年にかけて一度やっているので、細かくは書かずにリンクを置くだけにする。

CentOS のインストール

最新の CentOS 7.5 1804 の ISO イメージをダウンロードして、DVD に焼いて使った。

cf. CentOS 7のインストール
cf. CentOSのアップデート

最低限のソフトウェアのインストール

Git、Ruby、ImageMagick をそれぞれ yum install でインストールした。今回、rbenv は使わなかった。yum でインストールした Ruby は 2.0.0 と古いけど、構築する予定の WEB アプリでは最近の新しい機能は使っていないのと、サービスとして rbenv の環境を使うのは煩わしいと感じたのでそうした。ImageMagick もアプリで使う。

一般ユーザーで sudo できるようにする

cf. 一般ユーザーでsudoできるようにする

USB 外付け HDD

cf. USBの外付けHDDを使ってみる
これはもとから使っていた HDD を繋いだ。OS が変わってうまく使えるか心配したけど、結果的には、ディレクトリとファイルの所有者を chown で変えてやればそのまま使えた。

Nginx

WEB サーバには前と同じ Nginx。
cf. CentOS 7にNginxをインストールする

WEBアプリの構築

cf. SinatraアプリをCentOSで動かす(2)

Nginxで仮想サーバー

cf. Nginxを使って仮想サーバーをたてる

問題発生と解決(暫定的)

さて、ここまでは順調にきた。けど、Nginx で立てた仮想サーバーにアクセスしても 502 Bad Gateway が返ってきてしまう。Nginx も WEB アプリも正常に動いているように見える。ここで行き詰まった。
長々と書くつもりはないので、結果を書くと、SELinux のセキュリティに引っかかっているようだった。で、その SELinux というのがよくわからない。ググってみるとちゃんと解決する方法は見つからなくて、無効にする方法ばかり。仕方がないので暫定的に SELinux を無効にして当面の解決策とすることにした。

SELinux を無効にするには、/etc/selinux/config ファイルのつぎの箇所を変更する。

#SELINUX=enforcing
SELINUX=disabled

上のコメントアウトしてある行がデフォルトの設定。これを下の行のように disabled にした。
これで再起動すれば OK。

本当は SELinux をちゃんと理解して使わなきゃいけないところだけど、なにせ情報が少ない。今後の課題だな。

あ、あと書き忘れてたけど、ホスト名は nightschool にした。

というところで、今日はここまで。