2018年3月29日木曜日

VC++ Runtimeと.NET Frameworkのバージョン関係

Visual C++

Visual C++固有のライブラリを使用したプログラムを実行する場合、対応したバージョンのRuntimeが必要。
各バージョンの関係性は以下の通り。
  • 2005
  • 2008
  • 2010
  • 2012
  • 2013
  • 2017 ∋ 2015
基本的には、作成されたVC++と同じバージョンのRuntimeが必要。2017には2015が含まれているため、2017をインストールする場合は、2015のインストールは必要ない。

Visual C#

Visual C#で作成されたプログラムの実行には、対応したバージョンの.NET Frameworkが必要。
  • 1.0
  • 1.1
  • 3.5 ∋ 3.0 ∋ 2.0
  • 4.7 ∋ 4.6 ∋ 4.5 ∋ 4.0
3.5で2.0~3.5が動作する
4.7で4.0~4.7が動作する

2018年3月1日木曜日

apt-add-repositoryが使えないときは

apt-add-repositoryが存在しない場合、software-properties-commonをインストールすることで使えるようになる。

# apt install  software-properties-common

aptからhttpsのURLにアクセスするときは

aptからhttpsのURLにアクセスする際、以下のようなエラーが出る場合がある。


# apt update
Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Hit:2 http://security.ubuntu.com/ubuntu xenial-security InRelease      
Hit:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease        
Hit:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease
Reading package lists... Done
E: The method driver /usr/lib/apt/methods/https could not be found.
N: Is the package apt-transport-https installed?
E: Failed to fetch https://dl.winehq.org/wine-builds/ubuntu/dists/xenial/InRelease 
E: Some index files failed to download. They have been ignored, or old ones used instead.

apt-transport-httpsをインストールすることで解決する

# apt install apt-transport-https

Docker上のUbuntuにWineHQをインストール


必要なものをインストール
# apt install curl software-properties-common apt-transport-https

32bitサポートを追加
# dpkg --add-architecture i386


GPG鍵を追加
# curl -fsSL https://dl.winehq.org/wine-builds/Release.key | sudo apt-key add -


レポジトリを追加
# apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/

アップデートと不足している32bitサポート関連のインストール
# apt update --fix-missing
# apt upgrade

WineHQをインストール
# apt install winehq-stable

# wine --version
wine-3.0



2018年2月19日月曜日

nvidia-docker2を使ってコンテナ内からGPUを使う

環境: Ubuntu 16.04.3 LTS 
 

Docker CEのインストール

nvidia-docker2が要求するdockerバージョンは1.12以上。Ubuntuレポジトリにもとから入っているdocker.ioは1.13.1で要求を満たしているが、Docker CEかEEをインストールしろと言われる。

必要なものをインストール

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common


GPG鍵を追加

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


レポジトリを追加

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo update


インストール

$ sudo apt install docker-ce


nvidia-docker2のインストール

 

NVIDIAドライバをインストール

$ sudo apt install nvidia-384


GPG鍵を追加

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -


レポジトリを追加

$ curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo update


インストール

$ sudo apt install nvidia-docker2


ユーザーをdockerグループに追加

$ sudo gpasswd -a $USER docker


再起動

$ reboot


Dockerの設定

 

CUDAインストール済みのUbuntuイメージを取得

$ docker pull nvidia/cuda


動作確認

$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi


コンテナ作成&起動

$ docker run --runtime=nvidia -it nvidia/cuda
root@18f6a6a5fa26:/#


TensorflowからGPUが使えるか確認


ディストリビューションを確認

root@18f6a6a5fa26:/# cat /etc/issue
Ubuntu 16.04.3 LTS \n \l


CUDAがインストールされているか確認

root@18f6a6a5fa26:/# apt list --installed | grep cuda


cuDNNをインストール

ホスト側でダウンロードしてコンテナ内にコピーしておく
root@18f6a6a5fa26:/# apt install ./libcudnn7-dev_7.0.5.15-1+cuda9.1_amd64.deb
root@18f6a6a5fa26:/# apt install ./libcudnn7_7.0.5.15-1+cuda9.1_amd64.deb


Pythonをインストール

root@18f6a6a5fa26:/# apt install python3 python3-pip python3-venv


Python仮想環境の作成

root@18f6a6a5fa26:/# python3 -m venv ~/venv
root@18f6a6a5fa26:/# source ~/venv/bin/activate
(venv) root@18f6a6a5fa26:/#


Tensorflowのインストール

(venv) root@18f6a6a5fa26:/# pip3 install tensorflow-gpu


動作確認

(venv) root@18f6a6a5fa26:/# python3
>>> import tensorflow as tf
>>> tf.Session()


エラーがでなければOK

2018年2月7日水曜日

ThinkPad X280のメモリはオンボードに

ThinkPad X280の製品仕様書が公開された。
https://www3.lenovo.com/jp/ja/static/catalog/nb-2018-x280_cf_0201

これによると、ThinkPad X280のメモリはオンボードになるらしい。

X1シリーズと比較してX2xxシリーズの利点は拡張性だったのだが、X280はただの小型版X1になってしまった印象だ。

最近のPCの価格から考えると、パーツを交換しながら長く使うより、使い捨てのほうが合理的なのかもしれない。

2018年1月31日水曜日

Nexus 6P ブートループの対処法

Nexus 6Pを使用中、突然フリーズしてAndroidが立ち上がらなくなった。

リカバリは正常に起動するところからシステム領域が壊れたと思い、ファクトリーイメージを書き込んだが起動しない。

Nexus 6Pには「ブートループ」と呼ばれる不具合があるらしく、症状が一致している。

この症状発生した場合、コア数を8コアから4コアに減らすと良いらしい。

コア数は、boot.imgを編集することで設定でき、編集済みのboot.imgが以下のリンク先で公開されている。

https://forum.xda-developers.com/nexus-6p/general/guide-fix-nexus-6p-bootloop-death-blod-t3640279

ここからAndroidのビルド番号に合ったboot.imgをダウンロードする。

音量下+電源でfastbootを起動し、PCからboot.imgを書き込む。

$ sudo fastboot flash boot boot.img

これで正常に起動するようになった。

2018年1月26日金曜日

UEFIのブートオーダーを一時的に変更する

UEFIにはブートマネージャー機能が内臓されている。
UEFI環境ではまず、UEFIのブートマネージャーがOSのブートマネージャーを起動し、OSを起動させている。

UEFIのブートマネージャには、次回起動時のブートオーダーを指定できるBootNextという機能がある。

Windows起動中、別のシステムで再起動したい場合、

設定→更新とセキュリティ→回復→PCの起動をカスタマイズ から起動したいシステムを指定して再起動することができる。

Windowsを優先的に起動する設定にしており、Linuxを起動したいときにこの段階を踏むのがめんどくさいので、バッチファイルを作ってみる。

Windowsのブートローダーを管理するBCDEditでUEFIもいじれるらしい。

まず、BCDEditでUEFIのブートエントリを表示してみる。コマンドプロンプトを管理者権限で起動し、以下のコマンドを入力。
>bcdedit /enum firmware

ファームウェアのブート マネージャー
--------------------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {f745f75a-0195-11e8-84b8-806e6f6e6963}
                        {32a8102e-da80-11e7-8406-ce8e5306cb4c}
                        {f745f759-0195-11e8-84b8-806e6f6e6963}
timeout                 1

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
description             Windows Boot Manager
locale                  ja-JP
inherit                 {globalsettings}
default                 {current}
resumeobject            {32a81030-da80-11e7-8406-ce8e5306cb4c}
displayorder            {current}
bootsequence            {f745f75a-0195-11e8-84b8-806e6f6e6963}
toolsdisplayorder       {memdiag}
timeout                 30

...

ファームウェア アプリケーション (101fffff
--------------------------------
identifier              {f745f75a-0195-11e8-84b8-806e6f6e6963}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\UBUNTU\GRUBX64.EFI
description             ubuntu

ここで表示されているidentifierが重要になる。
UEFIのブートローダーが、{fwbootmgr}
現在起動しているWindowsのブートローダーが、{bootmgr}
Ubuntuのブートローダーが、{f745f75a-0195-11e8-84b8-806e6f6e6963}
となっている。

{fwbootmgr}に対して、bootsequenceオプションとidentifierを入力することで、BootNextを設定できる。次回起動時にUbuntuを起動したいなら、以下のように入力する。
>bcdedit /set{fwbootmgr} bootsequence {f745f75a-0195-11e8-84b8-806e6f6e6963}

以下のように、「ファームウェアのブート マネージャー」にbootsequenceの値が追加されていれば成功。
>bcdedit /enum firmware

ファームウェアのブート マネージャー
--------------------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {f745f75a-0195-11e8-84b8-806e6f6e6963}
                        {32a8102e-da80-11e7-8406-ce8e5306cb4c}
                        {f745f759-0195-11e8-84b8-806e6f6e6963}
bootsequence            {f745f75a-0195-11e8-84b8-806e6f6e6963}
timeout                 1

この状態で再起動するとUbuntuが起動する。
>shutdown /r /t 0

以上のコマンドを実行するバッチファイルを作れば、楽にシステムを行き来できる。
reboot_ubuntu.bat

echo off
bcdedit /set{fwbootmgr} bootsequence {f745f75a-0195-11e8-84b8-806e6f6e6963} && shutdown /r /t 0


Linuxでも同様に設定が可能。
ブートエントリを表示
$ sudo efibootmgr
BootCurrent: 000C
Timeout: 1 seconds
BootOrder: 0000,0001,0004
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0004* UEFI: Built-in EFI Shell 

BootNextを設定

$ sudo efibootmgr --bootnext 0001

BootNextの値が設定されていれば成功。
$ sudo efibootmgr
BootNext: 0001
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0001,0004
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0004* UEFI: Built-in EFI Shell 

シェルスクリプトを作る
reboot_ubuntu.sh

#!/bin/bash
efibootmgr --bootnext 0001 && systemctl reboot

2018年1月25日木曜日

Unityのグローバルメニューを無効化する

Ubuntu 16.04 LTSで採用されているUnityのグローバルメニューを無効にする

$ sudo apt-get remove indicator-appmenu
$ sudo systemctl reboot

戻すときは

$ sudo apt-get install indicator-appmenu

2018年1月13日土曜日

ThinkPad X280が発表された

ThinkPad X280が発表されました。

大きな変更点としては、以下の通り。
  • 有線LAN端子が無くなった
  • 充電端子がUSB Type-Cのみになった
  • 内臓バッテリーのみになった
  • SDカードスロットが無くなった
  • 「ThinkShutter」と呼ばれるWebカメラの蓋ができた

X270では専用の充電端子とUSB Type-Cかの両方が用意されていました。USB Type-C採用の機器が増えていることから、わざわざ専用の充電器を持ち歩く必要もないため、USB Type-Cだけでも十分です。

USB Type-C搭載でモバイルバッテリー等からの充電も可能なため、内臓バッテリーだけでも問題はないでしょう。ThinkPadなので自分で分解して交換も容易だと考えられます。

SDカードスロットも特に必要性は感じられません。

有線LAN端子がなくなったのは少し不便に感じますが、時代の流れでしょうか。


2018年1月7日日曜日

crontabのエディタを変更する

cronの設定を変更する際、"crontab -e"コマンドを実行する。エディタが起動し、設定ファイルを編集することができる。

このとき起動するエディタは、システムのデフォルトのエディタが起動する。

デフォルトのエディタは環境変数$EDITORに設定されおり、これが参照される。

デフォルトのエディタを変更したい場合は$EDITORを書き換える。

一時的にエディタを変更したい場合は、以下のようにする。
$ EDITOR="/usr/bin/vim" crontab -e

UbuntuやDebianでは$EDITORが設定されておらず、以下のコマンドで設定する。
$ sudo update-alternatives --config editor

このコマンドでは、デフォルトエディタへのシンボリックリンクが/usr/bin/editorに作られる。

$EDITORは更新されないため、以下のように設定する必要がある。
$EDITOR="/usr/bin/editor"