2019年01月25日

評価版 Windows10 の期限を延長する

動作確認用に使っていた評価版の Windows10 の期限が切れてしまい、勝手にシャットダウンするようになってしまいました。2回までという制限付きですが、期限を延長することができます。

延長回数の確認


延長できるのは2回までとなっています。確認するには、管理者モードのコマンドプロンプトで slmgr -dlv と入力します。
新しいウインドウが表示され、下の方にリセット可能回数が表示されます。
残りの Windows 猶予期限リセット可能回数: 2
残りの SKU 猶予期限リセット可能回数: 2


延長を実施


管理者モードのコマンドプロンプトで slmgr -rearm と入力します。
新しいウインドウが表示され、再起動を促すメッセージが表示されます。
コマンドは正常に完了しました。
変更を有効にするにはコンピューターを再起動してください。


コンピューターを再起動


再起動すると有効期限が更新されるはずですが、画面右下の表示は相変わらず「Windows ライセンスの有効期限が切れています」になっています。
20190125-win10-003.png

デスクトップでも [F5] キーを押すと表示が更新されますので、[F5] キーを押してみます。
20190125-win10-004.png


更新されました。


posted by はるこち at 20:00| Comment(0) | パソコン関連 | このブログの読者になる | 更新情報をチェックする

2019年01月23日

muninで「[FATAL ERROR] Lock already exists: /var/run/munin/munin-graph.lock. Dying.」

新しいサーバを可動させたので、munin-node をインストールし、既存の munin サーバに監視対象として追加しましたが、グラフが更新されるタイミングで下記のようなエラーメールが root 宛に届いてしまいました。
[FATAL ERROR] Lock already exists: /var/run/munin/munin-graph.lock. Dying.
at /usr/share/perl5/vendor_perl/Munin/Master/GraphOld.pm line 406.


これは、グラフ更新用に munin を起動したが、すでに他の munin が起動していたため起動を取りやめたという意味ですので、まず最初にチェックするポイントとして、監視対象が多すぎて監視間隔(通常は5分)以内に終わらない状況になっていないか確認します。サーバを1台ずつ追加していても、ふと全体を見返すと意外に多くなっていることもあります。

次の対策としては、設定ファイルに「fork no」を追加します。
# vi /etc/munin/munin.conf
fork no


munin を再起動します。
# systemctl restart munin-node
posted by はるこち at 20:00| Comment(0) | サーバ関連 | このブログの読者になる | 更新情報をチェックする

2018年12月19日

Linuxで動作する既存のCプログラムソースをPHPのエクステンション化する

Linux(CentOS)上で動作するC言語で書かれた既存のプログラムソースがあるのですが、これをPHP7のエクステンションとして読み込めるようにしました。プログラムはコマンドラインで動作しテキスト処理を行うだけの単純なものです。

参考資料
PHP7 でのエクステンションの書き方を調べた - Qiita
PHP Extensionの開発@ - Qiita

1.PHP7ソースを入手
$ sudo yum install git
$ git clone git@github.com:php/php-src.git
$ cd php-src
$ git tag --list
:
php-7.1.24
:
$ php -v
PHP 7.1.24 (cli) (built: Nov 7 2018 18:45:17) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
$ git checkout php-7.1.24

自分の環境には git が入っていなかったので git のインストールから必要でした。
また、Permission Denied のエラーが表示されてしまったので、SSH Keyの登録を行いました。
自分の環境にインストールされているPHPのバージョンを確認したところ 7.1.24 だったので、git checkout でこのバージョンをダウンロードします。

2.エクステンションの雛形ファイルを作る
$ cd ext
$ ./ext_skel --extname=sampleext

sampleext というディレクトリが作成され、その中に必要なファイルが作られます。
まずは下記のコマンドを入力してエクステンションが作られるか確認します。
$ cd sampleext
$ vi config.m4
$ pipize
$ ./configure
$ make
$ php -d extension=./modules/sampleext.so sampleext.php
Congratulations! You have successfully modified ext/sampleext/config.m4. Module myext is now compiled into PHP.

config.m4 ファイルの下記の部分をアンコメントします。(dnl という文字を削除する)
PHP_ARG_WITH(myext, for myext support,
Make sure that the comment is aligned:
[ --with-myext Include myext support])

Conguratulations! 〜〜という表示が出れば成功です。

3.自分のプログラムのソースを準備する
既存プログラムはコマンドライン上で起動するものでしたが、シェアードライブラリとしてコンパイルすることでエクステンションから呼び出せるようだったので、コンパイルし直すことにしました。
$ mkdir myprg
$ cd myprg
※このフォルダ内にソースを準備する
$ vi Makefile
$ make

ソースファイルは php-src/ext/sanpleext/myprg/ の中に入れます。
シェアードライブラリとしてコンパイルするために Makefile の CFLAGS と CPPFLAGS に -shared -fPIC を追加します。
CFLAGS = -shared -fPIC -pipe -Wall -W -O2 -w
CXXFLAGS= -shared -fPIC -pipe -Wall -W -O2 -w

最終的にコンパイルされたライブラリは php-src/ext/sampleext/myprg/lib ディレクトリの中に libmyprg.so という名前で保存されるようにします。

4.PHPエクステンションにリンクする
既存プログラムのリンクは config.m4 を修正することで設定します。
$ cd ..
$ vi config.m4

config.m4 の修正点は以下のとおりです。
・if test "$PHP_SAMPLEEXT" != "no"; then の行から下の行のコメント(dnl)を解除
・SEARCH_PATH に ./myprg を追加
・PHP_ADD_INCLUDE(./myprg)
・LIBNAME=myprg
・LIBSYMBOL=myfunc

LIBNAME はリンクするシェアードライブラリの名前を指定します。上記のように書くと ./myprg/lib/libmyprg.so がリンクされます。
LIBSYMBOL はリンクするシェアードライブラリを取り違えていないか確認するためのもので、中に入っている関数名(シンボル)を指定することで、正しいライブラリであることが確認されます。

5.既存プログラムを呼び出す部分を修正する
PHP側とC言語側の間を取り持つのは sampleext.c になりますので、この中に作成していきます。
5-1.関数の宣言
下記の部分にPHPから呼び出すときの関数名を登録します。
const zend_function_entry sampleext_functions[] = {
PHP_FE(confirm_sampleext_compiled, NULL) /* For testing, remove later. */
PHP_FE(call_myfunc, NULL) /* added */
PHP_FE_END /* Must be the last line in sampleext_functions[] */
};

PHP_FE に指定する関数名は PHP 側で見えるものなので、C言語のプログラムソース内の関数と同じ名前でも大丈夫ですが、混乱を避けるために call_myfunc のように変えておくのが良いと思います。第2引数はとりえあずNULLでも動きますが、できれば指定したほうが良いようです(詳細は省略)。
5-2.関数本体の定義
PHP_FUNCTION(confirm_sampleext_compiled) が定義されていると思いますので、その下あたりに定義を追加します。
PHP_FUNCTION(call_myfunc)
{
zend_long a;
char *str;
size_t len;
int status;

ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_LONG(a)
Z_PARAM_STRING(str, len)
ZEND_PARSE_PARAMETERS_END

/* 何らかの処理 */
status = myfunc(a, str);

RETURN_LONG(ret);
}

引数の受け取りについては他に詳しい記事がありますので参照していただくとして、上記の例では、引数2個、1個めは数値、2個めは文字列を受け取ります。
戻り値を返すには、RETURN_LONG を使うと数値、RETURN_STRING を使うと文字列を返せます。

6.動作確認
テスト用のPHPスクリプト(test_sampleext.php)を作成して走らせることで動作確認しました。
<?php
$r = call_myfunc(1, "abc");
echo "$r\n";

下記のようにして実行します。
$ php -d extension=./modules/sampleext.so test_sampleext.php


7.トライアンドエラー
2つの異なる世界のプログラムを連携させているので、一筋縄ではいかないと思います。実際、エラーメッセージとにらめっこしながら何度もコンパイルをやり直しました。
$ vi config.m4
$ phpize
$ ./configure
$ vi sampleext.c
$ make
$ php -d extension=./modules/sampleext.so test_sampleext.php


8.インストール
稼働中のPHPにインストールするには make install を使用します。
インストールされた sampleext.so を読み込むには /etc/php.ini を修正します。
sampleext.so が変更されたら apache を再起動する必要があります。
$ sudo make install
$ vi /etc/php.ini
extension=./modules/sampleext.so
$ sudo apachectl restart

posted by はるこち at 19:00| Comment(0) | サーバ関連 | このブログの読者になる | 更新情報をチェックする

2018年12月18日

git clone しようとしたら Permission denied (publickey) エラーが表示された

PHP7 用のエクステンションを作ってみたいと思い、いろいろな記事を参考にしたところ PHP7 のソースコードが必要ということがわかり、Github から clone しようとしたら、エラーが表示されてしまいました。
$ git clone git@github.com:php/php-src.git
Cloning into 'php-src'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.


パーミッションがないというエラーですが、ファイルシステムのパーミッションではなく Github 側でパーミッションがないようです。
今回のケースでは、Github に登録してある自分のアカウントに SSH Key を登録します。
※Github にアカウントがあることを前提にした説明ですので、アカウントがない場合は登録からお願いします。

$ ssh-keygen -t rsa -C "your_mail_address@domain"


~/.ssh/id_rsa.pub の内容を Github のアカウント→[Settings]→[SSH and GPG Keys]→[New SSH Key]をクリックして登録します。
title 部分には自分でわかりやすい名前(サーバ名など)を入力します。
key のところに貼り付けます。

これで、git clone できるようになりました。

参考にさせていただいた記事
git cloneしようとした時でたエラーと戦った話 - Qiita
posted by はるこち at 19:00| Comment(0) | 開発関係 | このブログの読者になる | 更新情報をチェックする

2018年11月16日

Windows リモートデスクトップ接続で画面を1アクションでキャプチャする

rdp-icon.png
Windowsのリモートデスクトップ接続(RDP)を使っているときに、表示されている画面のキャプチャ(スクリーンショット)を撮りたいときってありますよね。しかもフルスクリーンではなく、ウインドウ単位でキャプチャしたいです。

リモートデスクトップでないときは、[Alt]+[PrintScreen] キーを押せばウインドウ単位でキャプチャできるのに、これだとリモートデスクトップ自体がひとつのウインドウになってしまうので、フルスクリーンと同じことになってしまいます。

これまでは、SnippingTool を使って「四角形の領域切り取り」を指定してプルプル震える指先で1ピクセル単位の厳しい領域指定をしたり、ペイントなどの画像エディタで切り抜いたりしていましたが、1アクションでウインドウ単位にキャプチャする方法があります。それは
[Ctrl]+[Alt]+[テンキーのマイナス記号]
です。

リモートデスクトップ接続中にこのキーの組み合わせを押すと、向こう側の画面のアクティブウインドウの内容だけが、こちら側のパソコンのクリップボードに入ります。あとはペイントなどの画像ツールに貼り付ければOKです。

UACで昇格しているときの画面もキャプチャできるようです。これでキャプチャ作業がぐっと楽になりました。
posted by はるこち at 19:00| Comment(0) | パソコン関連 | このブログの読者になる | 更新情報をチェックする

2018年10月29日

Dropboxよりお得に使えるかもしれないTonido File Cloud

写真共有に Dropbox を使っていました

家族で写真を共有する方法として Dropbox を使っていましたが、Dropbox よりお得に使えるかもしれないものとして Tonido というものを見つけたので、試してみました。

tonido_applogo.png

おおまかに言って、下記のような仕組みになっています。
  • パソコンにサーバプログラムをインストール
  • Tonidoサーバにアカウントを作成
  • スマホに Tonido アプリをインストールしてログイン
試しに使ってみたところインストールもそれほど難しくなく、すんなりと使い始めることができました。ファーストインプレッションとして、下記の点がメリットとして感じました。

パソコンから見せるフォルダを指定できる

Dropbox の場合は Dropbox 全体にアクセスできるようになりますが、Tonido の場合はフォルダ単位で指定できるので自由にコントロールすることができます。必要なファイルだけを公開できるので、「このフォルダは触っちゃだめよ」などの余計な説明が不要になります。

スマホ側の使い勝手は Dropbox に似ている

ログイン方法が若干異なりますが、使い始めてしまえば Dropbox に似た感じで操作できるので説明も少なくて済みそうです。

スマホ側からアップロードすることも可能

これはあまり期待していなかったのですが、スマホ側の写真や動画を直接アップロードすることができます。

スマホ側からリネーム、修正、削除も可能

アップロードするだけでなく、リネームや修正、削除も可能になっています。写真データを共有するという範囲では不要ですし、むしろ消えると困るので削除機能をオフにしたいところですが、設定できるのか調査中です。

クラウドにデータをアップロードする必要がない

メリットになるのかデメリットになるのかはケースバイケースだと思いますが、クラウドにアップロードする必要がないため、パソコン上でファイルをコピーすればすぐにスマホからアクセスできるようになります。

無料で使える

これは大きいです。年額12,960円とおさらばできそうです。

Tonidoのインストール

Windowsアプリのダウンロード

まずはWindowsアプリをインストールするためダウンロードします。Tonidoのトップページからダウンロードのリンクをたどっていくとダウンロードできると思います。
20181029-tonidohp-001.png
FOR HOME USE のほう(左側)の [FREE DOWNLOAD] をクリックします。

20181029-tonidohp-002.png
[Server] をクリックします。

20181029-tonidohp-003.png
[Tonido for Windows] をクリックします。
余談ですが、このページに「Tonido for Raspberry PI」のダウンロードリンクもあります。Raspbian にインストールできるようです。機会があれば試してみたいところです。

20181029-tonidohp-004.png
ダウンロードを始めようとするとGDPR関連の確認メッセージが表示されます。問題ないと思いますので、[CONTINUE] をクリックするとダウンロードが始まります。

Windows版をインストール

ダウンロードされた「TonidoLiteSetup.exe」をダブルクリックして起動します。選択肢は特にないので、インストール自体は「次へ」「次へ」と進んでいけば問題なく終わると思います。
20181029-tonidoinst-001.png

20181029-tonidoinst-003.png

20181029-tonidoinst-004.png

20181029-tonidoinst-005.png

20181029-tonidoinst-006.png
[Finish] をクリックすると Tonido が起動し、設定画面(ブラウザ画面)が表示されます。
20181029-tonidoinst-007.png
画面右下の「タスクトレイ」の中に表示されている太陽マークが Tonido を表しています。

Windowsファイアウォールの画面

Tonidoを初めて起動したときに、下のよう画面が表示されることがあります。これは外部との通信を行うプログラムをインストールしたときに、本当に通信して良いか確認するためのものです。今回は Tonido をインストールしたことがわかりきっていますので「アクセスを許可する」をクリックします。
20181029-tonidoinst-008.png

Tonidoサーバの設定

Tonido インストールしたパソコン(手元のパソコン)をサーバとして公開するための設定を行います。
20181029-tonidoconfig-001.png
必要事項を入力するとTonidoアカウントも作成されます。
Language:englishのまま ※選択肢にはjapaneseも表示されるのですが、現時点では日本語がハチャメチャでかえってわからなくなりますのでenglishのほうが安心です。
Account Name:自分のサーバにアクセスするときの名前です。https://[accountname].tonidoid.com/ の [accountname] の部分に入ります。
Password:パスワードを指定します。
Repeat Passowrd:もう一度同じパスワードを入力します。
Email:自分のメールアドレスを入力します。
[v] I agree to Terms of Use にチェックを入れて
[Create] をクリックします。

Tonidoの設定

Create をクリックしてTonidoアカウントを作成すると、基本設定を行う画面が表示されます。
tonido-20181029-001.png
最初の画面では自分のサーバにアクセスするためのURLアドレスが太字で表示されています。

tonido-20181029-002.png
次の画面では、サーバから見せるフォルダを指定することができます。デフォルトではすべて公開(Allow remote access to all folders)になっているので、Allow remote access to only specific folders を選択して、[Add Allows folder] をクリックします。

tonido-20181029-003.png
フォルダを選択する画面が表示されます。一見すると、マイドキュメント以外にはドライブ名を直接指定することしかできないように見えますが、ドライブ名の文字の部分にマウスカーソルを合わせるとアンダーラインが表示されクリックできるようになり、クリックするとそのフォルダの中に入ることができます。これの操作を繰り返すことで、公開するフォルダを厳密に指定することができます。

tonido-20181029-004.png
M:\Dropbox フォルダを指定してみました。次に進みます。

tonido-20181029-005.png
メディアファイル用のフォルダを使用するかどうか指定する画面のようです。Music, Photos, Videos が使えるようになるようです。

tonido-20181029-006.png
アプリダウンロードの案内です。私は iPhone で使いたかったので AppStore からダウンロードしました。

tonido-20181029-007.png
設定が完了すると表示される画面です。これまでの手順で M:\Dropbox しか公開していないので、一覧にはそのフォルダしか表示されていません。ちなみに、Tonido サービスはポート番号 10001 で公開されているので、LAN内のパソコンからこのポートに接続すると同じ画面が表示されます。インターネット経由でアクセスするときは https://[accountname].tonidoid.com でアクセスできます。

スマホアプリからの使用

iPhoneにインストールしてみました。起動すると、いきなり殺風景な画面が表示されて面食らいますが、落ち着いて左上の「+」をタップしてアカウントを登録します。
IMG_5215.PNG

アカウントの登録が完了すると、公開されているフォルダが表示されます。
IMG_5217.PNG
posted by はるこち at 19:13| Comment(0) | パソコン関連 | このブログの読者になる | 更新情報をチェックする

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。