Hejdaの見る夢

一人前のエンジニアを目指して頑張ったこととかをつらつら書くブログ

自作スクリプト(virtualbox-operation)の v1.1 をリリースしました

自作スクリプトvirtualbox-operationの v1.1をリリースしました 変更点としては、

  • 何回も読んでいた関数を纏める
  • READMEの更新

になります

v1.0 では、まずは動くスクリプトを作成するために割と強引なスクリプトを書いていましたが、 v1.1 で効率化を少し意識して修正を加えてみました

まだまた、要修正・要改善点はたくさんあるので、引き続き頑張ってアップデートしていきたいと思っています ╭( ・ㅂ・)و ̑̑

Ubuntu 16.04 LTSで、Linuxカーネルを4.4.0-143-genericに上げたら、VirtualBoxが使えなくなった件

経緯

きっかけ

2019/03/18に何気ない気持ちで ホストマシン(Ubuntu 16.04 LTS)で sudo apt update && sudo apt upgrade -y としたら、VirtualBox v5.2が起動しなくなりました

症状と考えうる理由

症状としては、VirtualBox自体は起動するのですが、その中で作成した仮想マシンが起動出来ず、新しく作ることも出来ませんでした

理由としては、 sudo apt upgrade 後のLinuxカーネルではAPIに変更点があったらしく、VirtualBoxがそのAPIの変更に追従出来ていないようです

対処開始

Linuxカーネルのバージョンは 4.4.0-143-generic でした

$ uname -r
4.4.0-143-generic

VirtualBoxコマンドラインを使った際に、今回のエラーへの対処として、

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.

と表示されるので、素直にターミナルで実行してみますが

$ sudo /sbin/vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: Look at /var/log/vbox-setup.log to find out what went wrong.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.

同じエラーが出てしまいます…

他の対応を試みる

VirtualBoxの公式サイト(https://www.virtualbox.org/wiki/Downloads)から、 VirtualBox v5.1, v6.0をパッケージでダウンロードしてインストールしてみたり、コマンドラインでインストールしてみましたが一向にならず…

呟いてみたところ…

Oracleの対応を待つわけにもいかないので、「ホストマシンのカーネルをダウングレードするしかないかなぁ(´・ω・`)」と日報に書いたら、同僚が解決方法が記載されているブログを見つけてれくました!!

上記のサイトに従って作業をしたところ、再び起動出来るようになりました!!

下記に作業記録を記載しておきます

作業

ソースコードを修正しますので、作業する際は自己責任でお願いします ⚠

まずは最新にしましょう

  • aptのアップデート
    • 可能であれば、最新にしておきましょう
$ sudo apt update
$ sudo apt upgrade
  • VirtualBoxのアップグレード
    • コマンドラインでもパッケージからのインストールでもどちらでもよいと思います
    • 可能であれば、最新にしておきましょう
    • わたしはVirtualBox v6.0.3にしました

ここから、VirtualBoxソースコードを修正していきます

$ sudo cp -a /usr/src/vboxhost-6.0.4/vboxdrv/r0drv/linux/memobj-r0drv-linux.c{,.bk.20190320}
  • バックアップ出来たか、確認します
$ sudo ls -la  /usr/src/vboxhost-6.0.4/vboxdrv/r0drv/linux/memobj-r0drv-linux.c*
-rw-r--r-- 1 root root 60644  3月 20 16:34 /usr/src/vboxhost-6.0.4/vboxdrv/r0drv/linux/memobj-r0drv-linux.c
-rw-r--r-- 1 root root 60638  1月 26 03:21 /usr/src/vboxhost-6.0.4/vboxdrv/r0drv/linux/memobj-r0drv-linux.c.bk.20190320
  • 該当のファイルを編集します
    • # if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0) -> if GET_USER_PAGES_API >= KERNEL_VERSION(4, 4, 168) と変更します
    • 合計で3箇所あります
$ sudo vim /usr/src/vboxhost-6.0.4/vboxdrv/r0drv/linux/memobj-r0drv-linux.c
  • 編集した箇所を確認しまします
$ sudo diff -s /usr/src/vboxhost-6.0.4/vboxdrv/r0drv/linux/memobj-r0drv-linux.c /usr/src/vboxhost-6.0.4/vboxdrv/r0drv/linux/memobj-r0drv-linux.c.bk.20190320 
1078c1078
< # if GET_USER_PAGES_API >= KERNEL_VERSION(4, 4, 168)
---
> # if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0)
1098c1098
< # if GET_USER_PAGES_API >= KERNEL_VERSION(4, 4, 168)
---
> # if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0)
1117c1117
< # if GET_USER_PAGES_API >= KERNEL_VERSION(4, 4, 168)
---
> # if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0)
  • 改めて、vboxconfigコマンドを実施します
$ sudo /sbin/vboxconfig 
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
$

成功!!!!!!!!!!!!!!!

この後は、GUIVirtualBoxを起動して、既存の仮想マシンが正常に起動出来れば問題は解決です!!

まとめ

  • 今回はOracleが修正するより先に1エンジニアが問題箇所を特定し、解決策をインターネットに上げることで多くのユーザが救われたと思います
  • 改めて、エンジニアリングの世界ってすごいなと体感した出来事でした
  • あと、この対応はあくまで一時的なので、早く本家のVirtualBoxが対応してほしいです (-人-)

参考URL

ナレッジのオープン化を始めました 🍜

リンク

https://gitlab.com/iganari/hkms

内容

  • 主にLinuxにて使用するコマンドの基本操作とよく使うオプションの説明
    • アプリケーションも同様

経緯

動機

普段よく使うコマンドって基本的には手が覚えているのでササッと書いてしまうのですが、例えばオプションの細かいところまでは把握してない場合も少なく無いと思います

必要になって、新しいコマンドやオプションを都度ググっていると非効率的だし、出てきた内容が古い情報だったり、自分の要件と合わなかったりすることも少なくありません

また、コマンドによって参考にするWebサイトが違うと情報の精度にばらつきが発生します

インフラエンジニアなので、コマンドによって精度に大きなばらつきがあると信用問題に繋がるのでそれは困ります(コマンドとオプションくらいすべて覚えておけよってのは無しです)

そうすると、だいたい手元で LANG=C man hogehoge を叩くところから始め、結果として大量のメモが自分のローカルに溜まっていきます

これはもったいないのでこのナレッジをオープンな場にアウトプットしておくことで、知識の共有やひらめきに繋がるのでは無いかと思いました

オープンにするに当たって考慮したこと

当初はレイアウトとか検索性能とかを追求したくて、いろんなフレームワークを試してみました

しかし、最終的には以下のような気付きがありました

  • ナレッジシステムにそこまでデザインは求めていない
    • デザインが主目的では無い
  • 検索性能もそこまでがっつり無くて良い
    • ナビが充実していれば良い
  • SEOとかブランドは考えない
    • 自分のドメインが〜とか、既存ナレッジサイトのSEOが〜とか考えると切りがない

また、自分が構築したいナレッジシステムとしては以下のような要件まとまりました

  • 情報を増やす・アップデートが容易であること
  • 似たような情報を横断的にまとめることが出来ること
  • 自分はもとより、他の人が閲覧が容易であること

したがって、GitLabでパブリックなレポジトリで良いという結論に至りました

GitHubじゃなかったのか

同様のサービスとして、GitHubが挙げられると思います

どうしてGitHubでは無くGitLabを使うことにしたかと言うと、単純にGitLabが好きだからという理由のみです

同様のことがGitHubでも出来ると思いますので、気が変わったらGitHubに移行するかもしれませんw

まとめ

ナレッジシステムなので、常にアップデートし続ける必要が有ります

頑張ります!! ( ・ㅂ・)و ̑̑

NoOps Meetup Tokyo #4 にスタッフとして参加してきました

概要

2/5(火)にYahoo!Japan LODGEにて、NoOps Meetup Tokyo #4が開催され、スタッフとして参加してきました

その時の個人的な感想です

<注意> 以降は個人の意見であり、所属会社・及び団体とは関係がありません。</注意>

Yahoo!Japan LODGEについて

  • LODGE自体が初めてお邪魔する場所だったので、「これ噂のLODGEか〜」とワクテカしながらうろうろしていました
    • フリーアドレスの他に、契約者(グループ?)が専用に使える場所や、軽食が購入出来る場所があり、そして何よりとても綺麗な空間でした
    • 土日にプライベートな開発をしているのでいつかお邪魔したいなと本気で思っています
  • LODGEはYahoo!Japanの17Fなのですが(LODGEの受付は18F)、総合受付である2FにはLODGEの看板が見当たらないので迷いました
    • なんか立看的なものがあれば良いな〜と思います (>人<)

スタッフ参加について

  • 事前に会場のレギュレーションを共有して頂いたのですが、ちゃんと細部まで把握出来ておらず当日に混乱してしまいました
    • 次回は準備の段階からしっかり確認していこうと思います
  • 最初は受付を担当していたのですが、頂く名刺が名だたる大企業だったり、有名なベンチャー揃いだったので、改めてNoOpsへの興味・関心というのがどの層に多いのかが分かりました
  • 会場自体はオープンなスペースの一部分をお借りして開催していたのですが、開放的な感じで良かったと思います

懇親会について

  • 会場を一旦片付け、その場で軽食とお酒を頂きながら、懇親会参加者と話をすることが出来ました
    • 軽食等はZOZOテクノロジーズさんがサポートして頂きました
  • 私が話を聞けたのは、Javaのエンジニアさんと、TerraformとAnsibleを実際に現場で使われているインフラエンジニアさんでした(あと、Azure大好きなスタッフ)
    • 自身もInfrastructure as Codeを仕事としていますので共感しつつ、Javaのかたのツラミや、Azureを使ったモダンな開発方法などを話していました

まとめ

  • たまたま運良くスタッフとして入り込めたコミュニティですが、改めて、掲げているテーマの注目度やスタッフ及びユーザのエンジニアとしての質の高さにびっくりしています
  • 本格的に運営に関わるのは久しぶりなので、頑張ってバリューを出していきたいと思います( ・ㅂ・)و ̑̑

f:id:nari_kyu:20190207091135j:plain f:id:nari_kyu:20190207091158j:plain