ここのことはなかったことにするかもしれない

仕事がらみの記事を主として扱いますが、あくまで個人ブログです。2013年以前の記事は https://yellow-73.hatenablog.com/ にあります。

放置したシステム上でパッケージのインストールができない!?

放置したシステム上で

pkg install gcc

とすると

pkg: repository meta /var/db/pkg/FreeBSD.meta has wrong version 2

と怒られました。

pkg bootstrap -f

を実行すると解消されました。

けど、

pkg install gcc

とすると

pkg: http://pkg.FreeBSD.org/FreeBSD:11:amd64/quarterly/All/gcc-8_3.txz: Not Found

と言われた

pkg update -f

を実行すると解消されました。

roxtermでGLドライバが無いとか警告が出た

roxtermを導入したところ

libGL error: unable to load driver: swrast_dri.s

と警告が出ました。けど起動しました。

https://qiita.com/exy81/items/31bcf5c3d83c1ee8662e (全く起動しているモノは違いますが)で、LIBGL_ALWAYS_INDIRECT1にすればいいとのこと。

setenv LIBGL_ALWAYS_INDIRECT 1

これで警告が出なくなりました。

WindowsにVirtualBox+CentOSを入れてファイル共有まで実行

# ゲストでネット接続ができるようにする

今回は、ホストからゲストにアクセスできて、ゲストから外部にアクセスできて、ネットワークからゲストにアクセスさせたくない、という条件です。
CentOSにSSH接続してみる!VirtualBoxのNATとホストオンリーアダプターによるネットワーク設定のベストプラクティス!〜安全かつ快適な開発ができるようにする〜 - Qiita が合うので、NIC1をNAT、NIC2をHost-Onlyでやりました。

だいたい virtualboxでホストオンリーアダプターを利用して、SSH接続を行う|Windows10 - Qiita でいけます。nmtui で、NIC1は自動接続を有効にし、NIC2を 192.168.56.xx/24 にして自動接続を有効にすればOK。

# Guest Addition導入

ファイル共有を狙っていたのですが、Guest Additionsが必要です。
VirtualBox上のCent OSにGuest Additionsをインストールする方法 - Qiita を参考にします。

yum -y update
yum -y install kernel-devel kernel-headers gcc gcc-c++

これだけだと、make がないとrcvboxaddで怒られたので次も実行しました。

yum -y install gcc make perl kernel-devel

rcvboxaddで次のようなメッセージが出る場合、OSのカーネルバージョンとkernel-develのバージョンがあっていません。

The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-4.18.0-147.el8.x86_64

次のように、OSのバージョンにあわせてください。

yum install  kernel-devel-4.18.0-147.el8.x86_64

VBoxLinuxAdditions.runで次のようなログを吐いて(標準エラー出力には出ません)静かに怒られました。

Makefile:977: *** "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel".  Stop.

次を実行します。

yum -y install elfutils-libelf-devel 


Addition CDを(Read onlyで)マウントします。

mkdir /mnt/cdrom
mount -r /dev/cdrom /mnt/cdrom
sh /mnt/cdrom/VBoxLinuxAdditions.run

次を実行しろと言われたので、実行します。

 /sbin/rcvboxadd quicksetup all

# 共有フォルダ

まず、ホスト側でフォルダを作成します。Windows共有は不要です。

VirtualBoxのゲストの設定→共有フォルダー→追加 を選択します。
そこから 「フォルダーのパス」で「その他」を選択し、フォルダ選択ダイアログが開くので、そこからフォルダを選択します。

「自動マウント」「永続化する」をチェックします。マウントポイントは書かないとデフォルトの /media/sf_{共有フォルダ名} が使われます。

これで共有ができるのですが、そのままだとrootにならないとアクセスできません。次を実行すると、root以外のユーザもアクセスできます。

gpasswd --add {ユーザ名} vboxsf

(参考: VirtualBoxにおいて、ホストOSとゲストOS (CentOS) 間の共有フォルダを作成する方法 - Qiita)

gdalのビルドに失敗したら古いgdalが悪さしてた

portsでgdal (3.0.4)をビルドしていたところ

ld: error: undefined symbol: OSRSetAxisMappingStrategy

で止まりました。

次のコマンドが見て取れたので、リンクしているところで止まっているようです。

c++ -Wl,-rpath,/usr/local/lib -L/usr/local/lib -fstack-protector-strong  gdallocationinfo.o  -L/usr/ports/graphics/gdal/work/gdal-3.0.4 -lgdal  -lcrypto -L/usr/local/lib -lpoppler  -ljson-c -lfreexl -L/usr/local/lib -lSFCGAL -L/usr/local/lib -lgeos_c -L/usr/local/lib -lkmlbase -lkmldom -lkmlengine -lkmlxsd -lkmlregionator  -L/usr/local/lib -lexpat -L/usr/local/lib -lxerces-c -lpthread -L/usr/local/lib -lopenjp2  -ljasper -L/usr/local/lib -lnetcdf -lgif -ljpeg -lgeotiff -ltiff -lpng -L/usr/local/lib -lpq  -lzstd -llzma -lproj -lz -L/usr -L/usr/lib -lpthread -lm -lrt -ldl -L/usr/local/lib -lspatialite -lsqlite3 -lproj -lpcre   -L/usr/local/lib -lcurl            -L/usr/local/lib -lxml2 -lz -L/usr/lib -llzma -L/usr/lib -lm       -o gdallocationinfo

全く意味不明。

2時間費やしたところで、-lgdalとなっているのに注目。前にpackagesからgdal 2を入れてたのです。


pkgでgdalをいったん外してビルドしなおすとうまくいきました。


悩んだ割にあっけなかったです。

いろいろメモ

addJavascriptInterface()でWebView側から見えなくなったら、見せたいメソッドに @JavascriptInterface アノテーションをつける。

WebViewをchrome://inspectからデバッグしたい場合、次を入れておく。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  WebView.setWebContentsDebuggingEnabled(true);
}

WebViewのリンクをクリックしたときに別アプリを立ち上げたい場合は次のようにする?deprecated対応も入れたけど、これでいいのか分からない。

webview.webViewClient = object: WebViewClient() {
  @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    override fun shouldOverrideUrlLoading(
      view: WebView?,
      request: WebResourceRequest?
  ): Boolean {
  ...
  }
  override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
   ...
  }

}


位置情報取得許可はDalvik側で受けられます。

https://stackoverflow.com/questions/32659725/android-m-system-permission-vs-webview-location-permission/33549796

 webview.webChromeClient = object: WebChromeClient() {
  override fun onGeolocationPermissionsShowPrompt(
    origin: String?,
    callback: GeolocationPermissions.Callback
  ) {
  ...
  }

}


http通信を可能にするには Manifestを編集。


    
    
  

作ったアプリケーションをインストールしたら日本語が出なくて焦った

標記の通り。

Visual Studio 2017でアプリっぽいものを開発していて、デフォルトロケールでは英語を使用し、日本語ローケールで日本語を使うようにしていました。

インストーラプロジェクトを導入して、とりあえず「プライマリ出力」をインストールするようにしたたところ、多言語化したアプリがデフォルトロケールで表示されてしまいました。

全然意味が分からなかったので、半日悩んでいたのですが、それでも分かりませんでした。
ここで、exeファイルのインストール先に移動して、C#プロジェクトで生成されたリソースを入れてみたらどうだろうと思いました。

C#プロジェクトのbin/Releaseを見ると、jaディレクトリが作られ、その下に fooba.resources.dll があります。このjaディレクトリごとexeファイルのインストール先にコピーしました。

実行したところ、日本語が表示されました。

ということは、インストーラプロジェクトで生成されたインストーラが日本語リソースをインストールしてくれたら解決するようです。また、デフォルトロケールのリソースが無いところから、exeか何かに取り込まれているようです。

で、"installer project resource language"でぐぐったところ、
https://stackoverflow.com/questions/798886/c-sharp-creating-a-setup-for-multi-language
がヒット。

プロジェクト出力で、リソースのアセンブリを追加してやればいいとのこと。

プライマリ出力と同じ要領で、インストーラプロジェクトを右クリックでコンテキストメニューを出し、"Add"→「プロジェクト出力」を選択。
何を出力するか選択するところで、2行目に「ローカライズされたリソース」があり、たぶんこれだな、と考える。

追加すると、「ローカライズされたリソース from (プロジェクト名)」が確かに追加されます。
これでビルド、インストールすると、インストールされたアプリで日本語表示ができました。また、exeファイルのインストール先を確認して、リソースがインストールされていたことも確認できました。