Fedora 29でSlackのSegmentation faultを解決

Slackをインストールことになったが、Fedora 29で実行すると、

​​Segmentation fault (core dumped)

と表示され、強制終了されてしまう。

インターネットでいろいろ調べたが、

linux - Why does Slack return a Segmentation fault after Fedora 29 upgrade? - Stack Overflow

に対象法が書かれていた。

sudo mv /usr/lib/slack/libnode.so /usr/lib/slack/libnode.so.old
sudo ln -s /usr/share/atom/libnode.so /usr/lib/slack/libnode.so

 というコマンドを実行すると、なおった。

ちなみに、自分には

slack-3.3.3-0.1.fc21.x86_64

atom-1.32.0-0.1.x86_64

がインストールされていた。

Fedora 29でローカルリポジトリーを追加

Fedora 29にアップグレードした。しかし、カスタムRPMを入れると、dnf updateするたびにカスタムRPMを再度インストールするように促される。このままではdnf updateもできないため、いろいろ調べた。以下のURLに参考情報があった。

Bug 1644241 – dnf enforces reinstalling custom changed packages

現在はdnfのバグだが、直るまでの間ローカルリポジトリーを自分で作成しないといけないみたい。

ローカルリポジトリーを作成するのに、いかの手順で実施する。

1.フォルダー作成

自分は /var/local/fedora29/x86_64 を作成したが、/var/local の部分は変更可能。

2.カスタムRPMファイルのコピー

自分でビルドしたカスタムRPMファイルを /var/local/fedora29/x86_64/ にコピーする。

自分は

sudo install -m 644 *.rpm /var/local/fedora29/x86_64/

コマンドを使っていた。

ちなみに、自分はカスタムRPMは以下です。

      (1) unzip。 Windowsで作成されたzipファイルを解凍するためのオプションを追加

      (2) ibus-mozc。デフォルト入力モードをひらがなに変更

      (3) fbreader。コマンドラインからepubファイルを指定して実行する場合のクラッシュを修正

      (4) ffmpeg。fdk_aacの対応を有効にする

3.リポジトリーのメタデータファイル作成

よくわからないが、

sudo createrepo -u file:///var/local/fedora29/x86_64/ /var/local/fedora29/x86_64/

コマンドを実行して、動いた。オプションが正しくないかもしれない。

4./etc/yum.repos.d/fedora-local.repo ファイルを追加

中身は以下のように設定

[fedora-local]
name=Local Fedora Repository
baseurl=file:///var/local/fedora$releasever/$basearch
failovermethod=priority
enabled=1
protect=0
priority=1
skip_if_unavailable=False

gpgcheck=0

今後にもFedora 30になっても使えるように、変数を使った。「priority=1」を指定することにより、fedorafedora-updatesのリポジトリーより優先的に使用される。

これで、カスタムRPMをインストールしてもdnfから再インストールを提示されることがなくなった。

Java 11でeclipse 4.7.3を実行する

Fedora 28のデフォルトJavaのバージョンを11に設定した。すると、eclipseが起動できなくなった。

ワークスペースの.metadata/.logを確認したら、以下のエラーが発生していた。

!ENTRY org.eclipse.recommenders.completion.rcp 4 11 2018-11-08 19:31:41.638!ENTRY org.eclipse.recommenders.completion.rcp 4 11 2018-11-08 19:31:41.638!MESSAGE Session processor ‘class org.eclipse.recommenders.internal.calls.rcp.CallCompletionSessionProcessor’ failed with exception.!STACK 0java.lang.NoClassDefFoundError: javax/annotation/PostConstruct at org.eclipse.recommenders.internal.rcp.RcpModule$Listener$1.afterInjection(RcpModule.java:278) at com.google.inject.internal.MembersInjectorImpl.notifyListeners(MembersInjectorImpl.java:119) at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:121) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:268) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:110) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:268) at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1019) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1085) at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1015) at org.eclipse.recommenders.internal.calls.rcp.CallCompletionSessionProcessor.findReceiverTypeAndModel(CallCompletionSessionProcessor.java:136) at org.eclipse.recommenders.internal.calls.rcp.CallCompletionSessionProcessor.startSession(CallCompletionSessionProcessor.java:111) at org.eclipse.recommenders.completion.rcp.processable.IntelligentCompletionProposalComputer.fireStartSession(IntelligentCompletionProposalComputer.java:305) at org.eclipse.recommenders.completion.rcp.processable.IntelligentCompletionProposalComputer.computeCompletionProposals(IntelligentCompletionProposalComputer.java:171) at org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor.computeCompletionProposals(CompletionProposalComputerDescriptor.java:333) at org.eclipse.jdt.internal.ui.text.java.CompletionProposalCategory.computeCompletionProposals(CompletionProposalCategory.java:337) at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.collectProposals(ContentAssistProcessor.java:331) at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.computeCompletionProposals(ContentAssistProcessor.java:288) at org.eclipse.jface.text.contentassist.ContentAssistant$3.run(ContentAssistant.java:2007) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.jface.text.contentassist.ContentAssistant.computeCompletionProposals(ContentAssistant.java:2004) at org.eclipse.jface.text.contentassist.CompletionProposalPopup.computeProposals(CompletionProposalPopup.java:560) at org.eclipse.jface.text.contentassist.CompletionProposalPopup.access$7(CompletionProposalPopup.java:555) at org.eclipse.jface.text.contentassist.CompletionProposalPopup$2.run(CompletionProposalPopup.java:489) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.jface.text.contentassist.CompletionProposalPopup.showProposals(CompletionProposalPopup.java:482) at org.eclipse.jface.text.contentassist.ContentAssistant$AutoAssistListener$1.run(ContentAssistant.java:377) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:37) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4577) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4186) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590) at org.eclipse.equinox.launcher.Main.run(Main.java:1499) at org.eclipse.equinox.launcher.Main.main(Main.java:1472)

インターネットでいろいろ調べてみて、以下のサイトに解決策が書かれていた。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=533390#c22

/usr/lib/eclipse/configuration/config.iniに以下の内容を追加すると、eclipseが起動できるようになった。

org.osgi.framework.system.packages = \
 javax.accessibility,\
 javax.activation,\
 javax.activity,\
 javax.crypto,\
 javax.crypto.interfaces,\
 javax.crypto.spec,\
 javax.imageio,\
 javax.imageio.event,\
 javax.imageio.metadata,\
 javax.imageio.plugins.bmp,\
 javax.imageio.plugins.jpeg,\
 javax.imageio.spi,\
 javax.imageio.stream,\
 javax.jws,\
 javax.jws.soap,\
 javax.lang.model,\
 javax.lang.model.element,\
 javax.lang.model.type,\
 javax.lang.model.util,\
 javax.management,\
 javax.management.loading,\
 javax.management.modelmbean,\
 javax.management.monitor,\
 javax.management.openmbean,\
 javax.management.relation,\
 javax.management.remote,\
 javax.management.remote.rmi,\
 javax.management.timer,\
 javax.naming,\
 javax.naming.directory,\
 javax.naming.event,\
 javax.naming.ldap,\
 javax.naming.spi,\
 javax.net,\
 javax.net.ssl,\
 javax.print,\
 javax.print.attribute,\
 javax.print.attribute.standard,\
 javax.print.event,\
 javax.rmi,\
 javax.rmi.CORBA,\
 javax.rmi.ssl,\
 javax.script,\
 javax.security.auth,\
 javax.security.auth.callback,\
 javax.security.auth.kerberos,\
 javax.security.auth.login,\
 javax.security.auth.spi,\
 javax.security.auth.x500,\
 javax.security.cert,\
 javax.security.sasl,\
 javax.sound.midi,\
 javax.sound.midi.spi,\
 javax.sound.sampled,\
 javax.sound.sampled.spi,\
 javax.sql,\
 javax.sql.rowset,\
 javax.sql.rowset.serial,\
 javax.sql.rowset.spi,\
 javax.swing,\
 javax.swing.border,\
 javax.swing.colorchooser,\
 javax.swing.event,\
 javax.swing.filechooser,\
 javax.swing.plaf,\
 javax.swing.plaf.basic,\
 javax.swing.plaf.metal,\
 javax.swing.plaf.multi,\
 javax.swing.plaf.nimbus,\
 javax.swing.plaf.synth,\
 javax.swing.table,\
 javax.swing.text,\
 javax.swing.text.html,\
 javax.swing.text.html.parser,\
 javax.swing.text.rtf,\
 javax.swing.tree,\
 javax.swing.undo,\
 javax.tools,\
 javax.xml,\
 javax.xml.bind,\
 javax.xml.bind.annotation,\
 javax.xml.bind.annotation.adapters,\
 javax.xml.bind.attachment,\
 javax.xml.bind.helpers,\
 javax.xml.bind.util,\
 javax.xml.crypto,\
 javax.xml.crypto.dom,\
 javax.xml.crypto.dsig,\
 javax.xml.crypto.dsig.dom,\
 javax.xml.crypto.dsig.keyinfo,\
 javax.xml.crypto.dsig.spec,\
 javax.xml.datatype,\
 javax.xml.namespace,\
 javax.xml.parsers,\
 javax.xml.soap,\
 javax.xml.stream,\
 javax.xml.stream.events,\
 javax.xml.stream.util,\
 javax.xml.transform,\
 javax.xml.transform.dom,\
 javax.xml.transform.sax,\
 javax.xml.transform.stax,\
 javax.xml.transform.stream,\
 javax.xml.validation,\
 javax.xml.ws,\
 javax.xml.ws.handler,\
 javax.xml.ws.handler.soap,\
 javax.xml.ws.http,\
 javax.xml.ws.soap,\
 javax.xml.ws.spi,\
 javax.xml.ws.spi.http,\
 javax.xml.ws.wsaddressing,\
 javax.xml.xpath,\
 org.ietf.jgss,\
 org.omg.CORBA,\
 org.omg.CORBA_2_3,\
 org.omg.CORBA_2_3.portable,\
 org.omg.CORBA.DynAnyPackage,\
 org.omg.CORBA.ORBPackage,\
 org.omg.CORBA.portable,\
 org.omg.CORBA.TypeCodePackage,\
 org.omg.CosNaming,\
 org.omg.CosNaming.NamingContextExtPackage,\
 org.omg.CosNaming.NamingContextPackage,\
 org.omg.Dynamic,\
 org.omg.DynamicAny,\
 org.omg.DynamicAny.DynAnyFactoryPackage,\
 org.omg.DynamicAny.DynAnyPackage,\
 org.omg.IOP,\
 org.omg.IOP.CodecFactoryPackage,\
 org.omg.IOP.CodecPackage,\
 org.omg.Messaging,\
 org.omg.PortableInterceptor,\
 org.omg.PortableInterceptor.ORBInitInfoPackage,\
 org.omg.PortableServer,\
 org.omg.PortableServer.CurrentPackage,\
 org.omg.PortableServer.POAManagerPackage,\
 org.omg.PortableServer.POAPackage,\
 org.omg.PortableServer.portable,\
 org.omg.PortableServer.ServantLocatorPackage,\
 org.omg.SendingContext,\
 org.omg.stub.java.rmi,\
 org.w3c.dom,\
 org.w3c.dom.bootstrap,\
 org.w3c.dom.css,\
 org.w3c.dom.events,\
 org.w3c.dom.html,\
 org.w3c.dom.ls,\
 org.w3c.dom.ranges,\
 org.w3c.dom.stylesheets,\
 org.w3c.dom.traversal,\
 org.w3c.dom.views,\
 org.w3c.dom.xpath,\
 org.xml.sax,\
 org.xml.sax.ext,\
 org.xml.sax.helpers

 

Fedoraで日本語manページを確認する

自分はデフォルト言語をen_USと使っているため、manページを見るときにはすべて英語になってしまう。以前は

env LANG=ja_JP.UTF-8 man xxx

コマンドで日本語manページが見れたが、最近は英語のままになっている。

いろいろ調べたら、LANGではなく、LC_ALLと設定すべきだった。

またいつの間にか「ja_JP.UTF-8」が「ja_JP.utf8」になっている。そのため、コマンドは

env LC_ALL=ja_JP.utf8 man xxx

とすべきだった。

Db2インポート時SQL3550Wになったとき

エクスポートしたデータをインポートするときが来ました。

hanaokaiwa.hatenablog.jp

以前このようにエクスポート時SQL2473Nエラーのときの対処法を記録したが、インポート時も同じエラーになり、同じ

modified by implicitlyhiddeninclude

 オプションを付ければ、動いた。

しかし、また以下のエラーが発生した。

SQL3550W 行 "1"、列 "16" のフィールド値は NULL
ではありませんが、ターゲット列は GENERATED ALWAYS として定義されています。

インターネットでいろいろ調べたら、以下のサイトが参考になった。

Generated(生成)列が定義されているDB2テーブルのデータ移動についての解説

identityignore はIDENTITY項目を無視するオプション

generatedignore はGENERATED項目を無視するオプション

今回自分の場合は「generatedignore」を使う。ちなみに、「identitymissing」と「generatedmissing」はエクスポート時にあらかじめIDENTITY項目かGENERATED項目を除外したデータをインポートするときに使うオプションです。

最終的にインポート文は

import from file.csv of del modified by generatedignore implicitlyhiddeninclude replace into table

 になった。青字は適宜に変更する。

SQLでN労働日後の日付を計算

SQLでN労働日後の日付を計算してみたため、記録のためやったことをまとめた。

前提となるテーブルは以下

CREATE TABLE CALENDAR (

DATE DATE NOT NULL,

IS_WORKING CHAR(1) NOT NULL WITH DEFAULT '',

PRIMARY KEY ( DATE ) )

 CALENDARテーブルに日付と労働日かどうかのIS_WORKINGが定義されている。

1. 指定された日付のN労働日後の日付を取得するSQL

SELECT MAX(DATE) FROM (

     SELECT DATE

     FROM CALENDAR

     WHERE

        DATE > '基準日付'

        AND IS_WORKING = '1'

     ORDER BY DATE ASC

     FETCH FIRST N+1 ROWS ONLY)

 2. 直近5年分の日付一覧とそのN労働日後の日付のペアを取得するSQL

SELECT T1.DATE AS BEFORE_DATE, T2.DATE AS AFTER_DATE 

FROM CALENDAR AS T1

INNER JOIN CALENDAR AS T2

    ON (T2.IS_WORKING = '1'

        AND T2.DATE > T1.DATE)

INNER JOIN CALENDAR AS T3

    ON (T3.IS_WORKING = '1'

        AND T3.DATE > T1.DATE

        AND T3.DATE <= T2.DATE)

WHERE

    T1.DATE <= CURRENT_DATE

    AND T1.DATE > CURRENT_DATE - 5 YEARS

GROUP BY T1.DATE, T2.DATE

HAVING COUNT(T3.DATE) = N+1

ただし、このSQLが重すぎるため、私のローカルでは実行時間が455秒以上になってしまう。

いろいろ調べて、ROW_NUMBER()を利用した改善版SQLは以下

SELECT T21.DATE AS BEFORE_DATE, T22.DATE AS AFTER_DATE

FROM

    (SELECT T01.DATE, MIN(T02.ROW_NUMBER) AS ROW_NUMBER

    FROM CALENDAR AS T01

    INNER JOIN (SELECT DATE, ROW_NUMBER() OVER (ORDER BY DATE ASC) AS ROW_NUMBER FROM CALENDAR WHERE IS_WORKING = '1') AS T02
        ON T02.DATE > T01.DATE
    GROUP BY T01.DATE) AS T21
INNER JOIN (SELECT DATE, ROW_NUMBER() OVER (ORDER BY DATE ASC) AS ROW_NUMBER FROM CALENDAR WHERE IS_WORKING = '1') AS T22
    ON T21.ROW_NUMBER = T22.ROW_NUMBER - N

WHERE

    T21.DATE <= CURRENT_DATE

    AND T21.DATE > CURRENT_DATE - 5 YEARS

 こちらのSQLはローカルで1秒以内で終わっている。

p12ファイルをpemファイルとkeyファイルへの変換

p12ファイルをpemファイルとkeyファイルへ変換したいが、インターネットでやり方を見つかった。参考となるURLは以下:

command - Converting PKCS#12 certificate into PEM using OpenSSL - Stack Overflow

実行するのは以下のコマンドです。

openssl pkcs12 -in input.p12 -out output.pem -clcerts -nokeys
openssl pkcs12 -in input.p12 -out output.key -nocerts -nodes

覚えにくいコマンドだな。