著者アーカイブ takahashi

takahashi 著者:takahashi

Windowsでファイルのハッシュ値を取得する方法

フリーソフトやLinux系OSのインストーラのISOなど、インターネット上から自由に入手できるソフトウェアにはよく、”チェックサム”と呼ばれる値がついていることがあります。

Ubuntu公式サイトでISOイメージのハッシュ値をチェックする方法を紹介している部分

このチェックサムとは何かというと、

ある関数を使って特定のデータを計算すると必ず同じ値が得られ、1ビットでもデータが異なった場合は異なった値が出力されるアルゴリズム=ハッシュ関数

によって出された、ダウンロード対象ファイルのハッシュ値のことです。

つまり、公開する側が正規のファイルのハッシュ値を計算したものをを公開しておくことで、そのファイルを入手した人が同じハッシュ関数を使って”本物のファイルが入手できたのか”を簡単に確かめられるようにしてある、ということです。

例えば、もし何らかの方法でダウンロードするファイルが不正にすり替えられていたとしても、1ビットでも異なれば別のハッシュ値が出力されてしまうため、手元のファイルのハッシュ値と比較することで手元のファイルが改ざんされたものかどうかを簡単に調べることができます。

そんなセキュリティ的にも重要なハッシュ関数ですが、WindowsではGUIのツールがデフォルトで用意されているわけではないため、ハッシュ関数の存在を知っていてもセットアップのめんどくささからあまり使わないユーザーも多いのではないかと思います。

実は、コマンドプロンプト上のコマンドによる操作にはなってしまいますが、Windowsに始めからインストールされている、CertUtil というコマンドで簡単にファイルのハッシュ値を求めることができます。

コマンドの使い方としては

CertUtil -hashfile ハッシュ値を出したいファイルのパス ハッシュ関数

のように指定します。

実行すると下記のようになります。

Microsoft Windows [Version 10.0.18362.476]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\hoge>CertUtil -hashfile C:\Users\hoge\Downloads\linuxmint-19.2-mate-64bit.iso sha256
SHA256 ハッシュ (対象 C:\Users\hoge\Downloads\linuxmint-19.2-mate-64bit.iso):
56f2d0c2b54be0fd66a8cf35799a69d02d4bfdf546b4f946a0b8af01cbbbd689
CertUtil: -hashfile コマンドは正常に完了しました。

C:\Users\hoge>

上記の例はLinuxMintのOSのインストーラーイメージをハッシュ関数にかけた時の結果です。

56f2d0c2b…の一行がハッシュ値となります。

このハッシュ値を公式サイトで公開されているハッシュ値と照らし合わせます。

ばっちり合致したので、改ざんがないことがわかりました。

こういったひと手間をかけるだけでも、ウイルスの被害などから身を守ることができますので、是非積極的に利用していきたいですね。

takahashi 著者:takahashi

AccessからDBにアクセスできなくなった場合の対処法

先日配信されたWindows Updateによって、AccessからODBCを経由したDBへの接続ができなくなってしまっているようです。

Access で、”クエリが破損しています” というエラー が表示される – パソコンのツボ ~Office のTIP

今回原因といわれているWindows UpdateのIDは下記のとおりです。

  • Office 2016 を使用している場合
    • KB4484113
    • KB4484148
  • Office 2013 を使用している場合
    • KB4484119
    • KB4484152
  • Office 2010 を使用している場合
    • KB4484127
    • KB4484160

Microsoftのサイトの記事によると、すでに修正版パッチはできているようですが、リリースは2019/12/10になってしまうようです。(なぜ一カ月後…)

それまでの間Accessが動かない状態で放置…というのは無理な場合も多いと思います。 一時的な 回避策として、下記の作業を行うことでAccessが使える状態に戻すことができます。

まずは問題を引き起こしている更新をアンインストールします。

Windowsの設定アプリから項目”アプリ” を開きます。

アプリの画面が表示されたら、”アプリと機能”内(右側もしくは最下部)にある”プログラムと機能”をクリックします。

開いたコントロールパネル内の”インストールされた更新プログラムを表示”をクリックします。

検索欄から対象となる更新プログラムを検索します。

見つかった対象の更新プログラムをひとつづつ選択し、”アンインストール”をクリックします。(※Accessを開いていた場合は終了させられる場合があるので、先にAccessを終了させてください。)

以降画面に従ってアンインストールを完了させます。

これを対象の更新をすべてアンインストールするまで続けます。

この時点で再びAccessからDBへ接続できるようになっているかと思いますが、このままにしておくと再び同じ更新が自動でインストールされてしまい、不具合が再発するため、問題の更新そのものを無効化して再発を防ぎます。

まず、 MicrosoftのWebページから、Windows Update更新除外ツールを入手します。

赤線で囲ったところから入手できます。

次に、ダウンロードしてきた wushowhide.diagcab を起動します。

するとトラブルシューティングの画面が起動します。

次へをクリックします。

Windows Updateのスキャンが始まるので待ちます。

“更新を隠す”と”隠した更新を表示する”の2項目が表示されます。上の”Hide updates(更新を隠す)”をクリックします。

まだ適用されていない更新の一覧が表示されるので、中から先程アンインストールした更新にすべてチェックを入れます。

チェックしたら”次へ”をクリックします。

更新の除外が行われます。完了するまで待ちます。

以上で問題の更新は自動でインストールされなくなります。

なお、先程書いた通り2019/12/10に今回の更新の修正版がリリースされる予定になっていますので、12/10を過ぎたら下記の手順で今回除外した更新を再度表示させて、インストールを実行する必要があります。

今回問題が起きたのがセキュリティに関するアップデートのため、更新をインストールせずに放置するとセキュリティ上の脆弱性に繋がる場合がありますので注意してください。

非表示にした更新は、次の手順で再表示できます。

先程の手順で入手した” wushowhide.diagcab”を再度起動します。

トラブルシューティングが起動します。”次へ”をクリックします。

Windows Updateのスキャンが始まるので待ちます。

再び “更新を隠す”と”隠した更新を表示する”の2項目が表示されます。今度は下の”Show hidden updates(隠した更新を表示する)”をクリックします。

現在隠しているアップデートの一覧が表示されます。対象のアップデートにチェックを入れて、”次へ”をクリックします。

以降は画面の指示に従って操作を行えば再表示化は完了です。

あとは通常通りWindows Updateを実行します。

しかし…今まで使えていたものが突然使えなくなるのは焦りますよね。

原因を調べて公開してくれる方がいなかったら、きっとパニックになっていたことでしょう…(;´∀`)

参考URL:

takahashi 著者:takahashi

新型MacBook Proでシザーキーボードが復権するらしい

新しいMacBook Proが発表されたようです。

16インチMacBook Pro – Apple

Apple、16インチの新型MacBook Proを発表。Escキー復活! そして、さらばバタフライキーボード – Gizmodo

このMacの特徴として、上記のGizmodoさんの記事にもあるようにキーボードが今までAppleが推していた”バタフライキーボード”から、従来型の”シザーキーボード”に変更されている点です。

ただし、ただシザーキーボードを復権させるだけでなく、ちゃんと改良も施しているということで、そこはAppleらしいこだわりを感じさせます。

またTouch BarからEscキーが分離されたり、十字キーのデザインも見直されたりされているとのことで、”天板の林檎マークが光らなくなったMac”に変更されて以来の大幅な見直しとなりそうです。

僕はMacBook Air Late 2015 11インチを使用していて、まだ旧シザーキーボードが搭載されていたのですが、キーストロークがちゃんとあり、しっかりとした打鍵感もあってノートPCとしてはとても使いやすく気に入っていました。一方、それ以降に発売されたMacBookのバタフライキーボードは打鍵感が少なく、キーストロークも浅かったため個人的には使いづらいという印象でした。

個人的にはノートPCでキーボードが使いづらいのは致命的な欠点なので、”MacBook買うのはこれで最初で最後かなぁ、とすら思っていました。

今回シザーキーボードのMacBook Proが発表されたので、 今後ほかのMacBookにもシザーキーボードが採用されたものが出てくるかもしれません。

もし買い替えが必要になった時にMacBook Airにもシザーキーボードが採用された機種が出ていたら、是非購入したいですね。

takahashi 著者:takahashi

Pixel 3aをAndroid 10にしてみた

以前Android 10リリース直後にエミュレータを使用したレビュー記事を書きましたが、先日手元のPixel 3aもAndroid 10にアップグレードしてみました。

今回は、エミュレータでは気づかなかった変更点を中心に取り上げたいと思います。

・通知バーの上部に電池が切れるまでの推定時間が表示されるようになった

いままでは残量の%しが表示されていませんでしたが、Android10 からは通知領域を広げた際に電池が使用できる時間を推定し表示してくれるようになりました。

お出かけ中に充電スポットを探す目安になるかもしれませんね。

・ナビゲーションバーの変更は実端末でも可能になったが”ジェスチャ”は対応ホームアプリを利用中のみ対応

Android 10から利用できるようになったナビゲーションボタンの変更機能ですが、実機のPixel 3aでも利用可能でした。

ただし、対応しているホームアプリを利用していない場合は戻るボタンの無い”ジェスチャ”は選択できません。

僕の場合はMicrosoft Launcherを使用していますが、現時点ではジェスチャナビゲーションは選択できないようです。

なお、3ボタンなびげージョンは問題なく利用できました。

・電話録音アプリが動作不能に

電話での聞き落しなどを防ぐために通話録音アプリ”ACR”を使用していたのですが、Android 10にアップグレードしたところ、一切音声が入らなくなってしまいました。

Google本社のある米国では通話の録音が禁止されている、という話もあるようなのですが、日本仕様のPixel 3aでも同様の制限が入っているのは少し納得がいきません。

自己防衛のために通話録音が必要な場合もあるので、個人的にはこの方針は考え直してほしいところですね…

現在Android 9 を使用中の方はご注意ください。

・CPU使用率にスパイク(瞬間的な使用率上昇)が頻発する

CPU使用率をモニタするアプリで端末の負荷を監視しているのですが、(僕の端末だけの症状の可能性もありますが)数秒に一回CPU使用率が100%になる現象が続いています。

もしかするとOSアップグレード直後でバックグラウンドで何かが動いているのかもしれませんが、キャッシュを削除しても、何度再起動しても改善しないのでちょっと気になります。

ただ、いまのところ動作自体が重くなったりといった症状はないので、とりあえずは無視します。

他にもロック画面にロック状態を示すカギアイコンが上部に大きく表示されるなど、Pixel 4を意識した変更もところどころ見かけられました。

個人的にはナビゲーションボタンが自分の好きなものに変更できるようになったのが一番大きな変更点かなと思います。

また一段と改良されたAndroidを楽しみたいPixel 3aユーザーの皆さんは是非アップグレードしてみてはいかがでしょうか。

takahashi 著者:takahashi

dockerのコンテナ名(container_name)はかぶると共存できない

dockerで使用されるコンテナ(docker上での個々の仮想マシンのこと)にはランダムなIDが割り付けられますが、これとは別に、ユーザーが任意の名前を付けることができます。

そのためわかりやすい名前をつけておけばそれを使用してコンテナの操作を行うことができるためとても楽です。

一方で、このユーザーが指定できるコンテナ名は重複することができず、ほかに同名のコンテナ名が存在すると重複した時点でエラーとなってしまいます。

docker-compose up -d
...省略...
Creating mysql              ... error
ERROR: for mysql  Cannot create container for service mysql: b'Conflict. The container name "/mysql" is already in use by container "コンテナID". You have to remove (or rename) that container to be able to reuse that name.'
...省略...
ERROR: for mysql  Cannot create container for service mysql: b'Conflict. The container name "/mysql" is already in use by container "コンテナID". You have to remove (or rename) that container to be able to reuse that name.'
ERROR: Encountered errors while bringing up the project.
Failed to deploy 'Compose: docker-compose.yml': `docker-compose` process finished with exit code 1

このエラーによく遭遇するシチュエーションとしては、docker-composeを使用した一括構築を行った際、複数のComposeファイルを使用して同じDockerホスト上で構築を行うと、各Composeファイルに記述されているコンテナ名が一般的なもの(例えばMySQLが入っているコンテナには”mysql”という名前がついていたりなど)になっていることがあるため、しばしばエラーとなってしまいます。

この場合は、Composeファイル(docker-compose.yml)内の

“container_name”

ディレクティブを既存のコンテナと被らないように変更すれば、共存させることが可能です。

例えば、複数のdocker-compose.yml内での指定で

...省略...
  mysql:
    container_name: "mysql"
...省略...

のように指定がかぶってしまっている場合は

...省略...
  mysql:
    container_name: "mysql_service1"
...省略...

のように名前を変えておくことで、共存させることが可能になります。

dockerはOSからアプリケーションまでの間の部分の構築もかなり簡単にしてくれるので、複数人で同じ環境を再現して開発を行いたい場合はとてもありがたい仕組みではあるのですが、一部環境に合わせて設定を変更しなければならない場合もあるので、この辺りは注意が必要になりそうですね。

takahashi 著者:takahashi

Webサイトを公開する前に消しておくべきヘッダー情報

最近の有名どころのLinuxディストリビュージョンでは、インストールしてすぐに使用できるような状態でApacheやnginxなどのWebサーバーアプリケーションなどのパッケージを公開しています。

そのため、自分で動作のカスタマイズをしたい場合以外は、ほとんどパッケージをインストールして、ファイルを指定の場所に置くだけで、Webサーバーとして機能させることができます。

ところが、これらのパッケージに含まれるサーバーの設定では、デバッグなどでも利用できるように、少し緩めの設定になっている場合が多いです。

ネット上には公開していないテスト環境としてであれば問題はありませんが、本番環境であったりテスト環境であってもネット上に公開されている場合は、デフォルトのままで使用してしまうと危険な設定が含まれている場合があります。

たとえば、CentOS版のApacheパッケージのデフォルト設定では、HTTPヘッダに

“Server”
“X-Powered-By”

といった内容がつきます。

ServerヘッダにはWebサーバーの種類・バージョンが記載されます。

また、X-Powered-Byにはサーバー側でプログラムを使って処理を行った場合に、どの言語・バージョンを使用しているのか、といった情報が載ってきます。

インターネット上にサーバーを公開する際、使用中のソフトウェアのバージョン情報などがわかってしまうと、悪意ある利用者がどういった脆弱性を用いれば攻撃が可能となるかのヒントを与えてしまうことになり、自分のサーバーが攻撃を受ける危険性を高めてしまいます。

したがって、こういった内部の情報は、可能な限り公開しないようにした方がよいとされています。

これらのヘッダ情報は設定を変更するだけで簡単に非表示にすることができます。

Serverヘッダについては、Apacheでは、

/etc/httpd/conf/httpd.conf

内の

ServerTokens OS

などとなっている部分を

ServerTokens Prod

とするとどのバージョンのApacheを使用しているかを非表示にすることができます。

nginxの場合は”http”ディレクティブ内の”server_tokens”のオプションを”off”に書き換えることで同様の設定ができます。

http {
    ...省略...
    server_tokens off;
    ...省略...
}

また、PHPを使用していて、X-Powered-Byがヘッダに含まれている場合は、php.iniの

expose_php = On

expose_php = Off

に変更することで X-Powered-By の記述そのものを削除することができます。

実際に今動作させているサイトが、どのようなヘッダーを吐き出しているのかを確認することも大事です。

Chrome・Firefoxなどの主要ブラウザでは、F12キーを押すと開発者ツールが開きますが、その中の”Network”タブを確認すると、どんなヘッダが各コンテンツにくっついているのかを確認することができます。

Chromeの開発者ツールでexample.comを見たときのヘッダ

ネット上に公開する際は、どういった情報をサーバーが公開しているのかを調べておくのがおすすめです。

takahashi 著者:takahashi

jQuery MobileのAjaxLoadを完全に無効化する方法

スマホ向けデザインフレームワークのjQueryMobileには、すべてのページ遷移の操作をオーバーライドして、実際にページ遷移を行うことなくコンテンツの中身を遷移先のものに入れ替える”AjaxLoad”がデフォルトで有効になっています。

うまくやればページ遷移のエフェクトを含めたリッチなサイトも構築できるのですが、全ページで使用するアセットをランディングページ(サイトで一番最初に表示されるページ)になりうるすべてのページに読み込んでおかないといけないなどのデメリットがあり、こういったAjaxLoadの仕様に設計上対応できない(したくない)場合などに無効化したい場合があります。

ところが、jQueryMobileのバージョンで指定方法が異なったりなど、 確実に無効化する方法がわかりづらかったりするのが難点です。

今回はAjaxLoadを確実に無効化する方法をご紹介します。

結論から言ってしまうと、HTMLのheadタグ内に、下記のコードを埋め込むだけで無効化できました。

<script type="text/javascript">
    $(document).bind("mobileinit", function(){
        $.mobile.ajaxEnabled = false; 
        $.mobile.ajaxLinksEnabled = false; 
        $.mobile.ajaxFormsEnabled = false;
        $.mobile.loadingMessage = false;
        $.mobile.hashListeningEnabled = false;
    });
</script>

なお、

$.mobile.ajaxEnabled = false; 

は新バージョンの指定で、

$.mobile.ajaxLinksEnabled = false; 
$.mobile.ajaxFormsEnabled = false;

は旧バージョンの指定となっています。

両方入れておくことで、どのjQueryMobileバージョンであっても対応できそうです。

これらの指定を入れておくことで、この指定が入っているページについてはAjaxLoadが働かず、通常通りのページ遷移をさせることが可能です。

お困りの方は試してみてください。

takahashi 著者:takahashi

WindowsのHostsファイルに記述できるエイリアス名の上限

Windowsには自分のマシン内だけで使用できる存在しない仮のホスト名(ドメイン)をIPアドレスと紐づけたり、実在する ドメイン と対応するIPを別のものに書き換えたりすることができるhostsという仕組みがあります。

例えば、ドメインを取得する前に取得予定のドメイン名を使用してWebサイトが意図した動作をするか…などの確認に使えたりします。

Windowsのhostsファイルは次の場所に存在します。

C:\Windows\System32\drivers\etc\hosts

このhostsファイルですが、中身を見ると次のような書式になっています。

192.168.XXX.XXX example.com sub1.example.com sub2.example.com sub3.example.com

見方としては、一番左がIPアドレス、2番目が紐づけたいホスト名、そして3番目からはエイリアスとなるホスト名となっています。

ホスト名とエイリアスの違いはほぼありませんが、設定上の扱いは、2番目のホスト名が正式な名前で、3番目以降はこの正式なホスト名の”別名”という扱いになっています。

hostsファイルではサブドメインを登録する際に*(ワイルドカード)を使用することができず、使用する可能性のあるドメイン名をすべて列挙する必要があります。

別のレコード(行)に分けて書いてもいいのですが、同じIPに対して複数の異なる名前を付ける場合に全部別の行にしてしまうと見づらくなってしまうので、この場合はエイリアスを使用すると見やすくなります。

さて、このエイリアスですが、実は登録できるホスト名の数に上限があります。

HOSTS ファイルにおけるエイリアス名の最大数について – Microsoft

つまり一つのレコードにエイリアスを9個以上設定してしまうと。9個目以降はOSに認識してもらえず、設定されていないことになってしまいます。

そのため、9個目以降のホスト名でアクセスしようとしてもドメインが見つからない旨のエラーが出てしまいます。

この場合は9個目以降のドメインを別の行として書けば問題なく使用できるのですが、この使用を知らないとうまくいかなかったときちょっと焦ります。(僕は知らなくて一瞬焦りました…w)

hostsを使用して開発を行う場合は把握しておきましょう。

takahashi 著者:takahashi

なぜネットの調子が悪いと”169.254″から始まるIPアドレスになるのか

家やオフィスなどでルータやネットワーク機器がおかしくなっていたりすると、よく”169.254…”から始まるアドレスが割り振られることがあります。

なぜこんな変なアドレスが割り振られるのか、疑問に思った方も多いと思います。

WindowsやmasOSをはじめとしたOSでは、DHCPなどのIPアドレスの割り当てをしてくれる仕組みがLAN内になく、かつ機器に対して固定のIP設定も行われていない場合に、同じLAN内に接続された機器と協調しながら自動で独自のIPアドレスを割り振る機能(APIPA)が備わっています。

この機能によって割り当てられるIPアドレスを“自己割り当てIPアドレス”もしくは”リンクローカルアドレス“と呼びます。

自己割り当てIPアドレスの仕組みはいたって単純です。

同じLAN内にある全機器に対して、

“169.254.XXX.XXXっていうIPを使おうと思うんだけど、ほかにだれか使ってる人いる~?”

って聞いて、”俺使ってるぞー”っていう応答が返ってこなければ自分のIPとして使用する、という仕組みになっています。

ちなみに、なぜ169.254.XXX.XXXの範囲のIPアドレスが振られるかというと、ローカルIPと同様に、169.254.0.0~169.254.255.255(169.254.0.0/16)までのアドレスが、この自己割り当てIP用として正式に予約されているからです。

リンクローカルアドレス – Wikipedia

これでDHCPがなくても、インターネットに抜けることができない代わりに、特に何も指定しなくても同じLAN内で自己割り当てIPで参加する機器同士であれば通信することができるようになります。

自己割り当てIPについてはこちらのサイトが詳しかったので、上記の説明で分からなかった…という方は確認してみてください。

リンクローカルアドレス – Geolocation Technology

要するに、自宅やオフィスのLANなどで、IPの自動割り当てのしくみ(DHCP)が存在するにも関わらず自己割り当てIPが振られてしまった場合は、何らかの原因でPCがDHCPサーバーとの通信に失敗したということになります。

この場合はPCとDHCPを担当する機器(家の場合はほとんどルーターが行っている)との接続ができているか、ルーター自体の動作は正常か…といったあたりを調べるとたいていの場合は解決の近道になります。

もし169.254…から始まるアドレスが割り振られてしまった場合は、上記の部分を確認してみてください。

takahashi 著者:takahashi

Linux上でコマンドを数秒おきに実行させる方法

Linuxを使用していると、各リソースの使用率やストレージやマシンの温度などの推移をCUI上でリアルタイムで確認したいときがあります。

そんな時は、watchコマントを使用すると便利です。

watchコマンドの使い方は下記の通り。

watch -n 秒数 定期実行したいコマンド

下の画像は、マザーボードから送られてくる各温度センサーの値を表示する”sensors”コマンドを実行した場合の画面です。

テキストがどんどん追記されていくようなイメージかと思ったら、(htopのような)一画面分のバッファを丸々書き換えるような感じの動作になっていました。

更新日時(最後にwatchコマンドによってコマンドが実行された時間)なども表示されるのでわかりやすいですね。

簡単にモニタリングを行いたい場合はおすすめです。