はきだめにっき

忘備録とかいろいろ愚痴ったりとか

TeraTermで多段ssh

構造

接続したいサーバが外部に公開されていないため、踏み台で多段sshをかける。
認証は公開鍵認証で自動化。

TeraTermの設定

TeraTermマクロでポートフォワード&踏み台サーバ経由での公開鍵認証を試みる | Tera Term(テラターム)の便利な使い方
まんまこの通りでいいんだけど、unlinkだと中間サーバとのsessionを残した状態で
画面が消えるはずが消えてくれない(そんなものかもしれない)

方法変更

手順の自動化。
接続元サーバ: host
中間サーバ: s1
対象サーバ: s2

  1. hostからs1にssh
  2. s1からs2にssh

これをマクロ化してTeraTerm起動時に読み込む

結果論

; hostから中間サーバへの接続コマンドの生成
COMMAND = '"<ttermpro.exeフルパス>" ' <中間サーバのIPorホスト名>:<ポート番号(sshだと22)> /ssh2 /auth=publickey /user=<ユーザー名> /keyfile=<公開鍵のフルパス>'

; 接続(host→中間サーバ)
connect COMMAND

; プロンプトを待つ($はbashなので)
wait "$"

; コマンド送信
sendln "ssh <ユーザー名>@<対象サーバ>"

; プロンプトを待つ
wait "$"

; 画面のクリア
sendln "clear"

おまけ

このマクロをデスクトップとかからショートカットで呼び出す。
さっき作った.ttlをフルパスで呼び出したttpmacro.exeに投げつける。

結論

めんどくさ

Teitoku on Debian Wheezy

気合!入れて!ビルドします!

// Nodejsとnpmの準備
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
$ nvm install v0.xx.x

// bowerの準備
$ npm install -g bower

// Teitoku 本体
$ git clone https://github.com/geta6/teitoku.git

// gruntの準備とコンパイル
$ npm i -g grunt-cli
$ npm i
$ bower i
$ grunt
よし!これで…いけます!
$ ls
Gruntfile.coffee  README.md   build  node_modules  src  vendor
HISTORY.md        bower.json  lib    package.json  var
$ cd build/releases/Teitoku/linux64/Teitoku
$ ls
Teitoku  libffmpegsumo.so  nw.pak

はい!実行環境は大丈夫です!

$ ./Teitoku

よく出来ましたっ!

終わり

提督業務環境構築 -リテイクその1-

あらまし

艦メモ ~艦娘メモリーズ~(艦これ専用ブラウザ) - 理ろぐが動いてワッショイしてました。
が、強引すぎるlibcのアップデートに環境が破壊されてしまいました。
(忠告は出ていた)

その時何が起こったのか

locale環境ぶっ壊れました。

元に戻した

libc6 Download (DEB, RPM)から自分の環境のデフォルトのものをとってきます。

Fei3939@debian:~$ sudo dpkg -i libc6_2.13-38+deb7u1_amd64.deb

さてどうするのか

実はgeta6/teitoku · GitHubについても艦メモと同じエラーで動かなかったため、
実質ふりだしに戻ります。
仕方ないので、解決策を探す旅へと戻りました。

解決したのか

Debian 7 GLIBC · Issue #972 · LightTable/LightTable · GitHubの中見てたら解決しました。
とても死にたい。

手順

Fei3939@debian:~$ sudo sh -c 'echo "deb http://ftp.debian.org/debian/ testing main contrib non-free" >> /etc/apt/source.list'
Fei3939@debian:~$ sudo apt-get update && sudo aptitude update
Fei3939@debian:~$ sudo aptitude install -t testing install libc6-dev

これでlibcのversionが上がりました。(やった時点では2.18になりました)

艦メモをDebian(Wheezy)で動かす

あらまし

自宅PC(Windows機)の電源が爆発してお亡くなりになられたため、
急遽ノートPCにて提督業務を遂行する環境を構築する任務が発生。

候補

以前は艦これ専用ブラウザー Teitoku - geta6 | makeboothを使っていましたが、
改めて導入しようとしてうまく行かず。
そこで、艦メモ ~艦娘メモリーズ~(艦これ専用ブラウザ) - 理ろぐを入れてみました。

環境

Fei3939@debian:~$ uname -a
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.57-3+deb7u2 x86_64 GNU/Linux
Fei3939@debian:~$ cat /etc/debian_version 
7.5

※Flashplayerは既に入っているとします。

手順

基本的にはUbuntuの場合をDebianで読み替えて(読み替えるほどじゃない)行きます。
64bit環境なので、Ubuntu-64bit(deb)からDLします。
つづいて、

$ sudo dpkg -i kanmusumemory-0.0-ubuntu-x86.deb

で、問題はここからでした。

Fei3939@debian:~/Downloads$ KanmusuMemory 
/usr/local/bin/kanmusumemory/KanmusuMemory: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/bin/kanmusumemory/KanmusuMemory)
/usr/local/bin/kanmusumemory/KanmusuMemory: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/lib/kanmusumemory/libQt0TwitterAPI.so.0)

これGLIBCのversionが2.14以上を要求されてます。
それに気づかずに、シンボリックリンクの貼り付けとか考えてて時間食いました。
結果から言うと、Debian Wheezyのデフォルトのlibc6のversionは2.13なんですね…
libc6 Download (DEB, RPM)←ここ見ると(ノ∀`)アチャーですわ。
しょうがないんで、こっから一番新しいの(書いてる時点では2.19)をDLします。
んでインスコ……

Fei3939@debian:~/Downloads$ sudo dpkg -i libc6_2.19-1_amd64.deb 
dpkg: libc6_2.19-1_amd64.deb が libc6:amd64 を含んでいることを考慮すると:
 libc6:amd64 は locales (<< 2.19) を壊します
  locales (バージョン 2.13-38+deb7u1) が提供され、導入済み です。

dpkg: libc6_2.19-1_amd64.deb の処理中にエラーが発生しました (--install):
 libc6:amd64 のインストールは locales を壊す可能性があり、
 設定削除は許されていません (--auto-deconfigure が助けになります)
処理中にエラーが発生しました:
 libc6_2.19-1_amd64.deb

へー(棒

Fei3939@debian:~/Downloads$ sudo dpkg -i --auto-deconfigure libc6_2.19-1_amd64.deb 
dpkg: `libc6:amd64' のインストール によって壊れた locales の設定削除を考えています ...
dpkg: 問題ありません。(libc6:amd64 によって壊れた) locales の設定削除をします
(データベースを読み込んでいます ... 現在 154242 個のファイルとディレクトリがインストールされています。)
libc6:amd64 2.13-38+deb7u1 を (libc6_2.19-1_amd64.deb で) 置換するための準備をしています ...
locales を設定削除しています ...
Checking for services that may need to be restarted...
Checking init scripts...
libc6:amd64 を展開し、置換しています...
libc6:amd64 (2.19-1) を設定しています ...
Checking for services that may need to be restarted...
Checking init scripts...

Restarting services possibly affected by the upgrade:
  exim4: restarting...done.
  cups: restarting...done.
  cron: restarting...done.
  atd: restarting...done.

Services restarted successfully.
dpkg: 依存関係の問題により locales の設定ができません:
 locales は以下に依存 (depends) します: glibc-2.13-1 ...しかし:
  パッケージ glibc-2.13-1 はまだインストールされていません。
libc6:amd64 (2.19-1) は locales (<< 2.19) を壊し、導入済み です。
設定される locales のバージョン は 2.13-38+deb7u1 です。

dpkg: locales の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
処理中にエラーが発生しました:
 locales

(もしかしてコケた…???)

Fei3939@debian:~/Downloads$ KanmusuMemory 

f:id:Fei3939:20140609230502p:plain
キタ━━━━(゚∀゚)━━━━!!

お疲れ様でした。

Debian squeezeにgo言語の環境構築

Go言語

aptitudeを試す

$ sudo aptitude install golang
名前か説明が "golang" にマッチするパッケージは見つかりませんでした
名前か説明が "golang" にマッチするパッケージは見つかりませんでした
インストール・削除・更新されるパッケージがありません。
更新: 0 個、新規インストール: 0 個、削除: 0 個、保留: 3 個。
0 B のアーカイブを取得する必要があります。展開後に 0 B のディスク領域が新たに消費されます。

( ^ω^)…

$ sudo aptitude search go
p   addresses-goodies-for-gnustep   - GNUstep 用個人アドレスマネージャ (Goodies)
p   aewm++-goodies                  - 最小限のウィンドウマネージャの補完ユーティ
p   akonadi-kde-resource-googledata - Google calendar and contacts resource for 
p   alt-ergo                        - Automatic theorem prover dedicated to prog
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p   gok-doc                         - GNOME Onscreen Keyboard 用文書ファイル    
p   goldendict                      - a feature-rich dictionary lookup program  
p   goldendict-wordnet              - electronic lexical database of English lan
v   golearn                         -                                           

(#^ω^)……

直接

ここから取ってくるじゃろ?

こうして

$ sudo tar -C /usr/local -xzf go1.2.2.linux-amd64.tar.gz 
$ export PATH=$PATH:/usr/local/go/bin

こうやって

package main

import "fmt"

func main() {
  fmt.Printf("hello\n")
}

こうじゃ

$ go run test.go 
hello

スクリーンショット+Twitter

あらまし

前から触ろうと思っていたC#の題材としてスクショアプリを作ってみました。
ただスクショとるだけだとつまらないので、そのままTwitterに投稿できるようにしてみました。

開発環境

機能

あれだった点

Twitter認証でコケてた
  • OAuth認証でPINコードを取得してaccess.TokenとAccess.TokenSecretを投げたときに受け取ったはずのserviceの中がNullでNullReferenceExceptionが返ってきた
using TweetSharp; 

TwitterService service = new TwitterService("consumerKey", "consumerSecret");
OAuthRequestToken requestToken = service.GetRequestToken();
Uri uri = service.GetAuthorizationUri(requestToken);
Process.Start(uri.ToString());
//---- ここまでは良かった ----//

string verifier = "123456"; //-- Pinコード

//-- アクセストークンを取ってくる…
OAuthAccessToken access = service.GetAccessToken(requestToken, verifier);

//-- 問題はここ
service.AuthenticateWith(access.Token, access.TokenSecret);

この部分で例外をキャッチしていたようでserviceの参照でNullを見てたらしい…
(数日放置して書き直したら動いたので原因がまだよくわからない)

UIがクソ
  • 自分のセンスのなさが伺えます
  • Twitter認証するための認証ページを開かせるためのボタンと認証ボタンを分けてた
    • 結局認証ボタンでまとめて、別フォームを開いてPinコードを入力するようにした
常に画像が添付して投稿される状態
  • スクショした画像をすぐにそのままつぶやく目的だったから良いといえばよかったけど…
  • 結局投稿するときに画像を添付するかどうか尋ねるダイアログを出すようにした

修正や改善や機能追加的なTodo(もしやるとしたら)

  • Twitter認証の情報を保持させる(今はアプリ起動後に毎回認証しないとダメ)
    • access.Tokenとaccess.TokenSecretとか持ってたらいいとか見たけど無理だった。ヨクワカラン
  • 認証ボタンの位置を変える
    • 今の位置だとスクショの取れる範囲に影響している
  • スクショを取ったときにファイル名を付けて区別できるようにする
    • test.pngとか決め打ちにしてる
  • 全体的にデザインがクソ
    • どうしようもない

やってみて

C#とかフォームアプリとかGUITwitter連携とかいろいろと勉強になったし楽しかった。
もうちょっといじって適当なところでgithubとかに公開できたらいいなーとは思うけど
ソースコードあれだしやらないかな…