Thursday, October 26, 2017

MySQL SSH Tunnel Command Line Login

今回のプロジェクトはAWSにサーバを立てて
DBはMySQLを使っています。

AWSでDBにアクセスするときは常に踏み台のサーバを経由してSSHでアクセスしなければならない形に構築されています。

MySQL Workbenchにしろ、A5M2にしても普通にSSHトンネルでログイン出来るようになっていますが、mysqldumpを使いたいと思ったので、SSHトンネルを自分でコマンドラインから入力して実行してみました。

まず、SSHですが、Windowsのコマンドからは初期状態では使えません。
OpenSSHをインストールするか、開発でGitを使っているならGitBashを使ってSSHコマンドを使える状態にします。

ssh -i -f -N -C -L [バインドするローカルのポート]:<MySQLサーバのIPアドレス>:3306  @<踏み台のIPアドレス> -p 22

ここでport1は自分のローカルのポートですので、ローカルで空いているポートを指定しましょう。するとローカルのに対する接続が踏み台サーバを経由して、MySQLの動いているサーバの3306ポートに転送されます。
ぶっちゃけ-f とか -N とか -C とかは無くてもOKです。

ここからMySQLへの接続を下記のコマンドで実行できます。
mysql -u -P [バインドしたローカルのポート] -h localhost -p

MySQL Dumpを実行する場合は下記のコマンドです。
mysqldump -u -p -P [バインドしたローカルのポート] [db_name] > [file_name]

クライアントツールも便利ですがコマンドラインから繋いでおけると
バッチでデータを調査したり等いろいろと使い易いので出来ると便利です。


Sunday, October 8, 2017

海外長期滞在のための運転免許証の期間前更新

海外に長期間滞在する予定があるが、
更新期限が一年未満の運転免許証を早めに更新してきました。

場所は日曜日もやっている鮫洲試験場です。

ホームページに必要書類としてパスポートが書かれていますので、
長期滞在すための査証(ビザ)が付いた状態で見せる必要があるのか
不明のままビザなしで行きましたが、パスポートを見せるだけで更新できました。


Friday, May 5, 2017

CentOS 7 でiptablesの設定を保存する

何故かこの内容で調べるのに時間が掛かったのでメモしておきます。
最初はiptablesを使ってHTTPのポート80を開いてましたが、
CentOS7ではiptablesではなくfirewalldが本流らしいので、firewall-cmdを使うようです。
firewall-cmd --add-service=http 

再起動後も同様の設定を残したい場合は以下です。
firewall-cmd --add-service=http --permanent

firewall-cmdで設定できるサービスは/usr/lib/firewalld/servicesにあります。
firewall-cmd --add-service=http --permanent
[takeshi@mycentos ~]$ ls /usr/lib/firewalld/services/

amanda-client.xml     freeipa-replication.xml  ldaps.xml        pmwebapis.xml       samba-client.xml  tftp.xml
amanda-k5-client.xml  ftp.xml                  ldap.xml         pmwebapi.xml        samba.xml         tinc.xml
bacula-client.xml     high-availability.xml    libvirt-tls.xml  pop3s.xml           sane.xml          tor-socks.xml
bacula.xml            https.xml                libvirt.xml      pop3.xml            smtps.xml         transmission-client.xml
ceph-mon.xml          http.xml                 mdns.xml         postgresql.xml      smtp.xml          vdsm.xml
ceph.xml              imaps.xml                mosh.xml         privoxy.xml         snmptrap.xml      vnc-server.xml
dhcpv6-client.xml     imap.xml                 mountd.xml       proxy-dhcp.xml      snmp.xml          wbem-https.xml
dhcpv6.xml            ipp-client.xml           ms-wbt.xml       ptp.xml             squid.xml         xmpp-bosh.xml
dhcp.xml              ipp.xml                  mysql.xml        pulseaudio.xml      ssh.xml           xmpp-client.xml
dns.xml               ipsec.xml                nfs.xml          puppetmaster.xml    synergy.xml       xmpp-local.xml
docker-registry.xml   iscsi-target.xml         ntp.xml          radius.xml          syslog-tls.xml    xmpp-server.xml
dropbox-lansync.xml   kadmin.xml               openvpn.xml      RH-Satellite-6.xml  syslog.xml
freeipa-ldaps.xml     kerberos.xml             pmcd.xml         rpc-bind.xml        telnet.xml
freeipa-ldap.xml      kpasswd.xml              pmproxy.xml      rsyncd.xml          tftp-client.xml
この一覧にないサービスを起動したいばあいは手作業でxmlファイルを作成することになります。

ポートを直接指定して開通することも可能です。
[takeshi@mycentos ~]$ sudo firewall-cmd --add-port=1818/tcp

削除する場合は--remove-portします。
[takeshi@mycentos ~]$ sudo firewall-cmd --remove-port=1818/tcp

Thursday, May 4, 2017

Gmail API を使って最初にMessageをダウンロードするときに設定する権限

Gmail APIを試してみようと思ったら最初にサンプルにあるQuick Startを実装してみてラベルの一覧を出してみると思います。
そのあと、メッセージの一覧を取得しようということになると思いますが、
私の様によく考えないで最短距離を行こうとするとこのメッセージでエラーになります。
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Insufficient Permission",
    "reason" : "insufficientPermissions"
  } ],
  "message" : "Insufficient Permission"
}

チュートリアルにはGoogle APIで権限の設定について
手取り足取り書いてくれていないので、
これを説明しておいて欲しかったということを下記に。

Quick Startサンプルではこうなっていると思います。
    /** Global instance of the scopes required by this quickstart.
     *
     * If modifying these scopes, delete your previously saved credentials
     * at ~/.credentials/gmail-java-quickstart
     */
    private static final List SCOPES =

            Arrays.asList(GmailScopes.GMAIL_LABELS);

これを以下の様に
    private static final List SCOPES =
            Arrays.asList(GmailScopes.GMAIL_READONLY);

あるいはこんな風に
    private static final List SCOPES
    Arrays.asList(GmailScopes.MAIL_GOOGLE_COM);

その他authorizationの中から一つ以上を選んで下さい。

これでMessageにアクセスする権限がつく筈ですが、
Quick Startのソースを流用して作成していると上手く行きません。

実は下記のパスに権限情報のファイルをキャッシュしているので、
このファイルを削除してクリアするか、


ファイルのパスをQuick Startのものから変更しないといけません。

/** Directory to store user credentials for this application. */
private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"),
".credentials/gmail-java-quickstart");

以上でQuick Startサンプルからの修正で





Tuesday, May 2, 2017

Linux CPU使用率確認

Linux CPU Usage
 topコマンドを使えば、CPUの使用率とメモリの使用量が一覧で見れます。

[takeshi@mycentos ~]$ top
top - 19:19:16 up 1 day, 19:31,  2 users,  load average: 0.04, 0.04, 0.05
Tasks: 190 total,   1 running, 189 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  7898360 total,  5946684 free,   675088 used,  1276588 buff/cache
KiB Swap:  8126460 total,  8126460 free,        0 used.  6759548 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  956 root      20   0   24192   1744   1416 S   0.3  0.0   0:05.92 systemd-logind
    1 root      20   0  193764   6948   3968 S   0.0  0.1   0:29.09 systemd

ただ、CPUのコア毎の使用率を見たい時は「mpstat」コマンドを使うと便利です。
下記のコマンドで1秒おきのコアスレッド毎の使用率が見れます。

[takeshi@mycentos ~]$ mpstat -P ALL 1
Linux 3.10.0-514.16.1.el7.x86_64 (mycentos)     05/02/2017      _x86_64_        (4 CPU)

07:25:24 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:25:25 PM  all    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   99.75
07:25:25 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:25 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:25 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:25 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

07:25:25 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:25:26 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:26 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:26 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:26 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:26 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

07:25:26 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:25:27 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:27 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:27 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:27 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:27 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
perf statでも見れるらしいが、sudoして動かすと動作がイマイチ。

Saturday, April 29, 2017

The action can't be completed because the file is open in DHCP Client

最近参加したプロジェクトではOSにWindowsサーバを用いていたが、
モジュールをリリースしようとすると時々失敗する。

ファイルの削除に失敗している様なので、
手動でファイルを削除するとタイトルのメッセージが表示される。
(環境は英語)

何が起こっているかというとsvchost.exeというプロセスが
このファイルを掴んで放してくれないらしい。

svchost.exeなのにどうしてDHCPクライアントなのかというと
このsvchost.exeはサービスから呼び出されて起動しているので、
その呼び出し元のサービスの一覧から一番最初の名称を取得して
エラーメッセージに出力しているのです。

コマンドプロンプトを開いて下記のコマンドを実行してみましょう。

tasklist /svc /fi "imagename eq svchost.exe"

実行中のsvchost.exeが呼出元のサービスと一緒に一覧になって表示されます。

タスクマネージャからプロセスのタブを開き、列にPIDを追加して
コマンドでDHCPの付いていたPIDのsvchost.exeプロセスを停止すると
それまで削除できなかったファイルが削除できる。