ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Amazon Fire OSの各種アップデートが提供された

Fire OSが更新されました。 デバイス毎に更新版のFireOSが提供されています。

Amazon.co.jp ヘルプ: Fire & Kindleソフトウェアアップデート

FireTV Stickは自動的に更新されていました。

  • Fire OS 5.2.6.2

Kindle Fire HDはアップデートチェックをして適用しました。

  • Fire OS 5.6.0.1

Ubuntu 16.04やCentOS 7で色々あった

昨日のドカ雪から一夜明け、雪道の中の出社はなかなか苦労しました。 かかとに重心をかけて歩幅を狭くして歩くと、割と安定して歩けるような気がしました。

今週は週末くらいまで寒いらしいので、道路に残る雪の凍結や一目見て雪はないように見えるけど、うっすら凍結している舗装された道路に気をつけたいと思います。

Ubuntu 16.04とSpectre対応

Ubuntu 16.04にSpectre対応が入ったカーネルが公開されました。数台(4つくらい)にインストールしてみましたが、とりあえず触ってみた限りは不具合はなさそうです。

Bug #1744244 “linux: 4.4.0-112.135 -proposed tracker” : Bugs : linux package : Ubuntu

CentOS 7のPXEブート

CentOSのISOイメージをいちいちマウントするのが面倒だったので、PXEブートする環境を以前作りました。 CentOS 7のPXEブートができるようにpxe configに次のように記述していました。

label 10
menu label ^10) CentOS 7 x64
kernel cent7/vmlinuz
append linux text initrd=cent7/initrd.img ip=dhcp method=http://ftp.riken.jp/Linux/centos/7/os/x86_64/

ところがなんか時々、PXEブート中やインストーラーの起動中などに失敗してエラーがループしてしまうことがあるのです。 そこでISOイメージをPXEサーバー上のWebサーバーの公開領域(/var/www/htmlの配下)にマウントして、それをmethodに設定しました。

WebサーバーはLighttpdを使い、/etc/lighttpd/lighttpd.confserver.dir-listing = "enable"を追加してディレクトリーインデックスを公開するように設定し、pxe configは次のように書き換えて対応しました。

label 10
menu label ^10) CentOS 7 x64
kernel cent7/vmlinuz
append linux text initrd=cent7/initrd.img ip=dhcp method=http://172.17.14.3/image/cent7/

ちなみにISOイメージのマウントはmountコマンドでmount -o loop -t iso9660 CentOS-7.4-x86_64-Minimal-1708.iso /var/www/html/image/cent7のように実行しましたが、永続化は/etc/fstabに次のように設定しました。

...
/var/www/html/CentOS-7.4-x86_64-Minimal-1708.iso /var/www/html/image/cent7      auto    loop    0       0

当然ながら、PXEサーバーと同じサーバー上のhttpリソースを使うので速いですね。ついでに同じように設定してFedora 27もPXEブートできるように設定しました。

CentOS 7でyumがなんか失敗する

古いバージョンのOpenStackの環境を作る必要があったので、CentOS 7+Packstackでさっくり作ろうと思っていました。 先に書いた問題でちょっとはまりましたが、なんとかCentOS 7.4のインストールとアップデートが終わりPackstackを走らせたら、今度はランダムなパッケージでyumコマンドを使うところでパッケージがなかったり、タイムアウトしたりして処理が中止してしまう問題が起きるようになりました。

インストールするパッケージをyum infoyum listコマンドで調べると、baseやupdatesに存在するパッケージのようです。つまり、標準リポジトリーの問題みたいです。

CentOS 7のミラーサーバーの状態は次のサイトで見ることができます。日本のミラー一覧はこちらのリンクから

the status of CentOS mirrors

そして次がある日のミラー一覧

f:id:ytooyama:20180124000608p:plain

赤字になっているのはどれくらいマスターと同期されていないかを示しているようです。 この状態ながら、リポジトリーの状態が古いのにもかかわらずStatus OKを返しているのはおかしいような気がします。

今回は対象のサーバーを除外するため、次のように設定しました。設定後、もう一度Packstackを実行したところインストールはうまくいった模様です。今後のことを考えるとCentOS 7のローカルミラーを作った方がいいのかな。

# vi /etc/yum/pluginconf.d/fastestmirror.conf
exclude=ftp.nara.wide.ad.jp

Windows 8.1でVPNにアクセスすると「VPN 接続エラー788」が発生する場合の解決方法

IPアドレスもユーザーもパスワードも正しいかつ、そのほかのVPN関連の設定もあっているのに次の様なエラーが出て しまうことがあります。私はWindows 8.1でしか確認していませんが、ほかのバージョンでも起きることがあるかもしれません。

VPNエラー788: セキュリティ層でリモート コンピュータと互換性のあるパラメータをネゴシエートできなかったため、L2TP 接続に失敗しました。」

解決策が次のフォーラムに書かれていました。

VPN error 788:The L2TP connection attempt failed because the security layer could not negotiate compatible parameters with the remote computer

ただこのフォーラム、たまにHTTP 503を吐きやがります。なので、重要なところだけ引用すると次の通りです。

According to your description,please check VPN setting for your client PC.

Ensure your vpn configuration is right.

Then,check that Windows services on your device are configured as described below.

1.Press Win+R,type"services.msc",press Enter.

2.In the "Services" window,scroll down the list to "IKE and AuthIP IPsec Keying Modules".

3.Ensure the "Startup type" is set to be "Automatic" and the "Service status" is "Started".

4.Now back in the "Services" window, double click on "IPsec Policy Agent". Repeat the same process as for the "IKE and AuthIP IPsec Keying Modules", ensuring the "Startup type" is set to be "Automatic" and the "Service status" is "Started".

"IKE and AuthIP IPsec Keying Modules"サービスと"IPsec Policy Agent"サービスを起動して、自動起動する様に設定するといいみたいです。ちなみに、私の環境ではWindowsの再起動が必要でした。

脆弱性「Meltdown」「Spectre」の対応など

昨日が新年初出社でした。 昨日今日と仕事はしつつ、検証環境の脆弱性「Meltdown」「Spectre」の対応を行なっていました。

主に稼働している検証環境はざっと次の通りです。 以下、メモから起こしたため、文体が変わっています。

仮想化ホスト(Linux KVM)

アップデートしたらGRUBなどいくつかのアップデートがあったが、なぜかLinux Kernelのアップデートがapt list -a linux-image-4.9.0-5-amd64とかで見つからなかった(その後apt search linux-image*で検索したら、linux-image-4.9.0-5-amd64が見つかった。謎である)。ググったらKernel didn't update to last versionを発見。同じ症状なので、apt install linux-image-4.9.0-5-amd64を実行して再起動して対応した。

VMのパフォーマンスが落ちる懸念があったが、この環境下のMAASサーバーはとりあえず性能劣化することなく稼働している。

MAASサーバー

今回の脆弱性Ubuntuのライブパッチでは対処できないらしいのでアップデートを実施することに。

insights.ubuntu.com

1/10に対応するパッチが公開(XenialTrusty)されたので、通常通りsudo apt update&& sudo apt upgradeを実行した(実際はAnsibleのaptモジュールを使ってアップデートを実施)。終わったら再起動。特に問題は発生しなかった。

MAASイメージもアップデートをかけた。デプロイしてみたところ、本脆弱性が潰されているLinux Kernelでデプロイできることを確認した。JujuとMAASを使って、脆弱性を修正した状態でKubernetes環境を作れることを確認した。

別VLAN用DNS/DHCP/PXEサーバー

仮想化ホストと同様、Kernelの更新がされなかったが同じ対応方法で切り抜けた。再起動後はパフォーマンスや安定性など特に問題はなし。

とあるRedmine

MAASサーバーと同様の対応をした。再起動後はパフォーマンスや安定性など特に問題はなし。

とあるGitLab

MAASサーバーと同様の対応をした。再起動後はパフォーマンスや安定性など特に問題はなし。

少々時間はかかったものの、特に問題なく現在稼働している。しばらく様子をみたい。

仮想マシンのWindows 10がとにかく遅い

仮想マシンWindows 10がとにかく遅い。 スタートボタンを押しても、数秒遅れてようやくスタートメニューが表示される。 設定を開こうにも時間がかかる。コントロールパネルはすぐ表示されるのに。 もうやだ。Windows 8.1に戻す!

...とか思って、冬休み中に何とかしようと思い作業を始めたのですが、Windows 8.1に最新のパッチをあてたあとにユーザーとMicrosoftアカウントの統合をしようとしたら、どうやってもMicrosoftサービスにログインできなくて困りました。エラーメッセージで調べてもロクな情報が見つかりません。

本来はこんな感じでできるはずなのですが、いくらやってもネットワークの問題がどうとか、Microsoftサービスにログインできないとかエラーが出てダメでした。会社のWindows 8.1環境をセットアップした時はこの流れですんなり変更できたんだけどなあ。謎。

https://blogs.technet.microsoft.com/cs3_windows/2014/07/14/232-12408/

というわけで、諦めてWindows 10をどうにかすることにしました。 といってもやることは従来のチューニングだけ。設定を色々いじります。

ちなみにWindows 10はバージョンによって設定画面の項目名(翻訳?)が変わります。 以下の設定は「Windows 10 バージョン 1709 (OS ビルド 16299.192)」をベースにしています。

設定>個人用設定>色

  • 「透明効果」を無効化

設定>簡単操作>その他のオプション

  • Windowsでアニメーションを再生する」を無効化

コントロールパネル>システム>システムの詳細設定>パフォーマンス

この設定変更は歴代のWindowsでは一般的なチューニングです。

  • デザインを優先にする 「デザインを優先にする」に設定して、「スクリーンフォントの縁を滑らかにする」や「XXの影をつける」など必要そうな設定のみ有効化

スタートメニュー>天気

  • スタートからピン留めを外す

仮想マシンの構成の変更

以上の設定変更で、何とか我慢できるレベルまでチューニングすることができました。 やはり、Windows 10は仮想マシンで動かすのは厳しいかもしれませんね。Parallels Desktopとの相性なのかな。

仮想マシンWindowsを動かすと、Windows Updateのタイミングでたまにスナップショットを自動でボコボゴととることがあるので、定期的にスナップショットを削除(統合)して「ディスク領域の再利用」を実行すると良いみたいです。ただ、Parallels Desktopで「スナップショットの削除」をやりすぎると、たまにWindowsが壊れる(正常起動しないor青画面表示になる)けど。

macOSでGUI版のEmacsをインストールする。ついでにmarkdown-modeも

Emacsはかなり熟練のユーザーから言うと「環境」なんだそうです。ちなみに一機能としてエディター機能もあります。

macOSは一応UNIXなので、Emacsはデフォルトでコマンドライン版がバンドルされています。ただ、macOSにバンドルされているEmacsは2007年ごろのGNU Emacs 22.1.1であり、10年も時が止まっています。

これを最新のバージョンにするにはソースから自分でビルドするか、macOSならHomebrewのようなパッケージマネージャーを使ってインストールすると良いみたいです。

今回取り上げるGUI版は公式からリンクが貼られている次のサイトからダウンロードできます。

GNU Emacs For Mac OS X

配布されている形式はdmg形式なので、インストールは通常のアプリケーションと同様で簡単です。

markdown-modeの導入

Emacsmarkdown形式のファイルを書式付きでレンダリングするのをサポートするには、Markdown Mode for Emacs(markdown-mode)を導入すると良いそうです。

jblevins.org

一番簡単な導入方法は最近のEmacsに実装されたpakages機能を使う方法だそうです。ただし、標準のままではインストールできる機能は少ないので、MELPAリポジトリーを追加する必要があります。

melpa.org

このページの「Installing」に書かれている設定を~/emacs.d/init.elに書けば良いです(2017年12月24日現在)。

その後、Emacsで次のコマンドを打ってリポジトリーの情報を更新します。

M-x package-list-packages

次のコマンドでパッケージ一覧を表示して

M-x package-install-selected-packages

C-sを押して、markdown-modeででてきたパッケージをインストールすればいいようです。

ちなみにMはAlt(Option)キーを押します。M-xの場合はAlt(Option)キーを押しながらxキーを押します。 CはCtrlキーです。C-sはCtrlキーを押しながらsキーを押します。C-sは検索用のショートカットキーなので、探したいものを入力すれば検索できます。

一覧から「markdown-mode」を選んで下部画面の「Install」のところを押すとインストールできます。

f:id:ytooyama:20171224193033p:plain:w360

その後、次の設定を~/emacs.d/init.elに追加すれば完成です(2017年12月24日現在)。 次のように設定すると、markdownもしくはmdで終わるファイルをmarkdown-modeを使って表示してくれます。

(autoload 'markdown-mode "markdown-mode"
   "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))

Emacsエディターの見た目(というかテーマ)のカスタマイズは「Option→Customize Emacs→Custom Themes」でわりと簡単に変えることが出来るようです。

フォントとサイズの変更

フォントサイズが少し小さかったので、次の設定を~/emacs.d/init.elに追加してみました(2017年12月24日現在)。Emacsを再起動すると良いみたいです。

;; font and size
(create-fontset-from-ascii-font "Menlo-12:weight=normal:slant=normal" nil "menlokakugo")
(set-fontset-font "fontset-menlokakugo"
    'unicode
    (font-spec :family "Hiragino Kaku Gothic ProN" :size 14)
    nil
    'append)
(add-to-list 'default-frame-alist '(font . "fontset-menlokakugo"))

emacsコマンドのエイリアス

前述のようにmacOSEmacsはバージョンが古いので、次のようなエイリアスで対処しています。emacswと打つとGUI版が起動して、emacsと打つとコマンドラインEmacsが起動します。エイリアスの張りかたはシェルによって違うので、ここでは説明を省略します。

alias emacsw="/Applications/Emacs.app/Contents/MacOS/Emacs"
alias emacs="/Applications/Emacs.app/Contents/MacOS/Emacs -nw"

ちなみにVisual Studio Codeを使わない理由ですが、Google 日本語入力と相性が悪いのと、入力や反応が遅いのが理由です。一番ストレスなのは日本語入力の推測変換候補のポップアップが入力中の文字列を隠すところでしょうか。なにを入力しているのかわからないのが嫌で、使うのをやめてしまいました。

Bluetoothイヤフォン QCY QY8を購入

ケーブルがないってすばらしい!

先日ビックカメラに寄った時に見つけた、Bluetoothイヤフォン QCY QY8を購入してみました。iPhoneとのペアリングも簡単で、音漏れもほとんどなくて割りといい感じでした。視聴せずに直感で買ったんですが、あとでいろいろ調べたら評判は割と良いようです。

www.jn1msd.net

次のような感じのものです。

  • 連続再生 5時間
  • 連続待受 175時間
  • 充電時間 2時間

  • Bluetooth 4.1対応

  • aptX対応
  • ノイズリダクション(CVC 6.0)
  • マイク付き
  • 重さ 16グラム

「連続再生 5時間どうよ」って思いましたが、状況に応じてiPhone付属のイヤフォンと使い分けているので多分平気です。ゲーム用途以外では良いのかもしれません。

また、割と周りの音をカットしてくれるのでちょっと静かに作業をやりたいときにも役立ちそうです。

macOS High Sierraのrootユーザーでログインできる欠陥について調べてみた

[追記]

Security Update 2017-001が公開されたようです。その後、再リリースされています。

applech2.com

話題のHigh Sierraのrootユーザーでログインできる問題について調べてみました。 調べれば調べるほど、非常にまずい欠陥であることがわかりました。

この問題の修正プログラムが配信されるまで、rootユーザーを有効にしてパスワードを設定しておくことと、問題が解決されるまで、共有機能は利用しないことをおすすめします。

今回の問題について

詳細は以下に詳しくまとまっています。

applech2.com

applech2.com

applech2.com

ちなみにこの欠陥について、Appleはソフトウェアアップデートで対応することを表明しているようです。

攻略パターン

  • 悪意を持ったユーザーがVNCでrootユーザーでログイン
  • rootユーザーにパスワードを設定
  • 欠陥を使わなくてもrootユーザーと設定したパスワードでmacOSにログイン可能

ここまで行われてしまうと、実質すべての作業がrootユーザーで可能になります(具体的にはあげませんが、想像は容易だと思います)。

ただし、SSHによるアクセスはrootlessのアクセス制御機能が効くために、rootユーザーでログインすることはできませんでした。しかしrootユーザーでパスワードログインして任意の管理者アカウントを作られてしまうと、共有の設定次第ではSSHプロトコルを使った通信が可能になってしまいます。そもそもVNCでアクセスできてしまうので問題点はそれだけではありませんね。

ちなみにmacOSの一般設定で、root(System Administrator)ユーザーのパスワードの設定は、正規の手段では文字入力を拒否されてしまうのですがコピペは可能なので、テキストエディターにパスワードを書いてcommand+vで貼り付けることでrootユーザーのパスワードを設定可能です。

というわけで、注意しましょう。