1. leht 1-st

openSUSE Leap 16.0 ja ID-kaart

Postitatud: 26.12.2025, 14:11
Postitas mait
ID-kaardi tarkvara kompileerimine lõpeb kohe libdigidoc juures alguses üllatusliku veateatega:

Kood: Vali kõik

 
			    	/libdigidoc/DigiDocError.c:588:16: error: conflicting types for ‘checkUnknownErr’; have ‘int(SignedDoc *)’ {akaint(struct SignedDoc_st *)’}
  588 | EXP_OPTION int checkUnknownErr(SignedDoc* pSigDoc)
Alliktekstid on aastast 2019 ja võiks ju ära kompileerida. Varem pole sellega kunagi probleeme olnud.



Järgnev võiks olla üks lahendus, kuidas ID-kaardiga dokumendi allkirjastamise OpenSUSE Leap 16.0 peal käima saab. Alustada saab peale opsüsteemi paigaldust. Muuseas, pakihaldur myrlyn on tüütu, sest sulgeb end iga kord peale paigalduse lõppu ja kui on vaja katseliselt järjest lisada, siis tuleb jälle teda uuesti käivitada. Klassikaline yast on parem, aga see tuleb eraldi paigaldada ja käima läheb ainult tekstimoodis xterm-s käsurealt.

Esmalt vaja paigaldada opensc, kaardilugejate draiverid ja arenduspaketid (*devel) ja muid pakke tuleb edaspidi järjest vajadusel lisada :

Kood: Vali kõik

+ libeac3, opensc, opensc-bash-completion.
+ pcsc-lite
+ pcsc-lite-devel 
+ pcsc-ccid 
+ pkcs11-(tool)
.


Nüüd pcscd teenusele restart:

Kood: Vali kõik

% sudo systemctl stop pcscd
% sudo systemctl stop pcscd.socket
% sudo systemctl start pcscd


... USB-kaardilugeja sisse ja testida, kas tunneb kaarti:

Kood: Vali kõik

% opensc-tool -l 
	# Detected readers (pcsc)
	Nr.  Card  Features  Name
	0    No              Gemalto PC Twin Reader (131F78C1) 00 00
.
Sisemist lugejat ei näita.
Aga kui ID-kaart sai sisse pandud, siis

Kood: Vali kõik

 % opensc-tool -l
 # Detected readers (pcsc)
 	Nr.  Card  Features  Name
	0    Yes             Alcor Micro AU9540 00 00
	1    No              Gemalto PC Twin Reader (131F78C1) 01 00
.

Kontrolliks veel:

Kood: Vali kõik

 % pkcs11-tool -L
	Available slots:
	Slot 0 (0x0): Alcor Micro AU9540 00 00
	token label        : annab nime ja muud
	======== toimib  =======================
.


Nüüd keerulisem osa ehk allkirjastamiseks ID-kaardi tarkvara ehitamine.

Alliktekstid tuleb tõmmata esmalt GitHub-st (git clone --recursive ...).

(1) * libdigidoc *
Tahab hulka lisasid ja lõpuks cmake lõpetab esimeses postituses näidatud veaga.


CMakeLists.txt failis prooviks sai tehtud netiõpetuste järgi lisandusi, kas ja mis neist lõpuks mõjus, jäi testimata (sest esimene keeruline lahendus tuli isekompileeritud gcc-11 abil):

Kood: Vali kõik

cmake_policy(VERSION 3.00)
	
  	set(CMAKE_CXX_STANDARD 11)
	set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
	set(CMAKE_CXX_STANDARD_REQUIRED ON)

	include(CheckCXXCompilerFlag)
	CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
	CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
	if(COMPILER_SUPPORTS_CXX11)
	    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
	elseif(COMPILER_SUPPORTS_CXX0X)
	    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
	else()
	        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
	endif()

        % cd cmake
  	% cmake -D CMAKE_C_COMPILER=gcc-13  ../
  	% make



Siis jõuab openssl-i teegini ja lõpetab veaga:

Kood: Vali kõik

  libdigidoc/libdigidoc/DigiDocOCSP.c:983:37: error: ‘OCSP_R_SERVER_RESPONSE_PARSE_ERROR’ undeclared (first use in this function); did you mean ‘OCSP_R_SERVER_READ_ERROR’?
  	 983 |     OCSPerr(OCSP_F_OCSP_SENDREQ_BIO,OCSP_R_SERVER_RESPONSE_PARSE_ERROR); 

Konstant OCSP_R_SERVER_RESPONSE_PARSE_ERROR on puudu. Sarnased OCSP_R_* definitsioonid on failis ocsperr.h.
Paneme netis olevast vanemast ocsperr.h versioonist masina /usr/include/openssl/ocsperr.h faili:

Kood: Vali kõik

	  		#  define OCSP_R_SERVER_RESPONSE_ERROR                     114
			#  define OCSP_R_SERVER_RESPONSE_PARSE_ERROR               115

ja DigiDocOCSP.c päisesse

Kood: Vali kõik

 #include <openssl/ocsperr.h>
.

Nüüd võiks saada ära teha make käsu ja kompileerida paki.


Kui ei tee või ei saa üle sellest postituses alguses näidatud veast, siis tuleb minna keerulist teed ja paigaldada gcc-11 kompilaator.
Ma kompileerisin ise sellest gcc11-11.5.0+git3328-2.1.src.rpm. Kompilaator kompileerimisel tuleb arvestada, kui OpenSUSE 16.0 on jäetud 64-bitiseks (nii nagu ta on) - soovituse selleks gcc-11 make annab ise.

Kui gcc-11 on tehtud ja make installiga paigaldatud, siis saab hakata uuesti proovima libdigidoc-i kompileerimist nii:

Kood: Vali kõik

 cmake -D CMAKE_C_COMPILER=/usr/local/bin/gcc -D CMAKE_CXX_COMPILER=/usr/local/bin/g++ ../ 

ja päris palju tuleb tegeleda teekide otsinguteedega (lisada viidad ja kaustad, millest gcc-11 ja ld otsivad).

Tuleb jälgida, et millist kompilaatorit kasutatakse väljakutsetel (% gcc --version).
Katsetamisel on vaja cmake kaustast kõik peale "modules" kataloogi ära kustutada enne uut proovimist.

Otsinguteede sättimisel (kui cmake ei tee teste läbi) oli abiks netist leitud soovitused:

Kood: Vali kõik

 % ld --verbose | grep SEARCH_DIR | tr -s ' ;' \\012 

ja

Kood: Vali kõik

 gcc -print-search-dirs | sed '/^lib/b 1;d;:1;s,/[^/.][^/]*/\.\./,/,;t 1;s,:[^=]*=,:;,;s,;,;  ,g' | tr \; \\012 
.

Lõpuks saab tehtud :

Kood: Vali kõik

 
       % cd cmake
       % cmake -D CMAKE_C_COMPILER=/usr/local/bin/gcc -D CMAKE_CXX_COMPILER=/usr/local/bin/g++ ../
       % make
       % make install 
.



(2) * libdigidocpp *

Kood: Vali kõik

 % cmake ../ 

Vaja on lisapakette paigaldada.

Kood: Vali kõik

 % make 

Annab veateate "cannot find -lltdl:"

Lisada tuli libtool (A Tool to Build Shared Libraries)
[100%] Built target digidoc_csharp

# Lõpuks

Kood: Vali kõik

 % make install


(3) * digidoc klient4 DigiDoc4-Client *

Kood: Vali kõik

 % cmake ../

Tahtis ldap ja QT komplekt ( qt6-base-devel, qt6-svg-devel, qt6-linguist-devel, flatbuffers-devel).

Kood: Vali kõik

 % make 

[100%] Linking CXX executable qdigidoc4
[100%] Built target qdigidoc4

Kood: Vali kõik

 % make install 


Ja prooviks

Kood: Vali kõik

 % /usr/local/bin/qdigidoc4 

Läheb käima ja saab allkirjastada dokumendi.

Info lehel annab:

Kood: Vali kõik

 Keeleseaded: Estonian / et_EE.UTF-8

		Rakenduse versioon: 4.10.0.0 (64 bit)
		Operatsioonisüsteem: openSUSE Leap 16.0 (x86_64/x86_64)
		Protsessor: Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
		Tuum: Linux 6.12.0-160000.8-default #1 SMP PREEMPT_DYNAMIC Thu Dec 11 09:18:13 UTC 2025 (5d31a95) x86_64

		Teegid:
		QT (6.9.1)
		OpenSSL build (OpenSSL 3.5.0 8 Apr 2025)
		OpenSSL current (OpenSSL 3.5.0 8 Apr 2025)
		libpcsclite1 (2.0.1)
		pcsc-lite (2.0.1)
		opensc (0.26.1)


(4) FireFox-i seadistus ja veebis allkirjastamine.
FF-l oli kohe olemas Web-eID (13. juuni 2023, Ver 2.2.1).

Tavaline FF-i kontroll esmalt.

Xterm-s käsurealt teegi olemasolu kontroll:

Kood: Vali kõik

 % dir /usr/lib64/onepin-opensc-pkcs11.so
	  lrwxrwxrwx. 1 root root 16 14. jaan   2025 /usr/lib64/onepin-opensc-pkcs11.so -> opensc-pkcs11.so


FF-i durvaseadete all oli viide /usr/lib64/onepin-opensc-pkcs11.so.
ID-kaart lugejasse ja FF-i seadistuse all katseks <Sisselogimine>.
Leiab üles ID-kaardi ja küsib PIN1. Näitab, et on sees. <Logi välja>.


Nüüd web-eid rakenduse kompileerimine ja paigaldus.

Kood: Vali kõik

 % cd <alliktekstid/>web-eid-app
 	   % sh test.sh 

... paigaldada on vaja GTest jm.
... ehitab ....
100% tests passed, 0 tests failed out of 4

Kood: Vali kõik

 % cd build
	   % make install
		[100%] Built target web-eid-tests
		Install the project...
		-- Install configuration: "RelWithDebInfo"		
		
		-- Installing: /usr/local/bin/web-eid
		-- Installing: /usr/local/lib64/mozilla/native-messaging-hosts/eu.webeid.json
		-- Installing: /usr/local/share/web-eid/eu.webeid.json
		-- Installing: /usr/local/etc/chromium/native-messaging-hosts/eu.webeid.json
		-- Installing: /usr/local/etc/opt/chrome/native-messaging-hosts/eu.webeid.json
		-- Installing: /usr/local/share/google-chrome/extensions/ncibgoaomkmdpilpocfeponihegamlic.json
		-- Installing: /usr/local/share/chromium/extensions/ncibgoaomkmdpilpocfeponihegamlic.json
		-- Installing: /usr/local/share/applications/web-eid.desktop
		-- Installing: /usr/local/share/icons/hicolor/16x16/apps/web-eid.png
		-- Installing: /usr/local/share/icons/hicolor/32x32/apps/web-eid.png
		-- Installing: /usr/local/share/icons/hicolor/128x128/apps/web-eid.png
		-- Installing: /usr/local/share/icons/hicolor/256x256/apps/web-eid.png					
		-- Installing: /usr/local/share/icons/hicolor/512x512/apps/web-eid.png
		


Prooviks FF-s https://eesti.ee.
= Kasutaja tuvastamine ebaõnnestus.

OpenSUSE Leap 15.5 kogemusest on teada, et mõned failid tuleb pärast käsitsi õigesse kausta kopeerida.

Vaja oli leida <alliktekstid/>web-eid-app kataloogipuust ja paigaldada (kopeerida) käsitsi failid:

Kood: Vali kõik

 /etc/opt/chrome/native-messaging-hosts/eu.webeid.json
			/usr/lib64/mozilla/native-messaging-hosts/eu.webeid.json
			/opt/google/chrome/extensions/ncibgoaomkmdpilpocfeponihegamlic.json


FireFox restart ja prooviks https://eesti.ee
PIN1 toimib.
PIN2 toimib ka pangas.
Tehtud!

Postitatud: 30.12.2025, 21:06
Postitas acrux
Hea töö!
Tundub aga, et keegi hea inimene pakendab ID kaardi tarkvara päris mitmele distributsioonile, sealhulgas ka Leap 16-le:
https://download.opensuse.org/repositor ... /open-eid/