OSS」カテゴリーアーカイブ

knife zero移行でぼちぼちエラー

今迄、knife soloを使っていたけれどもメインサーバ移設に併せてknife zeroに移行しようと試験中。
基本はDockerになるのでDockerを動かす基盤としてのプロビジョニングのみ。なので、さくっと終わるかと思ったらそこそこてまどっています。簡単に解決できたものも含めてメモ。

 

ChefDKとrbenb併用しているとrubyのパスがrbenvを向いている(ことが多い)。knife zeloをgemで入れてもrbenvの方を向いてしまいknife zeroが動かない。
Knife-ZeroをマスターしてChef Soloの引退に備えよう!」を参考に修正。
自分はrubyの開発は今のところしないのでrbenvを削除。

knife zero bootstrap ホスト名 だとパーミッションではじかれる。

base7 and any other relevant details that might help us with troubleshooting.
base7 
base7 mkdir: ディレクトリ `/etc/chef' を作成できません: 許可がありません
base7 sh: 行 179: /etc/chef/validation.pem: そのようなファイルやディレクトリはありません

–sudoオプションが必要

 

vagrantで(名前解決しないで?)Nオプションをつけないと、nodes/localhost.jsonになる。名前解決できない状態では、host名をnode名.jsonから(?)逆引きする設定をしないと動かないようなのでlocalhostとしてしまうと2つvagfrantをあげると混乱する。

knife zero bootstrap base7 -N base7 --sudo

 

名前解決していない状態ではホスト名指定のconvergeでは動かない。

knife zero converge base7 --sudo
FATAL: No nodes returned from search

※ base7は~/.ssh/config に設定

knife soloではbase7はsshの接続情報だったが、knife zeloではデフォルトでは一度ホスト名として名前解決にいっているということか??

nodesのjsonを見てやるようにオプション指定をすることで回避

knife zero converge -a knife_zero.host "name:base7"   --sudo
base7 [2017-04-26T02:34:28+00:00] INFO: Forking chef instance to converge...
base7 Starting Chef Client, version 12.19.36

name:ホスト名でknife zeloで設定されているもの(node/json)を使用するらしい。
同じサーバに名前を付けてlocalhost.jsonとbase7_2.jsonがあった状態で”name:localhost”を指定したらbase7_2.jsonが読み込まれたと思われる動きをした。jsonファイル名を見ている訳ではなさそうなので注意。(いま深堀りする必要ないので、取り敢えず名前付きのみで運用)

 

[2017-04-26T02:47:09+00:00] INFO: Running queued delayed notifications before re-raising exception
base7 
base7 Running handlers:
base7 [2017-04-26T02:47:09+00:00] ERROR: Running exception handlers
base7 Running handlers complete
base7 [2017-04-26T02:47:09+00:00] ERROR: Exception handlers complete
base7 Chef Client failed. 0 resources updated in 13 seconds
base7 [2017-04-26T02:47:09+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
base7 [2017-04-26T02:47:09+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
base7 [2017-04-26T02:47:09+00:00] ERROR: yum_package[nginx] (nginx::default line 10) had an error: Chef::Exceptions::Package: No candidate version available for nginx
base7 [2017-04-26T02:47:09+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

パッケージない時のエラーメッセージ、結構下の方に出ているのでぱっとみ見落としやすい

 

 

 

 

そういうものらしい

chefなんとなく触っていただけでまとめて勉強していなかったのでChef実践入門をちょいちょい触りながら確認中。

 

ohai |head

とうったら

[hoge@localhost testsv02]$ ohai |head
{
 "cpu": {
 "0": {
 "vendor_id": "GenuineIntel",
 "family": "6",
 "model": "42",
 "model_name": "Intel(R) Celeron(R) CPU G555 @ 2.70GHz",
 "stepping": "7",
 "mhz": "2700.000",
 "cache_size": "2048 KB",
/home/hoge/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/ohai-8.20.0/lib/ohai/application.rb:97:in `write': Broken pipe @ io_write - <STDOUT> (Errno::EPIPE)
 from /home/hoge/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/ohai-8.20.0/lib/ohai/application.rb:97:in `puts'
 from /home/hoge/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/ohai-8.20.0/lib/ohai/application.rb:97:in `puts'
 from /home/hoge/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/ohai-8.20.0/lib/ohai/application.rb:97:in `run_application'
 from /home/hoge/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/ohai-8.20.0/lib/ohai/application.rb:78:in `run'
 from /home/hoge/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/ohai-8.20.0/bin/ohai:41:in `<top (required)>'
 from /home/hoge/.rbenv/versions/2.3.1/bin/ohai:23:in `load'
 from /home/hoge/.rbenv/versions/2.3.1/bin/ohai:23:in `<main>'

Broken pipeでた。

しらべたらそういうものらしいので放置。(もう大丈夫かもしれんけど大事なとこでないので受け入れる。)

Vagrantインストール

ECサイトの開発をdocerベースでやろうとしていたけどVagrant全く触っていない。というわけで、しばらくは勉強を兼ねVagrantベースで開発してみようと思う。

CentOS7のホストにインストールを開始。
KVM+qumeでも動くとのことでさくらのナレッジさんをそのままコピペしてインストール実行。

[yoshitake@localhost ~]$ sudo vagrant up
[sudo] password for yoshitake:
Bringing machine 'default' up with 'libvirt' provider...
==> default: Cleaned up shared folders
==> default: ================
==> default: Machine id: a3d96b45-fd52-4590-a598-9a63744b7d58
==> default: Should be mounting folders
==> default: /vagrant, opts: {:guestpath=>"/vagrant", :hostpath=>"/home/yoshitake", :disabled=>false, :__vagrantfile=>true, :target=>"/vagrant", :accessmode=>"passthrough", :mount=>true, :readonly=>nil, :mount_tag=>"05e62b45705da84350317538981ae9c"}
==> default: Starting domain.
There was an error talking to Libvirt. The error message is shown
below:

Call to virDomainCreateWithFlags failed: 内部エラー: モニターに接続中にプロセス が終了しました: 2016-09-07T21:13:31.339854Z qemu-kvm: -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=05e62b45705da84350317538981ae9c,bus=pci.0,addr=0x4: 'virtio-9p-pci' is not a valid device model name

根深そう。。。。。

 

まともにやってくとはまりそうなのでvirtualboxで起動。

sudo vagrant destroy
sudo vagrant up --provider=virtualbox

ワーニングがでてしばらくリトライ繰り返した後に終了。

default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using newSSH key...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...

原因はVagrant 1.8.5のバグとのことでこちらを参考に修正。

一度起動しただけで、suspend->resumeで再度発生。CTRL+Cで一旦停止しhalt->upとしたところまだ発生。時間なくなってきたので状況メモ書いて後で確認。

 

(9/16追記)

リンク先のように plugins/guests/linux/cap/public_key.rb

chmod 0600 ~/.ssh/authorized_keys

を追記しているがゲストのauthorized_keysがvagrant destroty & upしても664になっている。

何か手順が間違っているかもしれないけど、ゲストのauthorized_keysを直接

chmod 600 authorized_keys

して対処。こんどこそ動いているっぽい。とりあえず作るたびにchmodすることにする。

 

(10/8追記)

単にTypoでした。手動でchmod対応だと、Test Kitchenが動かないですね。

 

関西地区でフリーエンジニアを探してます

 

 

どもども、システム開発の(株)エペア改めクライミングジムロシェの北村です。

10/29追記。

ありがとうございます。開発譲れそうなエンジニアのめど立ちました。

ユーザとの顔合わせこれからですがいったんしめさせてもらいます。

 

ジム運営がいっぱいいっぱいでシステム開発に手が回っていません。

そんな事情がありコンサル(肩書的には契約社員)をしている会社から「お前ができないなら変わり探せよ!!」っと詰められてます(><)

 

そーいうわけでフリーランスの人(または小規模法人)を只今探しております。

 

アレな人だとアレですができる限り丸投げ(!?)したい感じです。

(人いなければ頑張るしかないですが)

 

細かいことは問い合わせてもらわないといえないですが

エンドユーザは

・技術要素は言語も含め比較的自由に選べる

・保守契約もあり前提

・発注元はPCもよくわかってないぐらいだけど必要な金は払う心づもり有

・「ナンカPCウゴカナイヨ」には付き合ってください

・PC関係はよくわからないけど必要なら必要な分(金)は出す

という感じです

 

中抜き無し、技術はかなり自由に選べるエンドユーザで継続発注ありなので悪い話ではないと思います。

なお、自分は監視役で

手抜き・ぼったくり・スキルないのにはったりをしないように見ています。

 

 

興味あるひとは

kitamura@epea.co.jp

までお願いいたします。

 

 

 

 

 

 

 

 

 

PDFBoxでページ指定読み込み

久しぶりにJavaでPDFを読み込む必要が出たのでPDFBoxを使って読み込んでみた。

ページごとのテキストを抽出したかったがぱっとみページ単位のオブジェクトは見つからなかった。そのためページを指定して以下のイメージで読み込み。

        PDDocument pdf = null;
        try (FileInputStream pdfStream = new FileInputStream(parsePath)) {

            PDFParser pdfParser = new PDFParser(pdfStream);
            pdfParser.parse();
            pdf = pdfParser.getPDDocument();
            int pageNums = pdf.getNumberOfPages();

            PDFTextStripper textStripper = new PDFTextStripper();
            for (int currentPage = 1; currentPage <= pageNums; currentPage++) {
                textStripper.setStartPage(currentPage);
                textStripper.setEndPage(currentPage);
                String textInPDF = textStripper.getText(pdf);

とりあえず要望は満たしているけどかっこ悪い。

LibreOfficeのアップデート失敗&対処

さっきLibreOfficeを4.1.5にバージョンアップしようとしてダウンロード&インストールをしたけど「エラー 1303.インストーラがこのディレクトリへアクセスする権限を不足しています: [インストールディレクトリ]。これ以上インストールを継続できません。アドミニストレータ(管理者)としてログオンしてください、またはシステム管理者へご連絡ください。」というようなエラーが出て失敗。(その時メモしていないのでメッセージは若干違うかもしれません。)

ユーザーに管理者権限あるのにと思いつつ念のため管理者権限起動のコマンドプロンプトでインストーラーをたたいたけどこれも失敗。

(コマンドプロンプトを管理者として起動して以下を実行)
msiexec /i LibreOffice_4.1.5_Win_x86.msi

 

しょうがないので、以下の手順を踏んでインストールしたら成功

  1. 古いLibreOfficeいったんアンインストール
  2. PC再起動
  3. 管理者権限のあるユーザでLibreOffice_4.1.5_Win_x86.msiをダブルクリックしてインストール

LibreOfficeって自分の環境だと管理者権限のあるユーザでも再起動するまで操作できない権限がよくふぁからないフォルダ/ショートカットが出来る事があるので、そいつのせいでインストーラーがこけていたんだと想像。あれってなんなんだろう??

jsoupのセレクター

使うたびに調べているのでまとめておく(徐々に追記予定)

 

doc.select("a"); //タグ(a)を抽出
doc.select("fb|name"); //ネームスペース(fb)のタグ(name)を抽出<fb:name>
doc.select("a#hoge"); //id(hoge)を持つタグ(a)を抽出
doc.select("a.hoge"); //class(hoge)を持つタグ(a)を抽出 
doc.select("b:matches(次の\\d+件)"); //正規表現(次の\\d+件)にマッチするタグ(b)を抽出


 

 

jsoupを使ってみた

オープンソースのHTMLパーサー(Java)であるjsoupを軽く使ったのでメモ。

ざっとさわった特徴は

  • みんなが大好きMITライセンス
  • jQueryっぽく扱いが楽(少なくとも簡単な利用だと)
  • 今年の1月までは開発すすんでいた(今はとまっている??)
  • ソースは小さめかつきれいめなので手を入れることになっても難しくなさそう
  • クラス名はDocumentとかかなり一般的なので自動補完でインポートを追加しようとすると他のものが選ばれること多いので保管候補は目視で選びながらぺちぺち追加したほうがいい

インストールはMavenで指定かjarにパスを通すのみ。使ったバージョン1.7.2では依存ライブラリ無くひとつのjarで事足りた。

<dependencies>
 ……
<dependency>
  <!-- jsoup HTML parser library @ http://jsoup.org/ -->
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.7.2</version>
</dependency>
 ……
</dependencies>

 

ぐりぐりとまわしながらJsoup.connect(url).get()とhtmlをクローラー的に取得していたら

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)

な感じにエクセプション発生

Jsoup.connect(url).timeout(0).get();

 としてとりあえずは回避。コネクション使いきっている状態と思うので運用機とかで使うなら

org.jsoup.helper.HttpConnectionの中いじるか、ulimitとか調整した方がいいと思う。