「Engineering」カテゴリーアーカイブ

iPhoneから色々と復旧した件

所有していたiPhone7が「「圏外」の問題に対する iPhone 7 修理プログラム」を発動してしまう。一応、端末のバックアップをiTunesで取得するも、バックアップからの戻しができず、という状況。

バックアップファイル自体は「/Library/Application Support/MobileSync/Backup/」にしっかり残っており、ファイルを見るとdbファイルやら、plistファイルもあり、iCopyBotで見るとファイルがちゃんと見られる状況。

dbファイルはsqliteのようなので、「DB Browser for SQLite」で確認。

バックアップの中身の大半はファイルで、いずれもFilesテーブルでファイル名とファイルの内容が管理されているシンプルな構成。復旧したかったのはGoodReaderのデータなので、domain列で絞り込んで、ファイル名を特定してファイルの抽出完了。

見る限り、画像も動画も一律ファイル保存のようなので、その法則が分かればおよそ何でも復旧できそうです。

オライリー Kafka

オライリーのKafka。Kafka自体はちらほらと聞きつつも、MQ、JMSなどの所謂メッセージングとの違いがさっぱり分からなかったものの、一方でレプリケーションソフトとして使いたい話もあり、体系的に整理したかったところ。

その点、まえがきに整理されていました。

Kafkaはもともと、Linkedin社内のインフラシステムとして始まりました。私たちが思っていたのは、実に単純なことでした。データベースといったデータをストアするためのシステムはたくさんありましたが、自分たちのアーキテクチャにはデータの連続的なフローを処理するのに役立つものがかけていたのです。Kafkaを作る前、メッセージングシステムからログ集約/ETLツールまで、出来合いのソフトをいろいろと試してみたのですが、どれも求めていたものではありませんでした。

結局、私達はゼロから作ることにしました。リレーショナルデータベース、キーバリューストア、検索インデックス、キャッシュなどのように膨大なデータの保存にフォーカスするのではなく、連続的に生成されて成長し続けるストリームとしてデータを扱うことにフォーカスしました。

(中略)

私たちはKafkaをストリーミングプラットフォームとして考えるようになりました。ストリーミングプラットフォームとは、データの発行(Publish)と購読(Subscribe)、保存、処理を可能にするシステムであり、Apache Kafkaはまさにそのために作られています。

(中略)

Kafkaはメッセージングシステムと似ています(中略)、違いは3つあります。第一にKafkaはクラスタとして動作するモダンな分散システムです。拡張することで、超巨大な企業であってもすべてのアプリケーションを扱うことができます。(中略)対ににKafkaは好きなだけデータを保存できるように作られた、真のストレージプラットフォームです。真の配送保証を提供しているため、接続レイヤとして使うと大きなメリットがあります。データは複製され、永続化され好きなだけ手元においておけます。最後に、ストリーム処理の世界は抽象化のレベルを大きく高めてくれます。ほとんどのメッセージングシステムではメッセージの配信しかしてくれません。それに対して、Kafkaのストリーム処理は、はるかに少ないコートであなたのストリームから派生したストリームやデータセットを動的に計算することができます。

(中略)

わたしたちがKafkaを設計/構築する際の森ベーションの1つだったのは、KafkaをHadoopのリアルタイムバージョンと考えることでした。

(中略)

Kafkaと比較される領域の最後は、ETLあるいはデータ統合ツールです(中略)。Kafkaは、あるシステムからデータを取り出して、別のシステムに入れるためのツールではありません。リアルタイムのイベントストリームを中心としたプラットフォームです。つまり、出来合いのアプリケーションやデータシステムに接続できるだけでなく、同じデータストリームをトリガにした独自のアプリケーションを構築して動かせるのです。

内部の仕組みは明るい資料があった。

めざせ!Kafkaマスター ~Apache Kafkaで最高の性能を出すには~

 

事例としてはMQ代替が多く、まえがきのコンセプトと合致しないのが多数だっだけれども、以下が腑に落ちる。
大手ヘルスケアIT企業 Cerner社のKafka活用事例

さて、読書。。。

Oracle GridInfrastructure 12.1.0のインストールでハマってる件

こいつを参考に実施も製品のインストール時にハマった。

情報: /usr/bin/ld: /u01/app/12.1.0/grid/lib//libnls12.a(lxhlang.o): シン
ボル ‘__tls_get_addr@@GLIBC_2.3’ への未定義参照です
/usr/lib64/ld-linux-x86-64.so.2: error adding symbols: DSO missing from command line

・/u01/app/12.1.0/grid/lib/stub の削除
・/u01/app/12.1.0/grid/rdbms/lib/env_rdbms.mk の編集(-lonsを追加)

RMAN_LINKLINE=$(LINK) $(OPT) $(S0MAIN) $(SSKRMED) $(SKRMPT) \
$(LLIBDBTOOLS) $(LLIBCLIENT) $(LLIBSQL) $(LLIBPLSQL) \
$(LLIBSNLSRTL) $(LLIBUNLSRTL) $(LLIBNLSRTL) \
$(LLIBSLAX) $(LLIBPLSQL) $(LIBPLCN) $(LINKTTLIBS) -lons

にて回避できたら今度は以下エラー

情報: /usr/bin/ld: /u01/app/12.1.0/grid/lib//libclient12.a(kpue.o): シンボル ‘ons_subscriber_close’ への未定義参照です
/u01/app/12.1.0/grid/lib/libons.so: error adding symbols: DSO missing from command line

同じく、・/u01/app/12.1.0/grid/rdbms/lib/env_rdbms.mk の編集(-lonsを追加)

PLSHPROF_LINKLINE=$(LINK) $(OPT) $(PLSTMAI) $(SSDBED) \
$(LLIBCLIENT) $(LLIBPLSQL) $(LLIBSLAX) $(LLIBPLSQL) $(LINKTTLIBS) -lons

次は・・・

情報: /usr/bin/ld: /u01/app/12.1.0/grid/rdbms/lib/houzi.o: シンボル ‘ztcsh’ への
未定義参照です
/u01/app/12.1.0/grid/lib/libnnz12.so: error adding symbols: DSO missing from command line

同じく、・/u01/app/12.1.0/grid/rdbms/lib/env_rdbms.mk の編集(-lnnz12を追加)

TG4PWD_LINKLINE= $(LINK) $(OPT) $(TG4PWDMAI) \
$(LLIBTHREAD) $(LLIBCLNTSH) $(LINKLDLIBS) -lnnz12

ただ、このあとも

PRCZ-2012 : node1構成が始まりました

が全く帰ってこない・・・。帰ってきたら

2018/03/24 23:27:29 CLSRSC-330: Adding Clusterware entries to file ‘/etc/inittab’
2018/03/24 23:29:35 CLSRSC-214: Failed to start ‘ohasd’
Failed to start the Clusterware. Last 20 lines of the alert log follow:
2018-03-24 23:26:55.648:
[client(31726)]CRS-2101:The OLR was formatted using version 4.

The command ‘/u01/app/12.1.0/grid/perl/bin/perl -I/u01/app/12.1.0/grid/perl/lib -I/u01/app/12.1.0/grid/crs/install /u01/app/12.1.0/grid/crs/install/rootcrs.pl -auto’ execution failed

Execution status of node1 is:true
Execution exit code of node1 is:256

情報: *********************************************
情報: すべてのノードでrootスクリプトを実行に失敗しました。
情報: Overall status of execution of root/configuration scripts : failed
情報: Shutting down OUISetupDriver.JobExecutorThread
情報: クリーンアップ中。お待ちください…
情報: All forked task are completed at state setup
情報: Completed background operations
情報: Moved to state <setup>

 

ohasd(Oracle高可用性デーモン)を手動で設定して起動。。。

#vi /etc/systemd/system/ohasd.service
[Unit]
Description=ohasd daemon

[Service]
ExecStart=/etc/init.d/init.ohasd run > /dev/null 2>&;1

# systemctl daemon-reload
# systemctl enable ohasd.service
# systemctl start ohasd.service

まだまだどツボ

CRS-4133: Oracle High Availability Services has been stopped.
CRS-4124: Oracle High Availability Services startup failed.
CRS-4000: Command Start failed, or completed with errors.
2018/03/25 00:48:41 CLSRSC-119: Start of the exclusive mode cluster failed
2018/03/25 00:48:42 CLSRSC-198: Initial cluster configuration failed
The command ‘/u01/app/12.1.0/grid/perl/bin/perl -I/u01/app/12.1.0/grid/perl/lib -I/u01/app/12.1.0/grid/crs/install /u01/app/12.1.0/grid/crs/install/rootcrs.pl -auto’ execution failed

ここはohasdがちゃんと止まってなかったのでKILLしてクリア。次はこれ

2018/03/25 01:40:10 CLSRSC-365: Failed to create credentials for ASM on the local node

/etc/hostsでIPv6のエントリがあったのでコメントアウト

「rootcrs_node1_2018-03-25_10-56-44AM.log」を確認

 

2018-03-25 11:00:10: kfod op=credremote rc: 256
2018-03-25 11:00:10: Failed to create credentials for flex ASM, error:

——————————————————————————–
================================================================================
KFOD-00319: No ASM instance available for OCI connection
KFOD-00105: Could not open pfile ‘init@.ora’

2018-03-25 11:00:10: Executing cmd: /u01/app/12.1.0/grid/bin/clsecho -p has -f clsrsc -m 365
2018-03-25 11:00:10: Command output:
> CLSRSC-365: Failed to create credentials for ASM on the local node
>End Command output
2018-03-25 11:00:10: Executing cmd: /u01/app/12.1.0/grid/bin/clsecho -p has -f clsrsc -m 365
2018-03-25 11:00:10: Command output:
> CLSRSC-365: Failed to create credentials for ASM on the local node
>End Command output
2018-03-25 11:00:10: CLSRSC-365: Failed to create credentials for ASM on the local node

困りはててとりあえず/u01/app/12.1.0/grid/gpnp/seed/asm/credentials.xml を退避

VirtualBoxでドハマリした件

多分にもれずハマった。

ホストOSはMac OS(High Sierra)、ゲストOSはOracle Linux7

端末はMacBookPro

ネットワーク設定でブリッジ接続でインターネット接続させようと試みるも大ハマリ。

結論はネットワークアダプターの名前設定。bridge0だと通信不可でen0:Wi-Fi(AirPort)だとOK。ここの名前はホストOS端末のデバイス名に依存しているんだと推測。

Mac High SierraにMongoDBをインストールした件

参考は本家。https://www.mongodb.com/download-center?jmp=nav#community

まずはHomeBrewのインストールから、まだMacBookProに入れてなかった。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

続いてインストール

$brew install mongodb

データディレクトリの作成

$mkdir -p /data/db

起動

$mongod
(中略)
2018-01-02T00:13:29.787+0900 I NETWORK  [initandlisten] waiting for connections on port 27017

INSERT

use apa;
switched to db apa
db.user.insert({
... "name" : "Mike Mikowski",
... "is_online" : false
... });
WriteResult({ "nInserted" : 1 })

SELECT
db.user.find()
{ “_id” : ObjectId(“5a4a51a2276a68da5dd5a720”), “name” : “Mike Mikowski”, “is_online” : false }

シングルページWebアプリケーション

たぶん3年くらい前に買った気がする。当時は基盤専任ではなくてJavaScriptも見る部隊だったけど、やっぱりさっぱり分かってなかったなぁという事が改めて分かった。ようやく超ななめ読み(何回目?)でサンプル動かしてひとまず読了。

そもそもSPAという言葉がいつ出たのかは知らないけれども、担当していたシステムでは2013年ごろに開発開始したので、その頃にはもう考え方が整理されていたんだと思う。jQueryやらAJAXという文脈で語られるケースが多かったけど。

本書では、HTML+CSSで画面デザインを作り、クライアントサイドのアプリケーションを組むところ、サーバサイドをNode.jsを使って作るところ、MongoDBはJSON格納する文脈からお手軽なドキュメントDBとして紹介。

でも一番のミソはその一連の流れ、特にSPA、クライアントアプリケーションの考え方の戦略があるところだと思う。

ちゃーーーんと読んで理解したい気もするが、最近はWeb屋さんの世界を離れているのでJavaScriptを突っ込んで学習する気がちょっと引ける。

でも、Node.jsはちゃんと抑えておかないとインフラ屋としてもまずいなぁという思いも。従来はJavaScriptーJava、クライアントサイドーサーバサイトで別スキルセットが必要だから、、、という前提での開発が多かったけど、Node.js使ってドキュメントDB使って、MongoDBでいいじゃんってなりそうだし。。。

修行不足ですが、どっかのベンダーに担がれて、WebLogic/WebSphere+ドキュメントDBってのには疑問を持てるようにはなりました^ー^

VirtualBox Kernel driver no installde(rc=-1908)

Mac OS High SierraにVirtualBoxインストール(5.1.28 r117968)して仮想マシンを立ち上げようとしたら、ポップアップが出た

Kernel driver not installed(rc=-1908)
Make sure the kernek module has been loaded successfully.
where:sublib0sinst what:3 VERR_VM_DRIVER_NOT_INSTALLED(-1908)
-The support driver is not installed. On linux open returned ENOENT

VirtualBoxをアンインストールして、インストールしようとしてもエラー。install.log見たら以下になってた。

Installer[2618]: IFDInstallController EDB0 state = 8

でもセキュリティとプライバシーの詳細で、「システム全体の環境設定にアクセスするときに管理者パスワードを要求」をチェックしたらインストール成功して、VirtualBoxでもイメージを起動できた。

 

何だったんだろう。

Apacheメモリチューニング

AWSがやったら遅かったので、見てみたら空きメモリ無し。。。わずか90MB。

MemTotal:        1019336 kB
MemFree:           91852 kB
MemAvailable:      58300 kB
Buffers:            1052 kB
Cached:            34384 kB
SwapCached:            0 kB
Active:           863776 kB
Inactive:          15736 kB
Active(anon):     844176 kB
Inactive(anon):       56 kB
Active(file):      19600 kB
Inactive(file):    15680 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        844080 kB
Mapped:            23164 kB
Shmem:               152 kB
Slab:              22980 kB
SReclaimable:      10240 kB
SUnreclaim:        12740 kB
KernelStack:        2208 kB
PageTables:        14504 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      509668 kB
Committed_AS:    1250200 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       12288 kB
DirectMap2M:     1036288 kB

meminfo見ても食い過ぎ

total kB 18014125001271216 99128 99124

とりあえず小規模化。

<IfModule prefork.c>
StartServers       8 →1
MinSpareServers   5
MaxSpareServers   20
ServerLimit    256→128
MaxClients     256→5
MaxRequestsPerChild  4000→50
</IfModule>

 

Oracle12cでインストーラーを起動しようとしたら失敗した件

こんなんなった。

 

[oracle@node2 grid]$ ./runInstaller
Oracle Universal Installerを起動中です…

一時領域の確認中: 120MBを超えている必要があります. 実際 21786MB 問題なし
スワップ領域の確認中: 150MBを超えている必要があります. 実際 3967MB 問題なし
モニターの確認中: 少なくとも256色表示するよう設定されている必要があります
>>> コマンド/usr/bin/xdpyinfoを使用して表示色の自動チェックを実行できません でした。DISPLAY変数が設定されていることを確認してください。 失敗 <<<<

いくつかの要件チェックに失敗しました。インストールを続行するにはこれらの

要件を

続行しますか。(y/n) [n] y

 

>>> 必要な前提条件の失敗を無視しています。続行中…
Oracle Universal Installerの起動を準備中 /tmp/OraInstall2017-08-28_12-03-37AM. お待ちください…[oracle@node2 grid]$ Exception in thread “main” java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at java.awt.Toolkit$2.run(Toolkit.java:834)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:826)
at com.jgoodies.looks.LookUtils.isLowResolution(LookUtils.java:484)
at com.jgoodies.looks.LookUtils.<clinit>(LookUtils.java:249)
at com.jgoodies.looks.plastic.PlasticLookAndFeel.<clinit>(PlasticLookAndFeel.java:135)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at javax.swing.SwingUtilities.loadSystemClass(SwingUtilities.java:1850)
at javax.swing.UIManager.setLookAndFeel(UIManager.java:557)
at oracle.install.commons.util.Application.startup(Application.java:792)
at oracle.install.commons.flow.FlowApplication.startup(FlowApplication.java:165)

どうもインストーラーを起動したgridユーザの「.Xauthority」がなくて、XーWindowを許可できなかったことが原因。

SSHでログインしてファイル作成したら、解決した。

VirtulboxでLinuxの解像度変更にドハマリした件。

Mac上にVirtualBoxをインストールして、その上に各種OSを入れてたけど、Oracle Linuxをインストールしたところ、解像度が1024✕768以下しか選べずドハマリ。いろんな海外のサイトを渡り歩いても、GuestAdditionをインストールしたら見られるとか、xrandrで設定してみたらとか色々試してもNG。

結論は /etc/X11/xorg.conf で指定のディスプレイドライバを変更して解決。

変更前

Section "Device"
    Identifier   "Videocard0"
    Driver     "vesa"
EndSection

変更後

Section "Device"
    Identifier   "Videocard0"
    Driver     "vboxvideo"
EndSection

いくらGuestAdditionをインストールしようが、ドライバが選ばれていなければ、変わらんわなぁ。