OSのアップデートPCメモPC関係のメモ、気付いたこと。OSをいじって遊んでいます。OSのカスタムビルドを配布しています。ないブログに表示されています。新しい記事を書く事で広告が消えます。OSのアップデートやパッケージの追加を試してみようと思います。server"のページをほとんどそのまま試していますので正確なことが知りたい方はそちらを参照してください。OSのビルド環境上で起動することのできるHTTPベースのサーバで、以下のような機能があります。オートアップデートができる手動での更新も可能パッケージ単位でのダウンロード・インストールができる。このとき、ビルドしていないものであればサーバでパッケージをビルドさせてからそれをダウンロード・インストールすることができる。OSの更新ができるようになりますのでかなり便利です。OSのSDKが必要です。OSのビルドを行っていることが必要です。OSのビルドの手順はこちらの記事にまとめていますので参考にしていただければと思います。serverの起動は非常に簡単です。cros_sdkでchroot環境を立ち上げてstart_devserverコマンドを実行するだけです。serverはデフォルトではビルドマシンのTCPポート8080を使用します。変更する場合は--portオプションで変更できます。OSの実機から接続があればすぐにわかります。serverに接続しに行くための設定は/etc/lsb-releaseというファイルに記述されています。このファイルの下2行に以下のような記述があります。OSのビルド時に自動で格納されています。serverを起動すればすぐ使えるようになります。server上のビルドイメージのほうが新しければ勝手に更新が始まります。更新が始まってしばらくすれば以下のように再起動を促す画面が表示されます。この状態で再起動すれば、以下のように更新されたOSが起動します。この例では35.0.1902から35.0.1916に更新されています。私はChromebookは持っていませんので推測ですが、おおむねChromebookと変わらないような感じで更新できているのではないでしょうか。少なくともいちいちUSBに焼いて再インストールするよりははるかにましです。厄介といえば厄介なのが、このヘルプページを開くと「勝手に更新が始まってしまう」という点です。メーカーがビルドしたOSならともかく自分で適当にビルドしたものだと、ふとしたはずみで勝手に更新されてしまうのはちょっと困るという場合もあります。勝手に更新されるのが嫌なら、/etc/lsb-releaseにはあえてでたらめなアドレスを書いておき、コマンドラインから手動で更新する、という方法があります。OSの実機上でCtrl+Alt+F2でターミナルを開き、以下のコマンドを実行します。server上にある最新のビルドイメージに更新されます。--omaha_urlを省略した場合は/etc/lsb-releaseのCHROMEOS_AUSERVERの値が使われます。serverのほうが古くても更新がかかります。server上の一番新しいイメージのようです。これをコマンドラインから選択する方法はまだわかっていません。serverを起動することで古いイメージに戻すことができますが、同一chroot環境でいくつもビルドイメージを持っている場合は、今のところサーバ側で細工しない限り古いバージョンへ戻す方法がわかっていません。この方法ではROOTパーティションが丸ごと新しいイメージに書き換わります。そのため、更新前の環境でROOTパーティションに対して何らかの変更を行っているとその内容がすべて消えます。影響が大きいのは後付けでPDFやFlashなどのプラグインをインストールしているケースだと思いますが、基本的には再度入れなおしになります。したらビルド時にlibpepflashplayer.soやlibpdf.soをSTATEパーティションへのシンボリックリンクにしたイメージを作っておいてこれらのプラグインをSTATEパーティションに入れるようにすれば更新時に消えないようにできるかもしれませんが、そもそもこれでちゃんと動くかどうかはまだ試してはいません。個人で使うだけならビルド時にプラグインを含めてイメージを作っちゃうのが一番楽かもしれませんが、これもまだ試してはいません。上記の方法で更新されるのはROOTパーティションのみです。/usr/localなどが置かれているSTATEパーティションを更新する場合は、ターミナルからstateful_updateというコマンドを実行する必要があるということです。404エラーが出てしまいました。stateful_updateはhttp://devserver_host:8080/static/stateful.tgzというファイルをダウンロードしに行くようですが、devserverのstatic配下にはstateful.tgzがありません。server上のstaticディレクトリは、ビルドマシンのchroot環境では/usr/lib/devserver/staticにあたります。この下を見ると以下のようになっています。ビルドイメージはこのディレクトリのx86-genericの下にシンボリックリンクの形で準備されます。stateful.tgzはこのバージョン名のシンボリックリンクの下に作られています。以下のようにstaticディレクトリ配下に最新ビルドのstateful.tgzへのシンボリックリンクを作ります。この状態で実機上でstateful_updateを実行してみます。今度はうまくいきました。公式サイトの解説ページにはこんな作業が必要とは書いてありません。なんでこうなってしまうのかはよくわかっていません。STATEパーティションの更新はコマンド実行終了時点ではまだ行われていません。ここでダウンロードした内容は/mnt/stateful_partition/の下のdev_image_newおよびvar_newというディレクトリに格納され、リブート時に本来のディレクトリであるdev_imageおよびvar_overlayと置換されます。serverは、/etc/lsb-releaseのCHROMEOS_DEVSERVERで指定したアドレスになります。STATEパーティションの更新では/home配下は変更されないのでユーザ固有のデータは更新後でも引き継がれます。serverを使うと、OS自体の更新だけでなく、個別にパッケージを指定して実機に取り込むこともできるようになります。パッケージを個別でインストールするには以下のコマンドを実行します。[--accept_stable]gmergeコマンドを実行すると、デフォルトではROOTパーティションの/usr/binや/usr/libなどにバイナリがインストールされるようです。インストール先を変更できるかどうかはまだ調べていません。server上でそのパッケージがすでにビルド済みなら改めてビルドせずにバイナリをダウンロードするように指示します。--accept_stableオプションはビルド環境上の~/trunk/src/third_party/chromiumos-overlay配下にあるパッケージの一部をインストールするときに指定する必要が出てくることがあります。chromiumos_overlay配下の一部のパッケージをインストールしようとすると以下のようなエラーが出ることがあります。このエラーが出たときは--accept_stableオプションを指定して再実行するとパッケージのインストールができます。このエラーがでるのは、chromiumos_overlay配下にあるパッケージで、ebuildファイルのinheritパラメータにcros_workonの記述があるパッケージです。この辺の意味はよくわかっていませんが、この辺のパッケージは基本的にOSインストール時にまとめてインストールされるものですので、あらためて、パッケージ単体でインストールするものではない、ということなのでしょう。cros_workonはそれらのパッケージに対して修正を加える際に実行するコマンドで、それが実行されているならそのパッケージはカスタマイズされていると判断されて実機に追加インストールできるようになっているが、それ以外はガードがかかっており、ガードを外すのが--accept_stableオプション、ということなのだろうと理解しています。serverからのインストールなら非常に簡単にできました。serverは欠かせないツールになりそうです。OSをUSBメモリからブートするときのメモランキングに参加してみました。クリックしていただければ嬉しいです。