「未分類」カテゴリーアーカイブ

sun java 9 はやっぱり sun java 9 だった

ちょっと古い話題 ( sun 純正のライブラリ ) があるので sun java 9 ということで。
sun java は日本語だと語呂が良い(「さんじゃば」)けれど、ora java とか cle java とかに略さずに oracle java という表記しかないなあ。

〇 オチ
oracle java 9 は依然として add-apt-repository ppa:webupd8team/java を使用します。

〇 前提
linux 系 OS で使用できる java の実装として OpenJDK 系統と Oracle JDK 系統があります。現時点 ( 2018/03/01 ) では両方ともに oracle が開発しています。違いはいろいろありますが、JavaOne 2017 では「有償版が Oracle JDK、無償版が OpenJDK。2018 年後半を目途に両者のバイナリは互換性を持つ。」という話が出ています。
cf. gihyo.jp での JavaOne 2017 レポート 2 回目
cf. スラドの「LTS版JDKの入手にはOracleサポート契約が必須になる?」という記事

〇 本題
qiita で以下のような記事を発見
もうJava9にadd-apt-repositoryは要らない
まあ、OpenJDK しかいらないのであれば上記の記事で合っていますが、拾ってきたコードで com.sun.compile.reflection.* みたいなのを使用していると OpenJDK では手に負えなくなります。
解決策としては「Oracle JDK を使え」になるのですが、その場合は add-apt-repository する方法が必要になります。具体的には以下のようなコマンドを叩きます。


sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java9-installer

cf. Install Oracle Java 9 (JDK9) in Ubuntu, Linux Mint or Debian via PPA
やっていることは oracle 本家からダウンロードして環境変数等をそろえているだけらしいので、普通に oracle 本家から java の tar.gz を落とす -> 環境変数 JAVA_HOME を設定する -> PATH に ${JAVA_HOME}/bin を通す、のが良さそうです。
まあ rpm も用意されていますが、Ubuntu ( apt ) 使っていて更に rpm も使うのはちょっとした悪夢 ( 絶対 rpm 使っていたことを忘れる ) に思えます。

ちなみに、上記 qiita の記事の引用元は↓
Can not install ‘openjdk-9-jdk’ because it tries to overwrite file aready included in ‘openjdk-9-jdk-headless’ [duplicate]
これ、openjdk-9-jdk と openjdk-9-jdk-headless パッケージを両方入れようとすると /usr/lib/jvm/java-9-openjdk-amd64/include/linux/jawt_md.h でバッティングしてしまってインストールできない、という話です。
解決策としては
・headless 版だけ入れる
・qiita の記事のようにする ( sudo dpkg -i –force-overwrite を指定して .deb パッケージを入れる )
となりました。

〇 余談
何故 oracle Java が必要かというと、java 8 で書いたソースからの移行に –add-exports や –add-opens といった引数を指定したいと思ったからです ( 結局不要だったのですが)。
oracle java の方で “java -X” とかとやると使用方法が出てきます。
cf. Oracle JDK 9 Migration Guide の Migrating to JDK 9
↓を見ると java の modular system ( Project Jigsaw ) で使えるようなのですが、
JEP 261: Module System
jupyter-jvm-basekernel のコンパイル ( ./gradlew build ) で OpenJDK を使うと以下のようなエラーが出ます。


java.lang.IllegalAccessException: class org.gradle.api.internal.tasks.compile.reflect.SourcepathIgnoringInvocationHandler cannot access class com.sun.tools.javac.file.BaseFileManager (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.file to unnamed module @XXXXXXXX

XXXXXXXX は任意の小文字 or 数字
sun java では特にコマンドオプションを付けることなく無事 build できました。
cf. jupyter-jvm-basekernel

media contains valid xfsdump but does not support append

redhat の xfsdump を使用していて発生したエラー。
原因は別のシステムのバックアップファイルを指定していたため。スクリプトは↓

/sbin/xfsdump -L var -M mybackuphdd -l 0 -f /mnt/backup/myserver01-var.YYYYMMDD.dump /dev/rhel/var

既に myserver01-var.YYYYMMDD.dump を myserver01 で取得済みの状態で、同じ記憶媒体を利用して他のサーバでバックアップを取ろうとする ( 既に myserver01-var.YYYYMMDD.dump ファイルがある ) とエラーになります。
「バックアップファイルに指定したファイルは有効な xfsdump ファイルだが、対象のファイルは追加書きがサポートされていない」という意味らしいです。
別のサーバのシェルスクリプトを転用していたため、バックアップファイル名が他のサーバとかぶっていたことを見つけるのに時間がかかりました。
なお、-L ( バックアップ名称 ) と -M ( バックアップ媒体名称 ) を同時に指定しないと prompt で訊かれます。

Windows Installer Cleaner と Windows 7

コントロールパネルの「プログラムの追加と削除」でうまくアンインストールできない場合にぐぐると出てくるのが Windows Installer Cleaner ( utility )。
MS Office 2007 にバンドルされたツールだったらしいですが、Office 2007 のサポートが終了しているので MS からはダウンロードできなくなっています。
過去の情報
technet の情報によると、使い方を間違えると OS に重大なダメージを与えるから、だそうで。

今 ( 2017/09/28 時点 ) 使用するなら無理にダウンロードサイトを探すのではなく、プログラムのインストールまたは削除をブロックしている問題を解決するで公開されているツールを使用する方が良いと思います。

今回は Windows 7 ( 64bit ) にインストールされた office ime 2010 ( 32bit ) の削除の際に使用し無事解決しました。

KB3185278 がインストールできない場合

Windows 7 更新プログラムで KB3186278 がインストールできない症状に出会いました。
対処法としては C:\Users 以下にあるプロファイルを移動して数個程度にする、でした。
この不具合は修正プログラムをインストールするタイミングによるらしく、300 個ほどプロファイルがあっても問題が出なかった PC もあれば、200 個程度で発生する場合もあるようです。
特に数カ月に一度 Windows Update を適用するスタイルの場合はご注意を。

samba4.x は samba-tools domain provision コマンド実行が必須

samba4.x で Active Directory 環境に参加させようといろいろやってみた結論がタイトル。

環境

  • Ubuntu 14.04.4
  • samba : Version 4.3.9-Ubuntu

私の場合はマルチドメイン環境でしたが、以下のような感じでできました。

  • Active Directory Domain : oya.example.jp, ko.example.jp
  • samba を実行するサーバを参加させたい Domain : ko.example.jp
  • oya.example.jp の PDC : pdc01.oya.example.jp
  • ko.example.jp の PDC : pdc02.ko.example.jp

とします。

# samba のインストール
sudo apt-get update
sudo apt-get install samba
sudo apt-get install winbind

# winbind の設定
sudo vi /etc/nsswitch.conf
--- 修正箇所 ここから ---
group: compat winbind
passwd: compat winbind
-- ここまで ---

# kerberos5 環境の準備
sudo apt-get install krb5-user
sudo vi /etc/krb5.conf
--- /etc/krb5.conf の追記内容 ここから ---
[libdefaults]
default_realm = KO.EXAMPLE.JP
[reamls]
OYA.EXAMPLE.JP = {
kdc = pdc01.oya.example.jp
admin_server = pdc01.oya.example.jp
}
KO.EXAMPLE.JP {
kdc = pdc01.ko.example.jp
admin_server = pdc01.ko.example.jp
}
[domain_realm]
.oya.example.jp = OYA.EXAMPLE.JP
oya.example.jp = OYA.EXAMPLE.JP
.ko.example.jp = KO.EXAMPLE.JP
ko.example.jp = KO.EXAMPLE.JP
--- ここまで ---

sudo kinit administrator@OYA.EXAMPLE.JP
sudo klist
# で OYA.EXAMPLE.JP に参加できることを確認
sudo kinit administrator@KO.EXAMPLE.JP
sudo klist
# で KO.EXAMPLE.JP に参加できることを確認

# ドメインに参加
cd /etc/samba
sudo samba-tool domain provision
# いろいろ聞かれるがデフォルトのパラメータで問題ないはず。
# ここで聞かれるパスワードは実行している PC の administrator ( samba のユーザー ) のパスワードらしい。

あとは従来通りに /etc/samba/smb.conf を修正して共有フォルダを作成した後、

sudo service smbd start
sudo service nmbd start
sudo service winbind start

とやれば利用できるはず。

はまったこと

samba-tool は samba-tool domain provision 等で初期化されていないと失敗するコマンドがあるようです。一応動かない場合向けに samba の source code 内には install_with_python.sh というのがあり、python 2-6-5 環境で samba-tool を動作させるものがあるようですが、Ubuntu の apt で入れられる python 2.7.6 ( 2016/06/01 時点 ) でも問題なく動作しました。また、install_with_python.sh は色々試しましたが最終的にはインストールに失敗しました。

過去のログを漁ると、samba-tool domain provision を実行しないとこんな風なログが出たりします。

  • MYSERVER : samba を実行しているサーバの名前
  • DOMAIN : Active Directory のショートドメイン名
  • DOMAIN FLL NAME : Active Directory の FQDN


--- log.wb-<DOMAIN> より ---
Kinit for <MYSERVER>$<DOMAIN> to access cifs/<DOMAIN FILL NAME>@<DOMAIN> failed: Preauthentication failed
--- log.winbindd-dc-connect より ---
Kinit failed: Cannot contact any KDC for requested realm

samba3.x の smb.conf を作成してから sudo net ads join してもエラーは出ませんが、作成した共有フォルダにアクセスできなかったり、wbinfo -g や wbinfo -u は表示されても id -a “<DOMAIN>\<USER>” で id 名の解決に失敗したりします。