2016年5月3日火曜日

Ubuntu 14.04LTSから16.04LTSにアップデートする手順

Ubuntu 16.04LTS が2016/4/22(日本時間)にリリースされましたね。

UbuntuのLTS (Long Term Support)版は5年間のセキュリティアップデートなどのサポートが付いているので、 急いで次版にアップデートする必要も無いでしょうが、 せっかくなので最新版への更新手順をメモします。デスクトップ版であればGUIからも更新できますが、コマンドを前提の手順を示します。

普段のアップデート手順

下記コマンドで普段のアップデートは実施しているかと思います。

$ sudo apt-get update
$ sudo apt-get upgrade

下準備

バックアップなど必要に応じて作業しておいてください。

do-release-upgradeコマンドがない場合はパッケージを追加してください。

$ sudo apt-get install update-manager-core

手順1

まずアップデート前のバージョンを確認しておきます。

$ lsb_release -d
Description:    Ubuntu 14.04.4 LTS

Ubuntu 14.04LTS版のログイン画面でのバージョン表示 デスクトップ版であれば、ログイン時にバージョンも表示されています。

コマンドからも確認は可能です。

手順2

リリースチャネルを確認

$ cat /etc/update-manager/release-upgrades

Prompt=lts」になっていれば、LTS版のみが更新対象となります。

手順3

$ sudo do-release-upgrade

2016/5/3時点では、 実行しても新しいリリースがないと表示されるかと思います。

新しい Ubuntu のリリースをチェックしています
新しくリリースされたものはありません

これは「http://changelogs.ubuntu.com/meta-release-lts」にまだ16.04LTSが記載されていないから、だと思います。

またSSHからコマンドを実行した場合にも警告メッセージが表示されることがあります。万が一に備えてリモートではなく直接マシンにログインしたほうが良いです。

手順4

手順3でダメな場合は、「-d」オプションを付けて開発版も対象にしてしまいます。

$ sudo do-release-upgrade  -d

手順5

アップグレードの確認メッセージが表示されます。

アップグレードを開始しますか?
XX 個のパッケージが削除されます。XXX個の新規パッケージがインストールされます。XXXX個のパッケージがアップグレードされます。
合計 978 M をダウンロードする必要があります。このダウンロードは約 3 分かかります。
アップグレードをインストールするのに数時間かかることがあります。ダウンロードが完了してしまうと、処理はキャンセルできません。

yを押して続行します。

ダウンロードと展開が始まります。それなりに時間がかかりますので、そのまま正座で待機します。

手順6

パッケージの削除するかどうかを質問されます。削除する場合はyを入力して続行します。

古いソフトウェアを検索しています
パッケージリストを読み込んでいます... 完了  
依存関係ツリーを作成しています           
状態情報を読み取っています... 完了      
データ構造を構築しています... 完了      
データ構造を構築しています... 完了      

サポートが中止された(あるいはリポジトリに存在しない)パッケージを削除しますか? 


258 個のパッケージが削除されます。 

パッケージの削除に数時間かかることがあります。 

 続行する[yN]  詳細 [d]

手順7

再起動の確認メッセージが表示されます。 再起動する場合はyを入力して再起動します。

手順8

起動が完了すると、ログイン画面に「16.04LTS」の表示が確認できます。 コマンドを実行してバージョンを確認します。

$ lsb_release -d
Description: Ubuntu 16.04 LTS
$ 

コマンドからのバージョン確認例

デスクトップ版でのログイン時のバージョン表示(16.04LTS)。

これでアップグレードは終わりです。お疲れ様でした。

2016年1月5日火曜日

Mac OSX (El Captian)でbrew updateが動かなかった時に確認すべき対処法

年末の休暇を使ってやっとMacのOS更新をやったのですが、 Mac OS XをEl Captianにアップデートしてから、brew updateがうまく動きませんでした。 下記対処でbrew updateできたのでメモ。

ステップ1:PATHを確認。

しょっぱなからつまずき。なんでコマンドが無いんだよ〜


% brew update
zsh: command not found: brew
% echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin

brewコマンドへのPATHが通っていないみたいですね。私の場合は「/usr/local/bin」がなかったので、一時的に追加して様子を見ます。


% PATH=/usr/local/bin:${PATH}
% export PATH
% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
% which brew
/usr/local/bin/brew
% brew --help
Example usage:
....省略....

うん、動いておる。

毎回PATHを設定するわけにも行かないので、次回以降のためにPATHの設定をしてしまいましょう。
~/.zshenvをエディタで開いて、
PATH=/usr/local/bin:${PATH}
または
path=(/usr/local/bin(N-/) $path)
とします。
この「(N-/)」の意味はつぎのサイトを参照。ディレクトリパスが存在しない時に空白に置換することで、無視させるテクニックです。複数のPCで.zshenvを共有する場合に便利なので、何も考えずにとにかくつけまくっておけば良いと思う。
(参考)http://qiita.com/mollifier/items/42ae46ff4140251290a7.

ステップ2:パーミッションを確認

ようやくbrewコマンドが実行できるのでためしてみると、エラーが出ますね。


% brew update
error: unable to unlink old '.gitignore' (Permission denied)
error: unable to create file .travis.yml (Permission denied)
error: unable to unlink old '.yardopts' (Permission denied)
error: unable to unlink old 'CODEOFCONDUCT.md' (Permission denied)
error: unable to unlink old 'CONTRIBUTING.md' (Permission denied)
error: unable to unlink old 'LICENSE.txt' (Permission denied)
error: unable to unlink old 'README.md' (Permission denied)
error: unable to unlink old 'SUPPORTERS.md' (Permission denied)
Checking out files: 100% (3823/3823), done.
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

% brew update
Error: The /usr/local directory is not writable.
Even if this directory was writable when you installed Homebrew, other
software may change permissions on this directory. Some versions of the
"InstantOn" component of Airfoil or running Cocktail cleanup/optimizations
are known to do this.

You should probably change the ownership and permissions of /usr/local
back to your user account.
  sudo chown -R $(whoami):admin /usr/local

パーミッションがrootになっているのが原因のようです。brewコマンドのエラーメッセージ通り、chownコマンドを実行してやります。


% sudo chown -R $(whoami):admin /usr/local
Password:
% ls -ld /usr/local

うん、パーミッション変わりました。

ステップ3:アップデート実行!


% brew doctor
% brew update
% brew upgrade

brew upgradeコマンドでは途中でmake bootstrapが走るため数十分くらいかかりましたが、無事成功です!

最後に

それにしてもbrewコマンドのエラーメッセージは優秀ですね。エラーとなる要因(機械的)を示すだけでなく、オペレータ(作業者)が読める形でのエラー説明があり、次に取るべきアクション・解決策をも提示してくれています。こんなエラーメッセージを設計できるなんて、すごいエンジニアだと思います。

2016年1月4日月曜日

尊敬できる人って、具体的にどんな人なの?

「尊敬できる人が好きです」

合コンに行くと、こんなことを言う女の子がいる。

でも、尊敬できる人ってなんだろう。でかい仕事をしていれば尊敬できる人なのだろうか?英語が喋れたら尊敬できる人なのだろうか?料理が上手なら?大金を動かしていたら?部下が多ければ?給料が高ければ?……。

そんなことを考えていた。


年末に読んだ本に松下幸之助の言葉が載っていた。
こんなエピソードだった。
#有名なエピソードだそうで、検索すれば原文や原典が詳しく出てくるかと思う。

❝ まだ松下電器が創業間もない頃、電球工場で、電球を磨くだけの仕事がありました。 従業員もつまらなそうに磨いていると、松下幸之助が声をかけてきます。 正直に「つまらないです。誰でもできる仕事です」と応えると、こう諭しました。

この電球はどこで光っているか知っているか? 君が電球を磨くことで、街頭に明かりがつく。駅から家に安心して帰れる。子供が本を読むことができる。 あなたは電球を磨いてるのではなくて、人の夢を磨いているんだ ❞


やっと気が付いた。

百億円のプロジェクトを回しているから尊敬できる?お茶を淹れるだけの仕事だから……?
そんなことじゃあない。そんな目先のことで、尊敬できるかどうかなんて決まりっこない。

尊敬できる人っていうのは目先のことだけを見るのではなくて、自分のことだけを考えるのではなくて。 その先にいる人のこと、誰かのために出来ることを考えているのだろうと。


あけましておめでとうございます。
そんな、尊敬できる人になるため、本年も邁進して参りますので、よろしくお願いします。