Quantcast
Channel: OSAKANA TAROのメモ帳
Viewing all 816 articles
Browse latest View live

Commvault バックアップのWindowsクライアントをPUSHインストールする時にWindows Firewall 設定

$
0
0

Commvaultバックアップは、CommServeからPUSH操作によりWindowsクライアントへのCommvault エージェントのインストールを実施することができる。

その場合に必要なWindows Firewallの除外設定についてのメモ

「受信の規則」にある下記の3つの既存設定を「規則の有効化」する

・Windows Management Instrumentaion (DCOM受信)

・ Windows Management Instrumentaion (WMI受信)

・ファイルとプリンターの共有 (SMB 受信)

なお、ping応答もできるようにしたい場合は追加で「ファイルとプリンターの共有 (エコー要求 – ICMPv4 受信)」も有効化する(CommvaultのPUSHインストールにとっては不要)

インストールできるかの確認には、CommServeから「wmic /node:ホスト名 process get」と実行して対象ホストのプロセス一覧が取得出来れば、WMI動作としては問題ない感じです。

なお、CommVaultエージェントインストールにより、「CommVault_Process_1_????」といったルールが大量に登録される。

これは C:\Program Files\CommVault\Simpana\Base\AddFWExclusions.bat にて設定されたルールとなる。


NetBackupで他のNetBackupサーバから持ってきたテープメディア内のデータをリストアする

$
0
0

NetBackupサーバでバックアップに使用していたテープメディアを他のNetBackup環境に持ってきて、その中のデータをリストアしようとした場合に必要となるコマンドライン操作(CLI操作)について。

なお、インベントリとリストア以外のGUI操作はあるのかどうか知らない。

その1 現状のメディア認識状況などの確認

いまのメディア認識状態を確認するために現在のメディア認識状況確認「/usr/openv/volmgr/bin/vmquery -b -a」を実行してメディアがどういう認識状態か確認

[root@nbuserver ~]#  /usr/openv/volmgr/bin/vmquery -b -a
メディメディロボッ  ロボッロボット 側面/ 光         # マウント/  最終
アID   ア形式 ト形式  ト#    スロット 断面  パートナークリーニングマウント時間
-------------------------------------------------------------------------------
O500L5  HCART2 NONE     -      -     -       -          15     2019/04/19 00:00
O501L5  HCART2 NONE     -      -     -       -           2     2019/05/21 17:47
O502L5  HCART2 NONE     -      -     -       -           1     2019/05/21 17:48
O503L5  HCART2 NONE     -      -     -       -           1     2019/05/21 17:51
O504L5  HCART2 NONE     -      -     -       -          11     2019/05/21 17:54
[root@nbuserver ~]#

また、今回持ってくるテープは「O500L5」なのだが、その中に登録されている情報があるのかを「/usr/openv/netbackup/bin/admincmd/bpimmedia -mediaid O500L5 -U」を実行して確認する。

[root@nbuserver ~]# /usr/openv/netbackup/bin/admincmd/bpimmedia -mediaid O500L5 -U
エンティティが見つかりませんでした
[root@nbuserver ~]#

上記の様に「エンティティが見つかりませんでした」と出力される場合は、そのメディアの既存の登録がない状態。

その2 インベントリ実施

「/usr/openv/volmgr/bin/vmupdate -rt ロボットタイプ -rn ロボット番号」(/usr/openv/volmgr/bin/vmupdate -rt tld -rn 0)を実行して、インベントリ更新を行う。

実行後、vmqueryコマンドで該当するテープメディアについてロボット番号とスロット番号が認識されたことを確認する。

[root@nbuserver ~]# /usr/openv/volmgr/bin/vmupdate -rt tld -rn 0
推奨された変更のリストを生成しています...

次のように、ボリュームの構成を更新します。
=====================================================
メディア ID O500L5 (バーコード LTO500L5) を、スタンドアロンからスロット 1 に論理的に移動します。
メディア ID O501L5 (バーコード LTO501L5) を、スタンドアロンからスロット 2 に論理的に移動します。
メディア ID O502L5 (バーコード LTO502L5) を、スタンドアロンからスロット 3 に論理的に移動します。
メディア ID O503L5 (バーコード LTO503L5) を、スタンドアロンからスロット 4 に論理的に移動します。
メディア ID O504L5 (バーコード LTO504L5) を、スタンドアロンからスロット 5 に論理的に移動します。
ボリュームの構成を更新しています...

次のとおり論理的にメディアを移動することによって、ロボットライブラリに追加、
またはロボットライブラリ内で移動された既存のメディアを処理しています...
        メディア ID     スロット
        ==========      =======
         O500L5            1
         O501L5            2
         O502L5            3
         O503L5            4
         O504L5            5


ボリュームの構成が正常に更新されました。

[root@nbuserver ~]# /usr/openv/volmgr/bin/vmquery -b -a
メディメディロボッ  ロボッロボット 側面/ 光         # マウント/  最終
アID   ア形式 ト形式  ト#    スロット 断面  パートナークリーニングマウント時間
-------------------------------------------------------------------------------
O500L5  HCART2 TLD      0       1     -       -          15     2019/04/19 00:00
O501L5  HCART2 TLD      0       2     -       -           2     2019/05/21 17:47
O502L5  HCART2 TLD      0       3     -       -           1     2019/05/21 17:48
O503L5  HCART2 TLD      0       4     -       -           1     2019/05/21 17:51
O504L5  HCART2 TLD      0       5     -       -          11     2019/05/21 17:54
[root@nbuserver ~]#

その3 該当するメディアのメディアDB作成

該当するメディアについて、メディアDBを作成します。

「/usr/openv/netbackup/bin/admincmd/bpimport -create_db_info -id O500L5 -v」と実行します。

[root@nbuserver ~]# /usr/openv/netbackup/bin/admincmd/bpimport -create_db_info -id O500L5 -v
インポートフェーズ 1 を開始しました: 2019/05/21 18:43:30
INF - メディア ID O500L5 のデータベース情報を作成してください。
INF - メディア ID O500L5 のフェーズ 1 インポートを実行する bptm プロセスを正常に開始しました。
[root@nbuserver ~]#

その4 メディアの読み込みを実施

指定したメディアをテープドライブで読み込み、中身をスキャンします。

コマンドはその3から-create_db_infoを抜いた「/usr/openv/netbackup/bin/admincmd/bpimport -id O500L5 -v」となります。

[root@nbuserver ~]# /usr/openv/netbackup/bin/admincmd/bpimport -id O500L5 -v
インポートフェーズ 2 を開始しました: 2019/05/21 18:43:58
INF - ポリシー localbackup、スケジュール Full (oldserver_1554890341)、メディア ID O500L5、作成日時 2019/04/10 18:59:01 をインポートしています。
INF - INDEX ファイル情報のみを読み込んでインポートしています。
INF - クライアント oldserver、バックアップ ID oldserver_1554890341 のイメージを検証しています。

INF - ポリシー localbackup、スケジュール Full (oldserver_1554890341) のインポートは正常に完了しました。

INF - ポリシー localbackup、スケジュール Full (oldserver_1554890468)、メディア ID O500L5、作成日時 2019/04/10 19:01:08 をインポートしています。
INF - ポリシー localbackup、スケジュール Full (oldserver_1554890468) のインポートは正常に完了しました。

<略>


INF - ポリシー localbackup、スケジュール Full (oldserver_1558430463)、メディア ID O500L5、作成日時 2019/05/21 18:21:03 をインポートしています。
INF - ポリシー localbackup、スケジュール Full (oldserver_1558430463) のインポートは正常に完了しました。

INF - 20 イメージ (20 イメージ中) をインポートしました。インポートは成功しました。

[root@nbuserver ~]#

その5 スキャンした内容が登録されていることを確認

先ほどは「エンティティが見つかりませんでした」となった「/usr/openv/netbackup/bin/admincmd/bpimmedia -mediaid O500L5 -U」を再度実行します。

以下の様にbpimportで表示されたバックアップIDが出力されます。

[root@nbuserver ~]#  /usr/openv/netbackup/bin/admincmd/bpimmedia -mediaid O500L5 -U
--------------------------------------------------------------------------------
バックアップ ID: oldserver_1558430463
 ポリシー:        localbackup
 スケジュール形式: FULL
 保持レベル      1
 ファイルの数:  4788
 圧縮:              N
 暗号化:           N
 イメージ形式:  インポート済
 ー・チー﨣芦ミール・ 1
 有効期限:        2019年06月04日 18時44分39秒
 保留中のイメージ: 0

  コピー数:       1
  フラグメント数: 1
  フラグメントサイズ (KB): 263680
  メディア形式: リムーバブル
  コ・クO             hcart2
  ファイル数:    22
  オフセット:    5382
  ホスト:          nbuserver
  書き込みに使用されたデバイス: -1
  MPX:                N
  有効期限:       2019年06月04日 18時44分39秒
  保持レベル:                                 1
  メディア ID:    O500L5
  保留中のコピー: 0
--------------------------------------------------------------------------------

<略>

--------------------------------------------------------------------------------
バックアップ ID: oldserver_1558430463
 ポリシー:        localbackup
 スケジュール形式: FULL
 保持レベル      1
 ファイルの数:  4788
 圧縮:              N
 暗号化:           N
 イメージ形式:  インポート済
 ー・チー﨣芦ミール・ 1
 有効期限:        2019年06月04日 18時44分39秒
 保留中のイメージ: 0

  コピー数:       1
  フラグメント数: 1
  フラグメントサイズ (KB): 263680
  メディア形式: リムーバブル
  コ・クO             hcart2
  ファイル数:    22
  オフセット:    5382
  ホスト:          nbuserver
  書き込みに使用されたデバイス: -1
  MPX:                N
  有効期限:       2019年06月04日 18時44分39秒
  保持レベル:                                 1
  メディア ID:    O500L5
  保留中のコピー: 0
[root@nbuserver ~]#


その5 リストアする

NetBackupの通常のリストア手法でリストアします。

NetBackupの操作をコマンドで行う

$
0
0

NetBackupのJava GUI(jnbSA)上で行う操作をCLIコマンドで行うためのメモ書き。

アクティビティモニター

アクティビティモニターの一覧表示:bpdbjobs

アクティビティモニターの一覧は「bpdbjobs」をオプション無しで実行すると得られる。

フルパスは「/usr/openv/netbackup/bin/admincmd/bpdbjobs」

アクティビティモニターで各ジョブの詳細ログ確認:bpdbjobs -report -jobid 番号 -all_columns

各ジョブの詳細ログを確認する場合は「bpdbjobs -report -jobid 番号 -all_columns」となるのだが、これだと「,」区切りで1行に全てを出力してしまう。

人の目だと見にくいので「bpdbjobs -report -jobid 番号 -all_columns | sed s/,/,\n/ig」と実行すると、改行が入り多少見やすくなる。

テープドライブの操作

デバイスモニターの一覧表示:tpconfig -l か tpconfig -d

デバイスモニターで確認出来る各テープドライブのステータスは「tpconfig -l」か「tpconfig -d」で確認出来る。

「tpconfig -d」だとテープドライブのみの確認で、「tpconfig -l」だとロボット番号を含めて確認しやすい形となるので「tpconfig -l」の方を実行することをお勧めする。

フルパスは「/usr/openv/volmgr/bin/tpconfig」

ドライブステータスの変更:vmoprcmd -up ドライブ番号

状態が「DOWN(停止)」となっているテープドライブを「UP(有効)」にするには「vmoprcmd -up ドライブ番号」を実行する。

[root@nbuserver ~]# /usr/openv/volmgr/bin/tpconfig -l
デバイスロボットドライブ       ロボット                    Drive                Device     Second
形式     番号 インデックス  形式 ドライブ番号 状態  Comment    Name                 Path       Device Path
ロボット      0    -    TLD    -       -  -          -                    /dev/sg3
  ドライブ    -    0 hcart2    1  停止  -          IBM.ULT3580-TD5.000  /dev/nst1
ロボット      1    -    TLD    -       -  -          -                    /dev/sg2
  ドライブ    -    1    dlt    1  停止  -          QUANTUM.SDLT600.000  /dev/nst0
[root@nbuserver ~]# /usr/openv/volmgr/bin/vmoprcmd -up 0
[root@nbuserver ~]# /usr/openv/volmgr/bin/vmoprcmd -up 1
[root@nbuserver ~]# /usr/openv/volmgr/bin/tpconfig -l
デバイスロボットドライブ       ロボット                    Drive                Device     Second
形式     番号 インデックス  形式 ドライブ番号 状態  Comment    Name                 Path       Device Path
ロボット      0    -    TLD    -       -  -          -                    /dev/sg3
  ドライブ    -    0 hcart2    1  有効  -          IBM.ULT3580-TD5.000  /dev/nst1
ロボット      1    -    TLD    -       -  -          -                    /dev/sg2
  ドライブ    -    1    dlt    1  有効  -          QUANTUM.SDLT600.000  /dev/nst0
[root@nbuserver ~]#

フルパスは「/usr/openv/volmgr/bin/vmoprcmd」

ロボットのインベントリ実行:vmupdate -rt tld -rn ロボット番号

ロボットに対してインベントリを実行するには「vmupdate -rt tld -rn ロボット番号」を実行します。

ロボット番号については「tpconfig -l」で確認します。

「-recommend」オプションをつけて実行すると「インベントリ操作-内容とボリュームの構成の比較」となります。

-recommendなしが「 インベントリ操作 -ボリューム構成の更新」になります。

[root@nbuserver ~]# /usr/openv/volmgr/bin/vmupdate -rt tld -rn 0 -recommend
推奨された変更のリストを生成しています...

次のように、ボリュームの構成を更新します。
=====================================================
ボリュームの構成は、ロボット内と同じ最新の状態です。
[root@nbuserver ~]# /usr/openv/volmgr/bin/vmupdate -rt tld -rn 0
推奨された変更のリストを生成しています...

次のように、ボリュームの構成を更新します。
=====================================================
ボリュームの構成は、ロボット内と同じ最新の状態です。
[root@nbuserver ~]#

ロボットの中のテープ一覧を表示:vmquery -b -rn ロボット番号

ロボット上で認識されているテープメディアを確認するには「vmquery -b -rn ロボット番号」を実行します。

[root@nbuserver ~]# /usr/openv/volmgr/bin/vmquery -b -rn 0
メディメディロボッ  ロボッロボット 側面/ 光         # マウント/  最終
アID   ア形式 ト形式  ト#    スロット 断面  パートナークリーニングマウント時間
-------------------------------------------------------------------------------
O500L5  HCART2 TLD      0       1     -       -          23     2019/06/03 16:59
O501L5  HCART2 TLD      0       2     -       -           5     2019/06/03 17:10
O502L5  HCART2 TLD      0       3     -       -           6     2019/06/03 15:26
O503L5  HCART2 TLD      0       4     -       -           1     2019/05/21 17:51
O504L5  HCART2 TLD      0       5     -       -          13     2019/06/03 11:24
[root@nbuserver ~]#

テープのQuick Erase:bplabel

NetBackupで記録したテープメディア内の登録を削除する場合「bplabel」コマンドを実行します。

ただ、有効期限が切れていないメディアに対しては実行できません。

その場合は「bpexpdate -d 0 -m メディアID」コマンドを実行して有効期限を切ってから、bplabelを実行する形となります。

[root@nbuserver logs]# /usr/openv/netbackup/bin/admincmd/bplabel -m O501L5 -d hcart2 -erase
メディアが割り当てられていますが、ラベルが付けられません
[root@nbuserver logs]# /usr/openv/netbackup/bin/admincmd/bpexpdate -d 0 -m O501L5
メディア O501L5 が 2019/06/04 17:47:09 で期限切れになります
このメディアのデータは本当に業務に必要ではありませんか
、 O501L5 を本当に削除しますか y/n(n)? y
[root@nbuserver logs]# /usr/openv/netbackup/bin/admincmd/bplabel -m O501L5 -d hcart2 -erase
メディアはすでに NetBackup 形式です。メディア ID = O501L5。消去 を実行しますか? y/n (n) y
消去が完了しました。
[root@nbuserver logs]#

なお、「-erase」がQuick Eraseで「-erase -l」がLong Eraseとなります。

リストア操作を手動で実施する場合

その1:使用可能なバックアップの捜索

「bpimmedia -client クライアント名」もしくは「bpimmedia -client クライアント名 -U」で指定したクライアントに関するバックアップIDを一覧化する。

-Uオプションの方が人が見やすい形となるが、sort/grepで抜き出す場合は-Uなしで実行した方が良い。

その2:リストアしたいバックアップデータを含む「バックアップ時刻」を確認

「bpimagelist -backupid バックアップID -U」を実行し、該当するバックアップIDの「バックアップ時刻」を取得。

この「バックアップ時刻」の文字列をこの後で使う。

その3:該当するバックアップに含まれるファイルを確認

UNIX系(Standard形式)クライアントの場合は「-t 0」なので「bplist -C クライアント名 -t 0 -s バックアップ時刻 -l -R /」

Windows(MS-Windows形式)クライアントの場合は「-t 13」なので 「bplist -C クライアント名 -t 13 -s バックアップ時刻 -l -R /」

なお、選択したバックアップ時刻が最新のバックアップでない場合は「-e バックアップ時刻」を追加し、データを限定する。

[root@nbuserver ~]#  /usr/openv/netbackup/bin/bplist -C nbuwindows -t 13 -s 2019/04/24 09:11 -l /C/Users/Administrator/Documents/test.txt
-rwx------ root;Admi root;None          32  4月 10日 19:47 /C/Users/Administrator/Documents/test.txt
[root@nbuserver ~]#

その4:リストアしたいファイルを選択

リストアしたいファイルの選択は、テキストファイル内にフルパスを記載することで行う。

先ほどのbplistの出力結果に記載されているパスを使用する。

Windowsの場合、「\」は使用できず「/」で代替するため「C:\Users\」が「/C/Users/」という風になる。

[root@nbuserver ~]# cat /tmp/list.txt
/C/Users/Administrator/Documents/test.txt
[root@nbuserver ~]#

その5:リストア先を変更する場合は、変更する規則を記載

リストア先のディレクトリを変更したい場合、変更する規則をテキストファイル内に記載します。

たとえば「C:\Users\Administrator\Documents\」を「C:\tmp\」に変えたい場合は下記の様に記載します。

[root@nbuserver ~]# cat /tmp/change.txt
change /C/Users/Administrator/Documents/ to /C/tmp/
[root@nbuserver ~]#

「change 元パス to 変更後パス」という書式で、複数の変更がある場合は、それぞれ列挙します。

その6:リストアを実行

bprestoreコマンドでリストアを実行します。

バックアップを取得したクライアントとは別のクライアントにリストアしたい場合は「-D 宛先クライアント」を指定します。

Windows(MS-Windows形式)の場合、「/usr/openv/netbackup/bin/bprestore -C クライアント名 -t 13 -s <バックアップ時刻> -D 宛先クライアント -R 変更規則ファイル -f リストア対象ファイル 」といったように実行します。

hp 15 db-00000を買ってメモリとM2 SSDを増設してみた

$
0
0

家でメール、Webブラウザとデジカメデータの管理に使うノートパソコンを10万円以内で買い替えたい、という要望があった。

現行は 15.6インチの富士通LIFEBOOK AH40/M (FMVA40MWJ) をメモリ16GBに増量したものを使用中。Windows10アップデート後は、AMD E1-2100の性能の無さと、HDDの遅さが遺憾なく発揮され起動後にディスクアクセスが落ち着くまで長時間かかっている状態でした。

いろいろ選択肢を検討した結果、HP 15 db-00000のいろいろバリーションがある中からhp 15 db0178auを選択しました。

Ryzen 3 、4GBメモリ、1TB HDDで49500円というスペックのものですね。


まぁ、当然そのままではキツイので、メモリ 8GBとIntelのM2 SSDのストレージIntel SSD 760p 256GBも買っています。

注文から3週間で届きました。

中身は以下の様な感じです。

「速攻!HPパソコンナビ」と、ACアダプタ用の電源ケーブルが2種類ある、というのが注目点ですね。

で、早速セットアップ開始です。

最近のWindows10なので、オフラインユーザ作成時にパスワードを設定してしまうと、パスワードのヒントを3つ設定しなければなりません。

しかし、パスワードを未設定に設定すると、ヒントを設定しなくてもいいので、とりあえず未設定で進めます。

う~ん・・・いらないものもインストールされていますね。

Windows OSは普通に全部再インストールしちゃうことにして、解体をします。

ネジは以下の赤丸のポイントにあります。

隠れてるネジについては、両面テープで貼り付けられているゴムをうまく剥がして外します。

また、筐体真ん中にあるネジはDVDドライブを止めているネジになります。このネジを外してから、ドライブを引っ張ると抜けます。

で・・・うまいことやって開けます。

キーボード側を開いて、無理矢理こじ開けていきます。

↑の赤枠ぐらいのところにある隙間に丈夫な薄いものをいれ、こじ開けていきます。

スマホ向けで売ってるこういうのを使ってもいいでしょうね。私は細い精密ドライバーで開けたのでちょっと傷が残ってしまいました。

で、徐々に開けていって、最後はがばっと開けます。

ちなみに、うちの場合、最初DVDドライブが引き抜ける状態にあるとは知らなかったので、DVDドライブが入ったまま開けたのでこんな感じで開けました。

基板を観察。

メモリ増設とM2.SSDを増設して記念撮影(なお、このあとHDDを抜きました)。M2.SSDスロットには止めるためのネジがありました。

裏蓋を戻してBIOSに入ります。

電源ボタンを押したあと「ESC」キーを何回か押していると起動選択メニューが出てきますので、そこで「F10」キーを押し、BIOSに入ります。

BIOSで設定できる項目はあまりありません。

で、あとは普通にWindows 10をインストールします。

初期インストール状態ではドライバがいくつかあたっていませんが、無線LANはちゃんと認識しているのでWindows Updateが実行できます。その結果、ドライバが全部適用されました。

hp提供の管理ソフトはHP Support AssistantをインストールすればとりあえずOKそうです。このソフトでBIOSやドライバのアップデートも出来ました。

ちょっとCPUファンがうるさい感じもありますが、とりあえずは使ってみますかね

PowerShellでポートが空いているかチェック

$
0
0

PowerShellの「Test-NetConnection」使って指定したポートがアクセスできるかを確認することができる。

ただ、細かいあたりは指定できないようで、タイムアウト待ち時間やリトライ回数の指定などはできない。標準だと10秒待つようです。

雑に、192.168.1.1~192.168.1.254の範囲でssh用のポート22番が空いているものがあるかを確認するものとして以下を書いた。

for ($count=1; $count -lt 255; $count++){
    $ipaddr="192.168.1."+$count
    if( (Test-NetConnection $ipaddr -port 22).TcpTestSucceeded -eq "True"){
        Write-Host $ipaddr
    }
}

ただ、アクセスできなかった場合、下記の様に「警告」が出力される作りになっている。

警告: TCP connect to (192.168.1.10 : 22) failed
警告: Ping to 192.168.1.10 failed with status: TimedOut

探せば警告を抑止する手法もありそうですが、面倒なので省略しています。


Test-NetConnectionを使う限りはカスタマイズできないので「Test network ports faster with PowerShell」にていくつか例が提示されています。

その1

function testport ($hostname='yahoo.com',$port=80,$timeout=100) {
  $requestCallback = $state = $null
  $client = New-Object System.Net.Sockets.TcpClient
  $beginConnect = $client.BeginConnect($hostname,$port,$requestCallback,$state)
  Start-Sleep -milli $timeOut
  if ($client.Connected) { $open = $true } else { $open = $false }
  $client.Close()
  [pscustomobject]@{hostname=$hostname;port=$port;open=$open}
}

testport

hostname  port  open
--------  ----  ----
yahoo.com   80  True

その2

Param([string]$srv,$port=135,$timeout=3000,[switch]$verbose)

# Test-Port.ps1
# Does a TCP connection on specified port (135 by default)

$ErrorActionPreference = "SilentlyContinue"

# Create TCP Client
$tcpclient = new-Object system.Net.Sockets.TcpClient

# Tell TCP Client to connect to machine on Port
$iar = $tcpclient.BeginConnect($srv,$port,$null,$null)

# Set the wait time
$wait = $iar.AsyncWaitHandle.WaitOne($timeout,$false)

# Check to see if the connection is done
if(!$wait)
{
    # Close the connection and report timeout
    $tcpclient.Close()
    if($verbose){Write-Host "Connection Timeout"}
    Return $false
}
else
{
    # Close the connection and report the error if there is one
    $error.Clear()
    $tcpclient.EndConnect($iar) | out-Null
    if(!$?){if($verbose){write-host $error[0]};$failed = $true}
    $tcpclient.Close()
}

# Return $true if connection Establish else $False
if($failed){return $false}else{return $true}

Pythonスクリプトを使ってyoutube動画をアップロードする手法

$
0
0

YouTube Data API(v3)の「Videos: insert」に記載されているJava/.Net/PHP/Python/Rubyのサンプルから、とりあえずPythonを選択。

ちょっと前のWeb記述を見ると、10分以上の動画がアップロードできない、的なことを書いているものもあるけれど、このWebの冒頭に「最大ファイルサイズ: 64 GB」とのことなので、大丈夫だろうと判断。

とりあえずそのままコピー

#!/usr/bin/python

import httplib
import httplib2
import os
import random
import sys
import time

from apiclient.discovery import build
from apiclient.errors import HttpError
from apiclient.http import MediaFileUpload
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import argparser, run_flow


# Explicitly tell the underlying HTTP transport library not to retry, since
# we are handling retry logic ourselves.
httplib2.RETRIES = 1

# Maximum number of times to retry before giving up.
MAX_RETRIES = 10

# Always retry when these exceptions are raised.
RETRIABLE_EXCEPTIONS = (httplib2.HttpLib2Error, IOError, httplib.NotConnected,
  httplib.IncompleteRead, httplib.ImproperConnectionState,
  httplib.CannotSendRequest, httplib.CannotSendHeader,
  httplib.ResponseNotReady, httplib.BadStatusLine)

# Always retry when an apiclient.errors.HttpError with one of these status
# codes is raised.
RETRIABLE_STATUS_CODES = [500, 502, 503, 504]

# The CLIENT_SECRETS_FILE variable specifies the name of a file that contains
# the OAuth 2.0 information for this application, including its client_id and
# client_secret. You can acquire an OAuth 2.0 client ID and client secret from
# the Google Developers Console at
# https://console.developers.google.com/.
# Please ensure that you have enabled the YouTube Data API for your project.
# For more information about using OAuth2 to access the YouTube Data API, see:
#   https://developers.google.com/youtube/v3/guides/authentication
# For more information about the client_secrets.json file format, see:
#   https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
CLIENT_SECRETS_FILE = "client_secrets.json"

# This OAuth 2.0 access scope allows an application to upload files to the
# authenticated user's YouTube channel, but doesn't allow other types of access.
YOUTUBE_UPLOAD_SCOPE = "https://www.googleapis.com/auth/youtube.upload"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

# This variable defines a message to display if the CLIENT_SECRETS_FILE is
# missing.
MISSING_CLIENT_SECRETS_MESSAGE = """
WARNING: Please configure OAuth 2.0

To make this sample run you will need to populate the client_secrets.json file
found at:

   %s

with information from the Developers Console
https://console.developers.google.com/

For more information about the client_secrets.json file format, please visit:
https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
""" % os.path.abspath(os.path.join(os.path.dirname(__file__),
                                   CLIENT_SECRETS_FILE))

VALID_PRIVACY_STATUSES = ("public", "private", "unlisted")


def get_authenticated_service(args):
  flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
    scope=YOUTUBE_UPLOAD_SCOPE,
    message=MISSING_CLIENT_SECRETS_MESSAGE)

  storage = Storage("%s-oauth2.json" % sys.argv[0])
  credentials = storage.get()

  if credentials is None or credentials.invalid:
    credentials = run_flow(flow, storage, args)

  return build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
    http=credentials.authorize(httplib2.Http()))

def initialize_upload(youtube, options):
  tags = None
  if options.keywords:
    tags = options.keywords.split(",")

  body=dict(
    snippet=dict(
      title=options.title,
      description=options.description,
      tags=tags,
      categoryId=options.category
    ),
    status=dict(
      privacyStatus=options.privacyStatus
    )
  )

  # Call the API's videos.insert method to create and upload the video.
  insert_request = youtube.videos().insert(
    part=",".join(body.keys()),
    body=body,
    # The chunksize parameter specifies the size of each chunk of data, in
    # bytes, that will be uploaded at a time. Set a higher value for
    # reliable connections as fewer chunks lead to faster uploads. Set a lower
    # value for better recovery on less reliable connections.
    #
    # Setting "chunksize" equal to -1 in the code below means that the entire
    # file will be uploaded in a single HTTP request. (If the upload fails,
    # it will still be retried where it left off.) This is usually a best
    # practice, but if you're using Python older than 2.6 or if you're
    # running on App Engine, you should set the chunksize to something like
    # 1024 * 1024 (1 megabyte).
    media_body=MediaFileUpload(options.file, chunksize=-1, resumable=True)
  )

  resumable_upload(insert_request)

# This method implements an exponential backoff strategy to resume a
# failed upload.
def resumable_upload(insert_request):
  response = None
  error = None
  retry = 0
  while response is None:
    try:
      print "Uploading file..."
      status, response = insert_request.next_chunk()
      if 'id' in response:
        print "Video id '%s' was successfully uploaded." % response['id']
      else:
        exit("The upload failed with an unexpected response: %s" % response)
    except HttpError, e:
      if e.resp.status in RETRIABLE_STATUS_CODES:
        error = "A retriable HTTP error %d occurred:\n%s" % (e.resp.status,
                                                             e.content)
      else:
        raise
    except RETRIABLE_EXCEPTIONS, e:
      error = "A retriable error occurred: %s" % e

    if error is not None:
      print error
      retry += 1
      if retry > MAX_RETRIES:
        exit("No longer attempting to retry.")

      max_sleep = 2 ** retry
      sleep_seconds = random.random() * max_sleep
      print "Sleeping %f seconds and then retrying..." % sleep_seconds
      time.sleep(sleep_seconds)

if __name__ == '__main__':
  argparser.add_argument("--file", required=True, help="Video file to upload")
  argparser.add_argument("--title", help="Video title", default="Test Title")
  argparser.add_argument("--description", help="Video description",
    default="Test Description")
  argparser.add_argument("--category", default="22",
    help="Numeric video category. " +
      "See https://developers.google.com/youtube/v3/docs/videoCategories/list")
  argparser.add_argument("--keywords", help="Video keywords, comma separated",
    default="")
  argparser.add_argument("--privacyStatus", choices=VALID_PRIVACY_STATUSES,
    default=VALID_PRIVACY_STATUSES[0], help="Video privacy status.")
  args = argparser.parse_args()

  if not os.path.exists(args.file):
    exit("Please specify a valid file using the --file= parameter.")

  youtube = get_authenticated_service(args)
  try:
    initialize_upload(youtube, args)
  except HttpError, e:
    print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content)

そして実行!

-bash-4.2$ ./youtube-upload
Traceback (most recent call last):
  File "./youtube-upload", line 4, in <module>
    import httplib2
ImportError: No module named httplib2
-bash-4.2$

CentOS7に必要なPythonモジュールが入っていませんでした。もう1つエラーになったoauth2clientとともに「yum install python-httplib2 python2-oauth2client」でインストールして再実行。

-bash-4.2$ ./youtube-upload
Traceback (most recent call last):
  File "./youtube-upload", line 10, in <module>
    from apiclient.discovery import build
ImportError: No module named apiclient.discovery
-bash-4.2$

今度のエラーのapiclientは「YouTube API: Client Libraries」に含まれるもの。

Python用は「https://github.com/googleapis/google-api-python-client」にある手順に従いインストールする。

ドキュメントには「pip install –upgrade google-api-python-client」とあるけど、「pip install google-api-python-client」で実行した。

[root@server ~]# pip install google-api-python-client
Collecting google-api-python-client
  Downloading https://files.pythonhosted.org/packages/5b/ba/c4e47e2fdd945145ddb10db06dd29af19b01f6e6d7452348b9bf10375ee9/google-api-python-client-1.7.9.tar.gz (142kB)
Installing collected packages: pyasn1, pyasn1-modules, cachetools, rsa, google-auth, google-auth-httplib2, uritemplate, google-api-python-client
  Running setup.py install for google-api-python-client ... done
Successfully installed cachetools-3.1.1 google-api-python-client-1.7.9 google-auth-1.6.3 google-auth-httplib2-0.0.3 pyasn1-0.4.5 pyasn1-modules-0.2.5 rsa-4.0 uritemplate-3.0.0
You are using pip version 8.1.2, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[root@server ~]#

で、改めてスクリプトを実行してみる。

-bash-4.2$ ./youtube-upload --file /mnt/work/fuuka/223779_20190618-0013_best.mpg
The client secrets were invalid:
('Error opening file', 'client_secrets.json', 'No such file or directory', 2)

WARNING: Please configure OAuth 2.0

To make this sample run you will need to populate the client_secrets.json file
found at:

   /mnt/work/youtube/client_secrets.json

with information from the Developers Console
https://console.developers.google.com/

For more information about the client_secrets.json file format, please visit:
https://developers.google.com/api-client-library/python/guide/aaa_client_secrets

-bash-4.2$

当然のエラー。

client_secrets.json というファイルに認証情報を記載しなければならないようだ。

Google API Console」にアクセスして、新規プロジェクトを作成。
認証情報タブから「OauthクライアントIDの作成」を選び、「アプリケーションの種類:その他」で作成します。
作成すると、jsonファイルがダウンロードできようになりますので、それをダウンロードし、client_secrets.json という名前で保存します。

「./youtube-upload –file ファイル名 –noauth_local_webserver」と実行すると、URLが表示されます。このURLをブラウザに入力すると、Googleの認証が要求されますので、パスワードを入力します。( –noauth_local_webserver を指定しない場合、そのLinux上でブラウザが開かれます。Oauth認証にはJavaScript対応ブラウザを使う必要があるため、CLIだと無理です。)


認証が完了するとVerification codeがブラウザ上に表示されますので、それをコピーし、コマンドに入力します。

また、下記の様なメールがGoogleアカウントのメールに届きます。(「youtube upload by osakanataro」という文字列は、Google API Consoleで設定したものです)

これで認証が終わると、ファイルアップロードが出来るようになります。

-bash-4.2$ ./youtube-upload --file /mnt/work/fuuka/223779_20190618-0013_best.mpg  --noauth_local_webserver
Uploading file...
Video id 'IAHhZlSXoDk' was successfully uploaded.
-bash-4.2$

Youtube studioにアクセスして状態を確認。

何も設定してなかったので「Test Title」「Test Description」となっていますね。

続いて指定した場合

-bash: ./youtube-upload --file: そのようなファイルやディレクトリはありません
-bash-4.2$ ./youtube-upload --file /mnt/work/fuuka/223779_20190617-1738_best.mpg --title "紫吹ふうか 2019年06月17日 17:38開始配信" --description "紫吹ふうか さ んによる 2019年06月17日 17:38 に開始された配信の転載です。" --keywords "AVATAR2.0","紫吹ふうか"
Uploading file...
Video id '5-Z0YDv5YCk' was successfully uploaded.
-bash-4.2$

Youtube Studioを確認すると、指定したタイトル、説明、タグ(Keywords)が設定されていることがわかります。

あとはサムネ調整とかが必要という感じですね。

つまりは、これで、配信終わったら即座にyoutubeにアップロードするスクリプトが組めたわけでして・・・

UpdraftPlusというWordPressのバックアッププラグインが動いてなかった話

$
0
0

UpdraftPlus」というWordpressのプラグインがある。

これは、WordpressのデータをGoogle Driveなどの外部サーバにバックアップしてくれるというものである。

で・・・しばらく前に入れてみてたのですが、設定画面を開いてみると予想外のステータス表示が・・・

「WordPressは延滞しているスケジュールされたタスクを持っています」

・・・おや?

リンク先「The scheduler in my WordPress installation is not working – what should I do?」から「My scheduled backups do nothing, or “Backup Now” stops mid-way」を見てみるとwp-config.phpに「define(‘DISABLE_WP_CRON’, true);」って設定されていない?とのこと。

が・・・うちの環境だと説くに設定はされていない。

ただ、wp-cronを常時有効にすると負荷があがるという話もあるので他に方策が無いか探してみると「Can I run backups from the shell / cron?」という記事を発見。

WordPressをCLIで管理できるWP-CLIを使い、UpdraftPlusを動作させることができるというドキュメント「Using WP CLI with UpdraftPlus」があった。

試してみる・・・

まず、プラグインのインストール状況を確認するため「wp plugin list」を実行

$ wp plugin list
+---------------------------------------------+----------+--------+---------+
| name                                        | status   | update | version |
+---------------------------------------------+----------+--------+---------+
| akismet                                     | active   | none   | 4.1.2   |
| amp                                         | active   | none   | 1.2.0   |
| updraftplus                                 | active   | none   | 1.16.15 |
| wordpress-importer                          | inactive | none   | 0.6.4   |
| wp-multibyte-patch                          | active   | none   | 2.8.2   |
+---------------------------------------------+----------+--------+---------+
$

activeとなっていることを確認できたので「wp updraftplus backup」を実行!

$ wp updraftplus backup
Error: 'updraftplus' is not a registered wp command. See 'wp help' for available commands.
$

???

wordpressのフォーラムに「‘updraftplus’ is not a registered wp command.」という記事を発見。

回答「Free版じゃ使えないのでは?」

なるほど!

というわけで、うちの場合、Free版だったのでwp-cliによる実行は使えないようでした。

vSphere上にRHEL8を日本語でインストールしようとするとインストーラがちゃんと表示されない

$
0
0

vSphere 6.0環境でRHEL8をインストールしようと、日本語インタフェースで進めようとしたら、「インストール概要」の画面以降、仮想コンソールからはみ出た範囲まで使われるようになってしまう。

対処方法を捜索・・・vSphere側の「svga.height」「svga.width」指定ではうまくいかなかったので、Anaconda側のパラメータを「Anaconda Boot Options一覧」から探したところ「inst.resolution」を発見。

起動時のカーネルオプションに対して「inst.resolution=1024×768」を追加することで、下記の様に全てを表示させることに成功した。


ラズパイ4がUS,EU圏以外でも発売できる理由って何なんだろう?

$
0
0

ラズベリーパイ4が発売になりました。

基板上にFCC ID(US)とCEロゴ(EU圏)が印字されているので、たぶんこの2箇所で使うのは合法なんだろうなぁ、って感じです。

で・・・いま手元にあるラズパイ3の箱を見てみると各国の電波系の認証IDとロゴがあります。

CE

CEマークで、EU圏で使う場合に必要です。

FCC

FCCマークで、アメリカで使う場合に必要です。

FCC IDが発行されます。文字列を指定できるようで、製品名称が入ったりします。

CMIT ID 中国のCCC認証を取得すると発行されるIDです。SRRCの場合もあるようです。

KCC

韓国のKCCマークです。

MSIP-CMN-P2R-RPI32がラズパイ3のIDのようです。

NCC

台湾のNCCマークです。

通称技適マークです。 工事設計認証のマーク。TELECとも呼ばれることがあります。

香港で使用するための認証です。

上記の認証を発行している組織「通訊事務管理局」のロゴです。

というわけで、私が所有しているラズパイ3を合法的に利用できるのは、日本、アメリカ、EU圏、韓国、中国、香港、台湾であるようです。

それ以外の国については認可がおりてないため取り締まられる可能性がある、ということになります。

いままでの機器における認可の取得状況を見る限り、ラズパイ4についても、同じようにアメリカとEU圏以外についてはちゃんと認証を取得しなければ不味いはずなのですが、現時点ではそれ以外の国についてちゃんと認証取得が完了しているかどうかは不明です。

いったいどのようになっているのでしょうかねぇ・・・


株機器会社イー・オータマの「各国申請代行」のページに各国の認証ロゴがあり、調べる手がかりになりました。

総務省の平成24年の記事「 各国の基準認証制度の概要 -MRA情報の調査に親しむ- 」というpdfファイルは韓国、カナダ、中国、オーストラリア、EU圏、シンガポール、アメリカにおける電波認証に係わる組織と規制についての説明が簡単にされており、大変役にたちました。

また平成22年発行の「各国基準認証制度の概要」ではインド、中国、韓国、カナダ、ペルー、ロシアで(データ通信も行う)無線機器を販売する際に必要となる認証について解説されています。

ESXi上でCentOS7なのにCentOS6だと言われる件

$
0
0

ESXi上でCentOS7をインストールした場合、open-vm-toolsをインストールされていても「CentOS6」だと言われてしまう件について調査した。

なお、何故かvCenter上から見た場合は警告されず、直接ESXi上で仮想マシンを見た際にだけ言われる。

結論めいたこと

open-vm-toolsのバグ(Fix CentOS 7.6 detection)で、open-vm-tools 10.3.10以降で修正されている。

しかし、2019/06/27時点でのCentOS7のopen-vm-toolsは10.2.5であり修正されていないバージョンであるため公式な手法では対処できない。

回避策としては2つある

/etc/centos-release を修正する

今回のバグは「CentOS Linux release 7.6.1810 (Core)」の文字列からOSバージョン判定をする際に「”6.”があればCentOS6」「”7.”があればCentOS7」「”8.”があればCentOS8」という順番で行っているせいで、「7.6.1810」の中にある「6.」を読み取ってしまい「CentOS6」と判定されていることにより発生している。

このため、/etc/centos-release 内の誤判定要素を無くすことで対処できなくもない。

例えば「 CentOS Linux release 7.6 1810 (Core) 」と、「.」を抜いてしまうとか。

ただ、このファイルは他のソフトウェアでもディストリビューション判別に使用されており、そこでの条件の書き方によっては正しく判定できなくなってしまう恐れもあるため、注意が必要である。

vSphere仮想マシンオプションのゲストOSを修正する

vSphere6.5以降(仮想マシンバージョン13以降)でCentOS7を使用する場合、仮想マシンオプションで「ゲストOS:Linux」と「ゲストOSのバージョン:CentOS 7(64ビット)」を設定する。

誤判定で「CentOS 6(64ビット)」と認識されているんだったら、仮想マシンオプションの「ゲストOSのバージョン」も「CentOS 6 (64ビット)」にしちゃえばいいじゃん。

という非常に雑な対応手法。

なんでこんなことに

githubにあるopen-vm-toolsのソースコードからopen-vm-tools/open-vm-tools/lib/misc/hostinfoPosix.c を見てみるとひたすら条件が列挙されている。

いままではバージョン表記の中に「.」が2個登場するという想定が無かったようで、Debianでも同様の手法で判定しています。

今回のCentOSでの対応は、いままで「6.」をキーにしていたものを「 6.」と数字の前にスペースが入っていることを検出するようにした、というものになっている。

個人的に結構意外だったのはRedHat Enterprise LinuxとCentOSの判定ルーチンが独立しているという点。

   if (strstr(distroLower, "red hat")) {
      if (strstr(distroLower, "enterprise")) {

         /*
          * Looking for "release x" here instead of "x" as there could be
          * build version which can be misleading. For example Red Hat
          * Enterprise Linux ES release 4 (Nahant Update 3)
          */

         int release = 0;
         char *releaseStart = strstr(distroLower, "release");

         if (releaseStart != NULL) {
            sscanf(releaseStart, "release %d", &amp;release);
            if (release > 0) {
               snprintf(distroShort, distroShortSize, STR_OS_RED_HAT_EN"%d",
                        release);
            }
         }

         if (release <= 0) {
            Str_Strcpy(distroShort, STR_OS_RED_HAT_EN, distroShortSize);
         }

      } else {
         Str_Strcpy(distroShort, STR_OS_RED_HAT, distroShortSize);
      }
   }
   } else if (StrUtil_StartsWith(distroLower, "centos")) {
      if (strstr(distroLower, " 6.")) {
         Str_Strcpy(distroShort, STR_OS_CENTOS6, distroShortSize);
      } else if (strstr(distroLower, " 7.")) {
         Str_Strcpy(distroShort, STR_OS_CENTOS7, distroShortSize);
      } else if (strstr(distroLower, " 8.")) {
         Str_Strcpy(distroShort, STR_OS_CENTOS8, distroShortSize);
      } else {
         Str_Strcpy(distroShort, STR_OS_CENTOS, distroShortSize);
      }
   } 

そして、Oracle LinuxはCentOSと同様の記載になっているという点。

   } else if (StrUtil_StartsWith(distroLower, "enterprise linux") ||
              StrUtil_StartsWith(distroLower, "oracle")) {
      /*
       * [root@localhost ~]# lsb_release -sd
       * "Enterprise Linux Enterprise Linux Server release 5.4 (Carthage)"
       *
       * Not sure why they didn't brand their releases as "Oracle Enterprise
       * Linux". Oh well. It's fixed in 6.0, though.
       */
      if (strstr(distroLower, "6.")) {
         Str_Strcpy(distroShort, STR_OS_ORACLE6, distroShortSize);
      } else if (strstr(distroLower, "7.")) {
         Str_Strcpy(distroShort, STR_OS_ORACLE7, distroShortSize);
      } else if (strstr(distroLower, "8.")) {
         Str_Strcpy(distroShort, STR_OS_ORACLE8, distroShortSize);
      } else {
         Str_Strcpy(distroShort, STR_OS_ORACLE, distroShortSize);
      }
   }

Oracle Linux 7の /etc/oracle-release の表記はどういう風になってるんだろうかな・・・

ESP32腕時計TTGO T-Watchが届いた

$
0
0

ESP32を搭載した腕時計風のTTGO T-Watchを約49ドルで購入しました。

約2週間で届いたので早速遊んでみました。

資料系

メーカページ(LILYGO)
公式英語マニュアル
公式中国語マニュアル
サンプルソフトウェア

開梱

かわいらしい感じの梱包ですね。

内容物はこちら

T-Watch本体と、予備のボード?、T-Watchの横にあるコネクタから拡張するためのケーブル、Type-Cケーブル、腕時計用バンド、裏蓋取り外し用ネジ回しと予備のネジ

説明書には中を開けた時にどういう感じになっているのか書かれています。

とりあえずこちらも開けてみました。

元に戻して電源ON

最初はタッチパネルの検査プログラムが起動しタッチした座標を報告します、Type-Cコネクタの隣のボタンを押すと、今度は衝撃検知プログラムが起動しstepCountとして振り回した回数を表示します。

とりあえず、パソコンにつなげると「Silicon Labs CP210x USB to UART Bridge (COM?)」として認識します。

デモ用のプログラムがgithubで公開されていますのでArduio IDEをセットアップします。

ただし、普通にインストールしただけでは認識せず、追加手順が必要となります。

必要なもの

Arduino IDE
git for Windows

T-watch ソフトウェア書き込み手順

TTGO公式の設定手順を参照しながらやりました。

その1:git for Windowsをインストール

以前に別の件でインストールしていたのでそのまま使っています。

その2:Arduino IDEをインストール

今回はArduino IDE ver 1.8.9をインストールしました。

その3: Arduino IDEのインストール先のhardwareディレクトリ内にespressifディレクトリを作る

標準インストールだとC:\Program Files (x86)\Arduino\hardware ディレクトリ内にespressifディレクトリを作る。

その4:作成したespressifディレクトリ内でコマンドプロンプトを開く

作成したC:\Program Files (x86)\Arduino\hardware\espressifディレクトリででコマンドプロンプトを開きます。

その5:gitでespressifのarduino-esp32レポジトリを取得する

espressifディレクトリで「git clone –recursive https://github.com/espressif/arduino-esp32.git esp32」を実行します。

そうすると、 C:\Program Files (x86)\Arduino\hardware\espressif\esp32 ディレクトリが作成されファイルが置かれていきます。

その6:esp32\toolsディレクトリにあるgetコマンドを実行し追加ファイルを取得

C:\Program Files (x86)\Arduino\hardware\espressif\esp32\tools\ ディレクトリ内にある「get.exe」を実行し、追加ファイルを取得します。

その7:Silicon Labs CP210xをアップデート

手順には明記されていないのですが、Windows10標準の Ver6.7.4.261で書き込もうとするとエラーになりました。「T-WatchマニュアルのGetting started」に掲載されているCP2104-Win10(Ver10.1.8.2466)だと動きますので、アップデートします。

なお、エラーは下記の「A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header」です。

その8:T-Watchをパソコンに接続

その9:Arduino IDEを起動し、TTGO T-Watchを選択

Arduino IDEを起動し、「ツール」-「ボード」の一覧から「TTGO T-Watch」を選択します。

その10:T-Watchサンプルソフトを取得

git for Windowsを使って、 https://github.com/Xinyuan-LilyGO/TTGO-T-Watch で公開されているサンプルソフトウェアを取得します。

「git clone –recursive https://github.com/Xinyuan-LilyGO/TTGO-T-Watch」

取得完了後、「library」にあるディレクトリを、マイドキュメントの中にある「Arduino\library」内にコピーします。

その11:書き込み

Arduino IDEからサンプルソフトウェアを書き込みます。


サンプルソフトウェアを書き込んだのですが、うまいこと自宅のWiFiに接続できず、時計合わせに失敗しています。

また、タッチパネルの動作が若干微妙な感じもあります・・・

ユーザバックエンドがSQLのiredmailのSOGoでユーザがログインできない

$
0
0

qmail+vpopmailからパスワード暗号化文字列ごと移植したpostfix+dovecotベースの統合環境iredmail環境がある。

iredmailにはExchange互換サーバのSOGoもあるので、そちらでログインしようとしたらエラーになる。

roundcubeからだとログインができるし、dovecotを使うPOP3/IMAPアクセスでも問題無い。

/var/log/sogo/sogo.log へのエラーは下記の様になっていた。

Jul 04 13:15:04 sogod [9257]: SOGoRootPage Login from 'クライアントIPアドレス' for user 'ユーザ名@ドメイン名' might not have worked - password policy: 65535  grace: -1  expire: -1  bound: 0

iredmailのフォーラムに「Can’t configure password policy when using SOGo」といのがあり、sogo.confに「passwordPolicy = YES;」を追加すればいいじゃん?とあったのでやってみたが、変化はなし。

SOGo側のbug tracking system「 0003899: SQL authentication 」にてヒントを発見。

暗号化文字列の指定の問題のようだ。

今回、sogo.confは下記の様に「userPasswordAlgorithm = ssha512」となっており、パスワード暗号化文字列がssha512フォーマットである、ということになっている。

    SOGoUserSources = (
        {
            type = sql;
            id = users;
            viewURL = "mysql://sogo:~@127.0.0.1:3306/sogo/users";
            canAuthenticate = YES;

            // The algorithm used for password encryption when changing
            // passwords without Password Policies enabled.
            // Possible values are: plain, crypt, md5-crypt, ssha, ssha512.
            userPasswordAlgorithm = ssha512;
            prependPasswordScheme = YES;

            // Use `vmail.mailbox` as per-domain address book.
            isAddressBook = YES;
            displayName = "Domain Address Book";
            SOGoEnableDomainBasedUID = YES;
            DomainFieldName = "domain";
        },

しかし、今回、vpopmail時代の文字列「$1$5ulpxxxx$VS0xHxxKxMPBSIPQlXDXC/」という書式、つまりはmd5-cryptフォーマットを流用しているので認証できなかった、ということになる。

メインとなるiredmail側は新しくパスワードを設定した場合はssha512、移植したものはmd5-cryptという運用にしている。

ただ、postfix,dovecot,roundcubeの運用に関しては、ssha512でもmd5-cryptでも問題無くログインできている。

それに対してSOGo側は「SOGO Installation and Configuration Guide」を見ると userPasswordAlgorithm には1つの値しか指定はできないようだ。

セキュリティを考えると全体をmd5-cryptに下げる、という選択肢はとれないので、SOGoを使いたい場合は、パスワードを再設定する、ということになる。

パスワードを再設定すると以下のログとなる。

Jul 04 13:50:43 sogod [1094]: SOGoRootPage successful login from 'クライアントIPアドレス' for user 'ユーザ名@ドメイン名' - expire = -1  grace = -1

eSIM対応デバイスのメモ 2019/09/06版

$
0
0

IIJがeSIM対応を始めた。(国内初、IIJmioでeSIM対応のデータ通信サービスを開始)

現時点でeSIM対応デバイスというのは何があるのかを調べて見た。

後述するページにかいてあったものをまとめると、以下のような感じだ。

Apple

AppleのサポートページにあるeSIMに関する記述:「eSIM でデュアル SIM を活用する

Apple iPhone XS (香港,マカオモデルも含む,中国モデルは無い?)
Apple iPhone XS Max (香港,マカオ,中国モデルは物理的なデュアルSIM)
Apple iPhone XR (香港,マカオ,中国モデルは物理的なデュアルSIM)
Apple 11インチ iPad Pro
Apple 12.9インチ iPad Pro (第3世代)
Apple Air (第3世代)
Apple iPad mini (第5世代)

Apple Watchについては標準のeSIM対応手順ではないようで、ちょっと厳しいようだ

Apple Watch Series 3 (GPS+Cellularモデル)
Apple Watch Series 4 (GPS+Cellularモデル)

Android

Google Pixel 2/3/3XLの日本向け端末ではeSIMのかわりにFelicaモジュールが導入されているため使用できない。一部にオーストラリア版もeSIMがない、という記述があったが、どうやらSIMロックがかかっているPixelがいくつかの携帯電話会社から販売されているようで、それだとeSIMが使えないらしい。
Pixel Phone Helpフォーラム「Pixel 3/3XL eSIM support in Australia」でOptusで買ったデバイスだとeSIMインタフェースが無いという事象の報告と、unlockしたやつだと表示されるという報告。
Pixel Phone Help「Get a SIM card & insert it into a Pixel phone」には「 if the phone was purchased in Japan  or if bought with Verizon or Charter service 」という注意書きだった)

Google Pixel 2 (日本以外)
Google Pixel 3 (日本以外)
Google Pixel 3XL (日本以外)
Google Pixel 3a (日本以外)
Google Pixel 3a XL (日本以外)

Planet Gemini PDA (4Gモデル)
Planet Comso Communicator (4Gモデル)

パソコン系

Windows10でのeSIM設定について「eSIM を使って Windows 10 PC で携帯データ ネットワーク接続を利用する

Microsoft Surface Pro LTE Advanced
Lenovo Yoga 630 (snapdragon850搭載Windows)
HP Spectre Folio 13 (日本ではeSIMモデル未販売)
ASUS TransBook Mini T103HAF-LTE,T103HAF-GR079LTE(ただしIIJのeSIMではトラブル発生中)
Acer Swift 7
Acer Swift 3(こちらは物理eSIMカードのようだ)

Android Wear系(時計)

Huawei Watch 2 Pro (2018モデル)
Samsung Gear S2 classic(3G電波のみ対応)
Samsung Gear S3
Samsung Galaxy Watch


参照情報一覧

・Apple 「eSIM でデュアル SIM を活用する」と「2 枚の nano-SIM カードでデュアル SIM を使う

iPhone XS、iPhone XS Max、iPhone XR は、nano-SIM と eSIM を使ったデュアル SIM に対応しています。(1)

eSIM はデジタル SIM なので、物理的な nano-SIM を使うことなく、通信事業者 (キャリア) のモバイル通信プランをアクティベートすることができます。

(1)iPhone の eSIM は、中国大陸では提供予定がありません。香港およびマカオでは、iPhone XS だけが eSIM を搭載しています。中国大陸、香港、マカオでの 2 枚の nano-SIM を使ったデュアル SIM については、こちらの記事を参照してください。

eSIM でデュアル SIM を活用する

中国大陸以外にいる場合や、香港やマカオで iPhone XS をお使いの場合は、eSIM でデュアル SIM を活用する方法をこちらの記事でご確認ください。

2 枚の nano-SIM カードでデュアル SIM を使う

IIJmio eSIMプラン

動作確認済端末(2019年7月4日現在)
Microsoft Surface Pro LTE Advanced
Apple iPhone XS、iPhone XS Max、iPhone XR
Apple 11インチiPad Pro、12.9インチiPad Pro(第3世代)、iPad Air(第3世代), iPad mini(第5世代)
(※)Apple Watch Series 3/Series 4 (GPS + Cellularモデル)では動作しません。

Ubigi eSIMの互換性ガイド

1. List of compatible eSIM devices: 
Smartphones with embedded eSIM*:iphone XS,
iPhone XS Max,
iPhone XR,
Google Pixel 3
*if your phone is locked to your carrier, you will not be able to install Ubigi on its eSIM.
Windows 10 PCs:Lenovo Yoga 630,
HP Spectre Folio
Tablets with embedded eSIM:iPad Air (3rd Generation)
iPad Pro (3rd Generation)
iPad Mini (5th Generation)
Gemini PDA

FLEXIROAM eSIM

Currently supported devices: iPhone XS, XS Max, XR, Pixel 3, Pixel 3 XL
*Not supported by iPhone XR and XS Max purchased in Hong Kong, Macau and Mainland China
*Not supported by Pixel devices purchased in Australia
Same day activation, no contract required!

・CANSTAR BLUEの「What is an eSIM? Providers & Features Explained

ここはいろんな紹介ページだけど、機種がまとまっている。

Watches with eSIM Compatibility
Huawei Watch 2 Pro
Apple Watch Series 3
Apple Watch Series 4
Samsung Gear S2
Samsung Gear S3
Samsung Galaxy Watch
Selected phones with eSIM Compatibility
Google Pixel 2
Google Pixel 3
Samsung Galaxy Note 9
Samsung Galaxy S9, S9+
iPhone XS
iPhone XS Max

・hp「HPビジネス向けノートブックとモバイルワークステーションPC – eSIM対応のWWANモジュールを搭載したコンピューターでは、SIMが装備されていると、スマートカード認証に失敗する場合がある

hpの場合、内部拡張カードのWWANモジュール上にeSIM対応モジュールを採用しているので、カードの採用具合によってeSIM対応していたりするようだ。

eSIM対応のWWANモジュールは次の機器に装備されています:
インテルXMM 7360 LTE-Advanced
インテルXMM 7560 LTE-Advanced Pro
インテルXMM 7262 LTE-Advanced
HP LT4132 LTE/HSPA+ 4Gモバイルブロードバンドモジュール
Snapdragon X12 LTE-Advanced

次のWWANモジュールは、当初eSIM機能なしで出荷されましたが、eSIM機能はファームウェアの更新で有効にできます:
インテルXMM 7360 LTE-Advanced: SoftPaq sp91807でeSIM機能を有効にできます
HP LT4132 LTE/HSPA+ 4Gモバイルブロードバンドモジュール:SoftPaq sp84042でeSIM機能を有効にできます

eSIM対応のWWANモジュールを搭載できるコンピューター:
HP Elite x2 1012 G2
HP Elite x2 1013 G3
HP EliteBook 1040 G4ノートブックPC
HP EliteBook 725 G4ノートブックPC
HP EliteBook 735 G5ノートブックPC
HP EliteBook 745 G4ノートブックPC
HP EliteBook 745 G5ノートブックPC
HP EliteBook 755 G4ノートブックPC
HP EliteBook 755 G5ノートブックPC
HP EliteBook 820 G4ノートブックPC
HP EliteBook 828 G4ノートブックPC
HP EliteBook 830 G5ノートブックPC
HP EliteBook 836 G5ノートブックPC
HP EliteBook 840 G4ノートブックPC
HP EliteBook 840 G5 Healthcare EditionノートブックPC
HP EliteBook 840 G5ノートブックPC
HP EliteBook 840r G4ノートブックPC
HP EliteBook 846 G5ノートブックPC
HP EliteBook 848 G4ノートブックPC
HP EliteBook 850 G4ノートブックPC
HP EliteBook 850 G5ノートブックPC
HP EliteBook x360 1030 G2ノートブックPC
HP EliteBook x360 1030 G3ノートブックPC
HP EliteBook x360 1040 G5ノートブックPC
HP EliteBook x360 830 G5ノートブックPC
HP EliteBook x360 830 G6ノートブックPC
HP ProBook 430 G4ノートブックPC
HP ProBook 440 G4ノートブックPC
HP ProBook 450 G4ノートブックPC
HP ProBook 640 G3ノートブックPC
HP ProBook 640 G4ノートブックPC
HP ProBook 645 G3ノートブックPC
HP ProBook 645 G4ノートブックPC
HP ProBook 650 G3ノートブックPC
HP ProBook 650 G4ノートブックPC
HP ProBook 655 G3ノートブックPC
HP ProBook x360 440 G1ノートブックPC
HP ZBook 14u G4 Mobile Workstation
HP ZBook 14u G5 Mobile Workstation
HP ZBook 15 G4 Mobile Workstation
HP ZBook 15 G5 Mobile Workstation
HP ZBook 15u G4 Mobile Workstation
HP ZBook 15u G5 Mobile Workstation
HP ZBook 17 G5 Mobile Workstation
HP ZBook Studio G5 Mobile Workstation

・gemalto「eSIM搭載コンシューマIoTデバイスをアクティベートする3つの方法

SIMメーカの1つジェムアルトに掲載されているeSIMデバイスにどうやって契約情報を紐つけるか、という手法には3種類あります、といった解説。

今回、IIJmioで提供が始まったのは契約固有のQRコードを読みとる「QRコードによるアクティベーション」となる。

スマホ/パソコン上のアプリからオンライン契約処理をして使える様にする、というのは「GSMAのルートディスカバリーサービスによるeSIMアクティベーション」となる。

どちらの手法もeSIM搭載端末がWiFiなどの別の手法で契約管理を行うサーバにアクセスできる必要があります。

・IIJてくろぐ「IIJmio モバイルサービス eSIMプラン (ベータ版) に関する諸情報

ASUS TransBook Mini T103HAF-LTE, T103HAF-GR079LTEのeSIMで読み込みを行うと本体修理が必要になる、という記述。

UbigiのUbigiサービスの利用条件

フリーロック eSIMプレインストールUbigi SIM
スマートフォン【iOS】 iPhone XS/XR
iOS 12.1以降)
タブレット【iOS】 iPad Air、iPad Pro、iPad Mini
【Android】 Gemini PDA
ノートPCLenovo Yoga 630
HP Spectre Folio
Surface Pro 5 LTE AdvancedASUS Mini Transformer T103HAFACER Swift 7VAIO Series 11/13/Pro PF/PGACER Swift 3

ACER 4G LTEページ

Swift 7 には eSIM が内蔵されています。Swift 3 eSIM は取り外し可能です。

Echo show 5を買ったらAmazonの配送予定がダダ漏れになった

$
0
0

プライムセールでAmazon Echo show 5が安かったので買ってみた。

0時過ぎに発注したら11時過ぎに到着。

セットアップを開始してみてびっくり。

WiFiの設定してないのに接続してシステムアップデートの取得が始まった。

家にはEcho dotがあり、それ用の設定がAmazon側に保存されており、Echo show 5の出荷時にWiFi設定までが組み込まれていたようです。

びっくりです。

で・・・起動して、めんくらったのはこの表示

これ、Echo show 5の出荷についての通知なのですが、確認したけどその消し方が分からないという・・・

そして、そもそもこれが表示されてしまうと、Amazonで買ったことが筒抜けになってしまう・・・

設定を探したところ「 通知:スキルなどのAlexaサービスからのアラート 」をオフにすることでようやく消えました。

が・・・これをオフにしてしまうと、全てのスキルからのお知らせが表示されなくなるため、とても寂しい画面が・・・

これが延々と繰り返しになっています。

もうちょっとカスタマイズできるようにならないかなぁ・・・

……

AndroidのAlexaアプリの 「設定」-「通知」-「Amazonでお買い物」 で配送に関する通知をオフにすることができました。

何も考えずにASUS PRIME B450M-Aで安いDDR4 DIMMを4枚指ししようとしたら認識しなかった件

$
0
0

そろそろ値上がるという評判なので、2月に導入したRyzen 3環境のメモリを増やそうとした。

クロックアップしないし、8GBだから大丈夫だろう、となんも考えずに安く売ってたKLEVV IM48GU88N26-GIIHA0(2枚で5333円)を購入。

いままで使っていたpanram W4U2666PS-8GC19と並べて見る。

基板は一緒。RAMチップが違うだけ、という感じ。

これはいけるな、と4枚指ししてみると、起動しない。

メモリ速度を2400MHz固定にしたり、いろんな組み合わせを試してみたりした結果、3枚までは起動した。4枚がどうしても起動できない。

(元々はA1とB1がPanramの2枚指しで、上記以外にもA1とB1:Panram/A2とB2:KLEVVとか全組み合わせをやってます)

ASUS PRIME B450M-A メモリ対応リスト」を確認してみて原因判明・・・

PANRAMの方は4DIMM対応になっているが、KLEVVの方は型番の下の方がちょっと違うので同じとは言いがたいが2DIMM対応までになっている。

というわけで、駄目そうなので、他に転用しました・・・


RHEL7以降のGUIでユーザが初回ログインした際のようこそ画面を消す

$
0
0

RHEL7やRHEL8をGUIつきでインストールすると、各ユーザがログインした際に、gnome-initial-setupコマンドが自動起動し、以下の様な表示を行う。

これは設定をすすめればいいだけではあるんだけど、めんどくさい。

Solaris 7以降でも似たような感じで登録要求画面が表示されてたけど、所定の空ファイルを置くことで表示しないようにできたけど、RHELでもできるかな?と調べて見た。

githubにあるgnome-initial-setupのソースコードを調べていくと、HACKINGに情報を発見。


gnome-initial-setup also has a session mode which activates gnome-initial-setup when a user first logs in. The gnome-initial-setup-first-login.desktop in the
xdg autostart directory utilises gnome-session to check if the user has a
gnome-initial-setup-done file in their XDG_CONFIG_DIR if they don’t
gnome-initial-setup will launch with pages that are suitable for a
non-privileged user and on exiting will write the done file.

各ユーザの環境変数 XDG_CONFIG_DIR で定義されたディレクトリ内に「gnome-initial-setup-done」というファイルがあれば良い、ということ。

しかし、Oracle Linux 8で確認してみると XDG_CONFIG_DIRは定義されていない。

XDG_CONFIG_DIR の定義について調べると「XDG Base Directory Specification」に記載があった。

$XDG_CONFIG_HOME defines the base directory relative to which user specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

定義されていない場合は、各ユーザのホームディレクトリ内にある「.config」となるとのこと。

つまり「~/.config/gnome-initial-setup-done」というファイルを作れば良い、ということになる。

というわけで「touch ~/.config/gnome-initial-setup-done」を実行することで、gnome-initial-setupの起動をさせないようにできた。


ここまでで紹介した手順は各ユーザ単位で表示させなくする設定。

全体として表示させなくする設定が無いかを確認。

先ほども参照したHACKINGのgnome-initial-setup-doneの話の直前に情報がいくつか。

/etc/gdm/custom.confの[daemon]セクションに「InitialSetupEnable=True」と書くとgnome-initial-setupが起動する、ということなので、逆に「InitialSetupEnable=False」と書けばいいのかと試してみたけど、ダメでした。

InitialSetupEnable 関連で検索して「Bug 1226819 – gnome-initial-setup cannot be disabled, forces user creation」を発見。

ユーザを作成する際に初期配置するファイルを置く「/etc/skel」ディレクトリ内に「.config/gnome-initial-setup-done」ファイルを作っちゃえばいいんじゃん?という話が・・・確かに!( mkdir -p /etc/skel/.config && touch /etc/skel/.config/gnome-initial-setup-done を実行する)

他に書かれている/etc/xdg/autostart/gnome-initial-setup-copy-worker.desktop と /etc/xdg/autostart/gnome-initial-setup-first-login.desktop ファイルを削除する、というのは若干いきすぎた対応な気がするので、こちらはどうなのかな・・・]

RoundcubeでUID THREAD Internal error occurredが出た

$
0
0

iRedmailによる統合メールサーバ環境でRoundcubeによるWebメール機能を使っていたら、一部のアカウントで「UID THREAD : Internal error occurred」といったエラーがでた。

iRedmail環境ではRoundcubeのログ、というより、IMAPアクセス時のログを追う感じで調査する必要があり、該当のログは /var/log/dovecot/imap.log にあった。

Jul 25 09:34:29 サーバホスト名 dovecot: imap-login: Login: user=<メールアドレス>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, mpid=19537, secured, session=
Jul 25 09:34:29 サーバホスト名 dovecot: imap(メールアドレス): Logged out in=60 out=804
Jul 25 09:34:31 サーバホスト名 dovecot: imap-login: Login: user=<メールアドレス>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, mpid=19541, secured, session=<9T/TlnaOYtB/AAAB>
Jul 25 09:34:31 サーバホスト名 dovecot: imap(メールアドレス): Error: open(/var/vmail/vmail1/ドメイン名/a/c/c/account//Maildir/cur/1549258275.M236704P2463.サーバホスト名,S=5291,W=5417:2,) failed: Permission denied (euid=150(vmail) egid=2000(vmail) missing +r perm: /var/vmail/vmail1/ドメイン名/a/c/c/account//Maildir/cur/1549258275.M236704P2463.サーバホスト名,S=5291,W=5417:2,)
Jul 25 09:34:31 サーバホスト名 dovecot: imap(メールアドレス): Logged out in=94 out=1035

えーと・・・

[root@ホスト名 ~]# ls -l /var/vmail/vmail1/ドメイン名/a/c/c/account//Maildir/cur/1549258275*
-rw------- 1 root root 5291  2月  4 14:35 /var/vmail/vmail1/ドメイン名/a/c/c/account//Maildir/cur/1549258275.M236704P2463.サーバホスト名,S=5291,W=5417:2,
[root@ホスト名 ~]#

なんでだろう???

とりあえずchownでvmail:vmailに変えて解決しました。

qmailの情報収集 2019/08/26

$
0
0

うちはqmailを使わなくなったけど、使っていた当時に書いた2016年の「qmailの情報収集 2016/03/31」と2012年の「いまさらqmailのパッチ情報収集 2012/02/17」には、いまでもちらほらアクセスがある。

で・・・最近、qmail的に大ニュースがあったので久々に情報更新。

期待の新星「notqmail」リリース

1998年6月リリースのqmail v1.03に対するパッチをまとめたnetqmail がv1.04として2003年10月にリリースされた。しかし、netqmailは2007年11月のv1.06を最後に更新が無くなった。

今回、qmailでもnetqmailでもないものとして、notqmailがv1.07としてリリースされた。

ゆくゆくはいろんな機能を取り入れることになっていく予定ですが、現状では有名どころの既存qmailパッチ間の差異が大きいようで、notqmailのブランチとして各パッチ適用済みバージョンも提供されている。(詳細は公式ページのPatchesを参照のこと)

BranchOriginal Patch
notqmail-badmailfrom-wildcardTom Clegg’s badmailfrom wildcard
notqmail-badmailfrom-x-relayclientJeremy Kitchen’s badmailfrom-x-relayclient
notqmail-big-concurrencyJohannes Erdfelt’s big-concurrency
notqmail-big-todoRussell Nelson’s big-todo
notqmail-dns-any-to-cnameJonathan de Boyne Pollard’s any-to-cname
notqmail-dns-oversizeChristopher K. Davis’s oversize DNS packet
notqmail-ext-todoAndré Opperman’s ext_todo or “silly qmail syndrome”
notqmail-smtp-authErwin Hoffmann’s smptauth
notqmail-smtp-tlsFrederik Vermeulen’s qmail-smtp-tls
notqmail-smtpd-loggingAndrew Richards’ qmail-logmsg
notqmail-smtpd-spfJana Saout’s qmail-spf

「s/qmail」は細々運営中?

2016年に公式リリースされた「s/qmail」は、2019年6月のv3.3.23が最新リリースとなっている。

ただ、作者のnewsページを見てみると「aqmail is a joint project of Erwin Hoffmann (s/qmail) and Kai Peter (eqmail) to provide an alternative Qmail. Coming soon.」として「aqmail」というものを始めるらしい。

qmail開発者2人によるジョイントプロジェクト「aqmail」

aqmail is a joint project of Erwin Hoffmann (s/qmail) and Kai Peter (eqmail) to provide an alternative Qmail. Coming soon.」として「aqmail」 が2017年に開始されている。

が・・・githubのレポジトリ https://github.com/aqmail/aQmail は全然更新されていないが、元となるs/qmailとeQmailは更新されているという・・・

qlibというeQmail作者が作ったライブラリを利用している。

「eQmail」

サイトとしては「openQmail」という名称となっている。

元のqmailは内部で「djb’s libs」と呼ばれるdjbが作成したライブラリ群を使用しているがこれらはあくまでqmail内部でのみ使われているようなものだった。これを単体ライブラリ化したものがlibdjb(最終リリース2000年10月)となる。そして、このライブラリをGPLとして再実装したものが libowfat(最新リリース2018年10月)というものとなる。

libowfatとdjb’s libsをeQmail作者が使いやすいように実装し直したものが qlib というライブラリになるようで、eQmailではコレを使用している。

こちらは2019年8月リリースのeQmail-1.10.1が最新となっている。

「IndiMail」

IndiMail」という公式ページがあるが管理状況が怪しい。

SOURCEFORGEのIndiMailプロジェクトページを見てみるとそこそこ更新されている。

qmail部分であるindimailパッケージのバージョンとしては2018年10月リリースのindimail v2.6が最新であるようだ。

Windowsの評価版 2019/08/26版

$
0
0

2019/08/26現在で 、technet契約無しで取得できるWindows評価版についてまとめました。
Windowsの評価版 2016/12/06版」と「Windowsの評価版 2014/02/03版」の更新版です。


サーバ系

Windows Server 2019

評価版ソフトウェア | 180 日
評価の完了後、評価版を製品版に移行することができます。

Windows Server 2019 Essentials

評価版ソフトウェア | 180 日
それまでのバージョンから運用版に移行する場合、Windows Server 2019 Essentials の再インストールが必要になります。

Windows Server 2016

評価版ソフトウェア | 180 日
評価の完了後、評価版を製品版に移行することができます。また、マイクロソフトの TechNet ドキュメントをご覧いただき、他の既存サーバーから Windows Server 2016 へアップグレードまたは移行する方法をご確認ください

Windows Server 2016 Essentials

評価版ソフトウェア | 直接の日数の記載が見当たらず。おそらく180日
「インストールの前に」の項目にプロダクトキーが記載されている。
以前のバージョンから製品版に移行する場合は、Windows Server 2016 Essentials を再インストールする必要があります。

Windows Server 2012 R2

評価版ソフトウェア | 180 日
インターネットもしくは電話によるライセンス認証が必須
製品版への移行について明記無し

Windows Server 2012 R2 Essentials

評価版ソフトウェア | 180 日
「インストールの前に」の項目にプロダクトキーが記載されている。
以前のバージョンから製品版に移行する場合は、Windows Server 2012 R2 Essentials を再インストールする必要があります。 インストール、移行、およびアップグレードに関する情報をご覧ください。

Windows Server 2012

評価版ソフトウェア | 180 日
製品版への移行について明記無し

デスクトップ系

Windows 10 Enterprise / Windows 10 LTSC

評価版ソフトウェア | 90 日
2019/08/26時点では「Windows 10 Enterprise version 1903」と「Windows 10 Enterprise LTSC 2019」が入手できる

評価版を製品版への移行はできないが、特に明記されていない

公衆無線LANサービスで使えるアクセスポイントのメモ 2019/08/28版

$
0
0

過去に「公衆無線LAN ワイヤレスゲートとWi2の比較(2014/10/01改訂)」という記事を書いたが、いまもアクセスがあったりするので内容更新。


ワイヤレスゲートWi-Fi

WIRELESS GATE

税抜き537円、税込み537円

使えるアクセスポイント

・『mobilepoint』/『mobilepoint1』/『mobilepoint2』
・『Wi2』/『Wi2_club』
・『eo』/『eo_WPA2/EAS』
・Fonエリア 『FON_FREE_INTERNET』/『Fon WiFi』

Wi2 300 公衆無線LAN

税抜き362円の月額か、6時間税込み350円のワンタイムプラン

使えるアクセスポイント

・ベーシックエリア 『Wi2』/『Wi2_club』 『』
・オプションエリア(追加料金) 『Wi2premium』/ 『Wi2premium_club』
・BBモバイルポイント 『mobilepoint』/『mobilepoint1』/『mobilepoint2』

エネコネクト

無料プランとスタンダードプランの税込み390円がある。

使えるアクセスポイント

・『mobilepoint』/『mobilepoint1』/『mobilepoint2』
・『Wi2』/『Wi2_club』 /『Wi2_free』
・『wifi_square』

どうやらこれ以外にも各所に点在する地域の無料WiFi系への接続テンプレートも持っているようだ。

UQ Wi-Fi

UQ WiMax利用ユーザのみ無料で使用できる。単体契約は無い。
東海道新幹線待合室と車内、常磐線特急車内、都営地下鉄駅構内にアクセスポイントがある。山陽新幹線区間では通信できない。

・「UQ_Wi-Fi」

BBモバイルポイント

BBモバイルポイント

現在はBBモバイルポイント単体での契約はできない模様。

(2015年まではプリペイドプランがあったが廃止された。)


以前あった「eoモバイルWi-Fiスポット」は2016/03/31に終了 「「eoモバイルWi-Fiスポット」および「BBモバイルポイント for eo」のサービス提供終了について

Viewing all 816 articles
Browse latest View live