Failed to encrypt service certificate password | Unable to start debug service | Debugger 2.0.0
Hi,
I'm Unable to install remote certificates for Debug Service. I'm getting the below error.
Note:
- I have setup BASH as my default terminal in my .profile file
- Currently running Debugger 2.0.0 so I have installed java-11 via yum and setup the JAVA_HOME env variable (in my .profile file) as well to point the java-11 instead of java-8.
| Context | Version |
|---|---|
| Code for IBM i version | 2.11.0 |
| Visual Studio Code version | 1.90.2 |
| Operating System | win32_x64 |
Active extensions
COBOL (cobol): 10.6.17
Code for IBM i Walkthroughs (vscode-ibmi-walkthroughs): 0.5.0
Db2 for IBM i (vscode-db2i): 1.0.0
Emmet (emmet): 1.0.0
Error Lens (errorlens): 3.20.0
Extension Authoring (extension-editing): 1.0.0
Git (git): 1.0.0
Git Base (git-base): 1.0.0
GitHub (github): 0.0.1
GitHub Authentication (github-authentication): 0.0.2
GitHub Pull Requests (vscode-pull-request-github): 0.90.0
IBM i Debug (ibmidebug): 2.0.1
IBM i Notebooks (vscode-ibmi-notebooks): 0.0.6
IBM i Project Explorer (vscode-ibmi-projectexplorer): 2.10.5
JSON Language Features (json-language-features): 1.0.0
Live Server (LiveServer): 5.7.9
Markdown All in One (markdown-all-in-one): 3.6.2
Markdown Language Features (markdown-language-features): 1.0.0
Markdown Math (markdown-math): 1.0.0
Markdown Preview Enhanced (markdown-preview-enhanced): 0.8.13
Merge Conflict (merge-conflict): 1.0.0
NPM support for VS Code (npm): 1.0.1
Node Debug Auto-attach (debug-auto-launch): 1.0.0
RPGLE (vscode-rpgle): 0.26.7
Server Ready Action (debug-server-ready): 1.0.0
TODO Highlight (vscode-todo-highlight): 1.0.5
TypeScript and JavaScript Language Features (typescript-language-features): 1.0.0
Remote system
| Setting | Value |
|---|---|
| IBM i OS | V7R4M0 |
| Tech Refresh | 10 |
| CCSID Origin | 65535 |
| Runtime CCSID | 65535 |
| Default CCSID | 37 |
| SQL | Enabled |
| Source dates | Disabled |
Enabled features
| /usr/bin | /QOpenSys/pkgs/bin | /QSYS.LIB | /QIBM/ProdData/IBMiDebugService/bin |
|---|---|---|---|
| attr | bash | QZDFMDB2.PGM | startDebugService.sh |
| iconv | chsh | ||
| setccsid | ls | ||
| tar | md5sum | ||
| sort | |||
| stat |
Shell env
BUILDLIB=QGPL
CURLIB=QGPL
HOME=/home/CECUSER
HOST=129.40.94.217
LIBLS=QTEMP QGPL
LOGIN=cecuser
LOGNAME=cecuser
MAIL=/var/spool/mail/cecuser
OLDPWD=/home/CECUSER
PASE_USRGRP_LIMITED=N
PATH=/QOpenSys/usr/bin:/usr/ccs/bin:/QOpenSys/usr/bin/X11:/usr/sbin:.:/usr/bin
PWD=/home/CECUSER
SHELL=/QOpenSys/pkgs/bin/bash
SHLVL=1
SSH_CLIENT=198.18.0.129 50959 22
SSH_CONNECTION=198.18.0.129 50959 129.40.94.217 22
TZ=<EST>5<EDT>,M3.2.0,M11.1.0
USER=cecuser
USERNAME=cecuser
WORKDIR=/home/CECUSER
_=/QOpenSys/usr/bin/env
Variants
{
"american": "#@$",
"local": "#@$"
}
Errors
[
{
"command": "/QOpenSys/usr/bin/qsh",
"code": 1,
"stderr": "CPF3012: File DIS in library *LIBL not found.",
"cwd": "/home/CECUSER"
},
{
"command": "/QOpenSys/usr/bin/qsh",
"code": 1,
"stderr": "CPF3012: File DISPLAY in library *LIBL not found.",
"cwd": "/home/CECUSER"
},
{
"command": "/QOpenSys/usr/bin/qsh",
"code": 1,
"stderr": "CPD0012: Characters in qualifier beginning 'CTL-OPT) O' not valid.\nCPF0001: Error found on *N command.",
"cwd": "/home/CECUSER"
}
]
Can you share your Code for IBM i output content after this message shows up?
Thank you for the quick response, @sebjulliand
I have given the full output messages below. Might be an overload of information, but I don't know which information you're looking after.
Output
.: echo "This should be the only text!"
{
"code": 0,
"signal": null,
"stdout": "This should be the only text!",
"stderr": ""
}
.: echo $HOME && cd && test -w $HOME
{
"code": 0,
"signal": null,
"stdout": "/home/CECUSER",
"stderr": ""
}
/home/CECUSER: /QOpenSys/usr/bin/qsh
liblist
{
"code": 0,
"signal": null,
"stdout": "QSYS SYS\nQSYS2 SYS\nQHLPSYS SYS\nQUSRSYS SYS\nQSHELL PRD\nQGPL USR\nQTEMP USR",
"stderr": ""
}
/home/CECUSER: /QOpenSys/usr/bin/qsh
system "CRTLIB LIB(ILEDITOR) TEXT('Code for i temporary objects. May be cleared.')"
{
"code": 1,
"signal": null,
"stdout": "",
"stderr": "CPF2111: Library ILEDITOR already exists."
}
/home/CECUSER: [ -d "/tmp" ]
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: echo $SHELL
{
"code": 0,
"signal": null,
"stdout": "/QOpenSys/pkgs/bin/bash",
"stderr": ""
}
/home/CECUSER: rm -rf /tmp/code4itempO_d5MppUkbtBz6YbAt4VuN && mkdir -p /tmp/code4itempO_d5MppUkbtBz6YbAt4VuN
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/: /QOpenSys/usr/bin/qsh
system "RUNSQLSTM SRCSTMF('/tmp/code4itempO_d5MppUkbtBz6YbAt4VuN/getnewlibl.sql') COMMIT(*NONE) NAMING(*SQL)"
{
"code": 0,
"signal": null,
"stdout": "5770SS1 V7R4M0 190621 Run SQL Statements GETNEWLIBL 06/26/24 06:28:26 PAGE 1\n Source stream file......../tmp/code4itempO_d5MppUkbtBz6YbAt4VuN/getnewlibl.sql\n Target release............V7R4M0\n Commit....................*NONE\n Naming....................*SQL\n Generation level..........10\n Date format...............*JOB\n Date separator............*JOB\n Time format...............*HMS\n Time separator ...........*JOB\n Right margin..............80\n Default collection........*NONE\n IBM SQL flagging..........*NOFLAG\n ANS flagging..............*NONE\n Decimal point.............*JOB\n Sort sequence.............*JOB\n Language ID...............*JOB\n Printer file..............*LIBL/QSYSPRT\n Source file CCSID.........1208\n Job CCSID.................65535\n Statement processing......*RUN\n Allow copy of data........*OPTIMIZE\n Allow blocking............*ALLREAD\n SQL rules.................*DB2\n Decimal result options:\n Maximum precision.......31\n Maximum scale...........31\n Minimum divide scale....0\n Concurrent access\n resolution..............*DFT\n System time sensitive.....*YES\n Source member changed on 06/26/24 06:28:24\n 5770SS1 V7R4M0 190621 Run SQL Statements GETNEWLIBL 06/26/24 06:28:26 PAGE 2\n Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change\n 1 CREATE OR REPLACE PROCEDURE ILEDITOR.GETNEWLIBL(IN COMMAND VARCHAR(2000))\n 2 DYNAMIC RESULT SETS 1\n 3 BEGIN\n 4 DECLARE clibl CURSOR FOR\n 5 SELECT ORDINAL_POSITION, TYPE as PORTION, SYSTEM_SCHEMA_NAME\n 6 FROM QSYS2.LIBRARY_LIST_INFO;\n 7 CALL QSYS2.QCMDEXC(COMMAND);\n 8 OPEN clibl;\n 9 END;\n 10\n 11 call QSYS2.QCMDEXC( 'grtobjaut ILEDITOR/GETNEWLIBL *PGM *PUBLIC *ALL' );\n * * * * * E N D O F S O U R C E * * * * *\n 5770SS1 V7R4M0 190621 Run SQL Statements GETNEWLIBL 06/26/24 06:28:26 PAGE 3\n Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change\n MSG ID SEV RECORD TEXT\n SQL7989 0 1 Position 1 Procedure GETNEWLIBL was created in ILEDITOR.\n SQL7985 0 11 Position 1 CALL statement complete.\n Message Summary\n Total Info Warning Error Severe Terminal\n 2 2 0 0 0 0\n 00 level severity errors found in source\n * * * * * E N D O F L I S T I N G * * * * *",
"stderr": "CPD4090: Printer device PRT01 not found. Output queue changed to QPRINT in library QGPL.\nCPC7301: File QSQLSRC created in library QTEMP.\nCPC7303: File QSQLSRC in library QTEMP changed.\nCPC7305: Member GETNEWLIBL added to file QSQLSRC in QTEMP.\nCPC7301: File QSQLT00000 created in library QTEMP.\nCPC7305: Member GETNEWLIBL added to file QSQLT00000 in QTEMP.\nCZS0607: Module GETNEWLIBL was created in library QTEMP on 06/26/24 at 06:28:27.\nCPC5D07: Program GETNEWLIBL created in library ILEDITOR.\nCPC2191: Object GETNEWLIBL in QTEMP type *MODULE deleted.\nCPI2201: Authority given to user *PUBLIC for object GETNEWLIBL in ILEDITOR object type *PGM.\nCPC2201: Object authority granted."
}
/home/CECUSER: rm -rf /tmp/code4itempO_d5MppUkbtBz6YbAt4VuN
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_BZPBB AS (select LONG_COMMENT from qsys2.sysroutines where routine_schema = 'ILEDITOR' and routine_name = 'GETMBRINFO') WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_BZPBB *FIRST) TOSTMF(''/tmp/vscodetemp-O_OdQncnHU'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_OdQncnHU"
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_ZK319 AS (select job_name, local_port from qsys2.netstat_job_info where cast(local_port_name as VarChar(14) CCSID 37) = 'is-debug-ile' fetch first row only) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_ZK319 *FIRST) TOSTMF(''/tmp/vscodetemp-O_Gfkji5xQ'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_BWRGF AS (select OS_VERSION concat '.' concat OS_RELEASE as VERSION from sysibmadm.env_sys_info) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_BWRGF *FIRST) TOSTMF(''/tmp/vscodetemp-O_zIizYQPT'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
/home/CECUSER: test -r /QIBM/ProdData/IBMiDebugService/package.json
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: test -r /QIBM/ProdData/IBMiDebugService/package.json
/home/CECUSER: test -r /QIBM/ProdData/IBMiDebugService/package.json
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_zIizYQPT"
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_A1HHX AS (select max(ptf_group_level) as HIGHEST_DB2_PTF_GROUP_LEVEL from qsys2.group_ptf_info where PTF_GROUP_DESCRIPTION like 'DB2 FOR IBM I%' and ptf_group_status = 'INSTALLED') WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_A1HHX *FIRST) TOSTMF(''/tmp/vscodetemp-O_hhEj8uat'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_Gfkji5xQ"
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_SYBUM AS (select distinct job_name, local_port from qsys2.netstat_job_info j where job_name = (select job_name from qsys2.netstat_job_info j where local_port = 8005 and remote_address = '0.0.0.0' fetch first row only)) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_SYBUM *FIRST) TOSTMF(''/tmp/vscodetemp-O_nNkACSv9'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_IDFIQ AS (select job_name, local_port from qsys2.netstat_job_info where cast(local_port_name as VarChar(14) CCSID 37) = 'is-debug-ile' fetch first row only) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_IDFIQ *FIRST) TOSTMF(''/tmp/vscodetemp-O_C8W5XVX8'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_hhEj8uat"
/home/CECUSER: ls $HOME/.vscode/codeforiserver-1.4.9.jar
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_nNkACSv9"
/home/CECUSER: test -f /QIBM/UserData/IBMiDebugService/certs/debug_service.pfx
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "/home/CECUSER/.vscode/codeforiserver-1.4.9.jar",
"stderr": ""
}
/home/CECUSER: echo $SHELL
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 1,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: test -f /QIBM/UserData/IBMiDebugService/certs/debug_service.crt
{
"code": 0,
"signal": null,
"stdout": "/QOpenSys/pkgs/bin/bash",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_C8W5XVX8"
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_GLCDX AS (select distinct job_name, local_port from qsys2.netstat_job_info j where job_name = (select job_name from qsys2.netstat_job_info j where local_port = 8005 and remote_address = '0.0.0.0' fetch first row only)) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_GLCDX *FIRST) TOSTMF(''/tmp/vscodetemp-O_14DAnwH9'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: test -f /QIBM/UserData/IBMiDebugService/.code4i.debug
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 1,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: test -f /QIBM/ProdData/IBMiDebugService/bin/certs/debug_service.pfx
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
{
"code": 1,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_14DAnwH9"
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: test -f /QIBM/UserData/IBMiDebugService/certs/debug_service.pfx
{
"code": 1,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_OUI4J AS (select job_name, local_port from qsys2.netstat_job_info where cast(local_port_name as VarChar(14) CCSID 37) = 'is-debug-ile' fetch first row only) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_OUI4J *FIRST) TOSTMF(''/tmp/vscodetemp-O_QxtZ5T3J'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_QxtZ5T3J"
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_6QF7W AS (select distinct job_name, local_port from qsys2.netstat_job_info j where job_name = (select job_name from qsys2.netstat_job_info j where local_port = 8005 and remote_address = '0.0.0.0' fetch first row only)) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_6QF7W *FIRST) TOSTMF(''/tmp/vscodetemp-O_pkdDANnv'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_pkdDANnv"
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: test -f /QIBM/UserData/IBMiDebugService/certs/debug_service.pfx
{
"code": 1,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_NGGKS AS (select trim(coalesce(usr.special_authorities,'') concat ' ' concat coalesce(grp.special_authorities, '')) AUTHORITIES from qsys2.user_info_basic usr left join qsys2.user_info_basic grp on grp.authorization_name = usr.group_profile_name where usr.authorization_name = 'CECUSER') WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_NGGKS *FIRST) TOSTMF(''/tmp/vscodetemp-O_3bLkln5Y'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_3bLkln5Y"
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: mkdir -p /QIBM/UserData/IBMiDebugService/certs && chmod 755 /QIBM/UserData/IBMiDebugService/certs
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: hostname
{
"code": 0,
"signal": null,
"stdout": "p1292-pvm1.p1292.cecc.ihost.com",
"stderr": ""
}
/QIBM/UserData/IBMiDebugService/certs: openssl genrsa -out debug_service.key 2048 && openssl req -new -key debug_service.key -out debug_service.csr -subj '/CN=p1292-pvm1.p1292.cecc.ihost.com' && openssl x509 -req -in debug_service.csr -signkey debug_service.key -out debug_service.crt -days 1095 -sha256 -req -extfile <(printf "subjectAltName=DNS:p1292-pvm1.p1292.cecc.ihost.com,IP:129.40.94.217") && openssl pkcs12 -export -out debug_service.pfx -inkey debug_service.key -in debug_service.crt -password pass:O_RJwwx20Akgi7cTGw81IVKfb71AFsupbszEkNyIsr0vNlG0SGJ3 && rm debug_service.key debug_service.csr
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": "Certificate request self-signature ok\nsubject=CN = p1292-pvm1.p1292.cecc.ihost.com"
}
/QIBM/UserData/IBMiDebugService/certs: chmod 400 debug_service.pfx && chmod 444 debug_service.crt
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: export MY_JAVA_HOME="/QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit" && export DEBUG_SERVICE_KEYSTORE_PASSWORD="O_RJwwx20Akgi7cTGw81IVKfb71AFsupbszEkNyIsr0vNlG0SGJ3" && /QIBM/ProdData/IBMiDebugService/bin/encryptKeystorePassword.sh | /usr/bin/tail -n 1
{
"code": 0,
"signal": null,
"stdout": "JAVA_HOME=/QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit",
"stderr": ""
}
/home/CECUSER: test -r /QIBM/UserData/IBMiDebugService/key.properties
{
"code": 1,
"signal": null,
"stdout": "",
"stderr": ""
}
/QIBM/UserData/IBMiDebugService/certs: rm debug_service.pfx
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_GRM67 AS (select job_name, local_port from qsys2.netstat_job_info where cast(local_port_name as VarChar(14) CCSID 37) = 'is-debug-ile' fetch first row only) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_GRM67 *FIRST) TOSTMF(''/tmp/vscodetemp-O_ceISKupU'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_HJYEC AS (select job_name, local_port from qsys2.netstat_job_info where cast(local_port_name as VarChar(14) CCSID 37) = 'is-debug-ile' fetch first row only) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_HJYEC *FIRST) TOSTMF(''/tmp/vscodetemp-O_korhxy1d'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_ceISKupU"
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_HF26G AS (select distinct job_name, local_port from qsys2.netstat_job_info j where job_name = (select job_name from qsys2.netstat_job_info j where local_port = 8005 and remote_address = '0.0.0.0' fetch first row only)) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_HF26G *FIRST) TOSTMF(''/tmp/vscodetemp-O_xQ3qjZtk'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_korhxy1d"
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_DZE0A AS (select distinct job_name, local_port from qsys2.netstat_job_info j where job_name = (select job_name from qsys2.netstat_job_info j where local_port = 8005 and remote_address = '0.0.0.0' fetch first row only)) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_DZE0A *FIRST) TOSTMF(''/tmp/vscodetemp-O_XdpHJz2V'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_xQ3qjZtk"
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_XdpHJz2V"
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: test -f /QIBM/UserData/IBMiDebugService/certs/debug_service.pfx
{
"code": 1,
"signal": null,
"stdout": "",
"stderr": ""
}
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_VSVWS AS (select job_name, local_port from qsys2.netstat_job_info where cast(local_port_name as VarChar(14) CCSID 37) = 'is-debug-ile' fetch first row only) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_VSVWS *FIRST) TOSTMF(''/tmp/vscodetemp-O_QgWjdHx0'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_QgWjdHx0"
/home/CECUSER: LC_ALL=EN_US.UTF-8 system "call QSYS/QZDFMDB2 PARM('-d' '-i' '-t')"
Call QSYS2.QCMDEXC('CHGJOB CCSID(37)');
CREATE TABLE QTEMP.O_ADDVI AS (select distinct job_name, local_port from qsys2.netstat_job_info j where job_name = (select job_name from qsys2.netstat_job_info j where local_port = 8005 and remote_address = '0.0.0.0' fetch first row only)) WITH DATA;
Call QSYS2.QCMDEXC('CPYTOIMPF FROMFILE(QTEMP/O_ADDVI *FIRST) TOSTMF(''/tmp/vscodetemp-O_9nHJ7jT8'') MBROPT(*REPLACE) STMFCCSID(1208) RCDDLM(*CRLF) DTAFMT(*DLM) RMVBLANK(*TRAILING) ADDCOLNAM(*SQL) FLDDLM('','') DECPNT(*PERIOD)')
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
{
"code": 0,
"signal": null,
"stdout": "DB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.\nDB2>\n ?>\nDB20000I THE SQL COMMAND COMPLETED SUCCESSFULLY.",
"stderr": ""
}
/home/CECUSER: rm -rf "/tmp/vscodetemp-O_9nHJ7jT8"
{
"code": 0,
"signal": null,
"stdout": "",
"stderr": ""
}
OK, so it seems that this boils down to the encryption script failing to encrypt the password. Can you open a bash terminal and then run this:
export MY_JAVA_HOME="/QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit" && export DEBUG_SERVICE_KEYSTORE_PASSWORD="O_RJwwx20Akgi7cTGw81IVKfb71AFsupbszEkNyIsr0vNlG0SGJ3" && /QIBM/ProdData/IBMiDebugService/bin/encryptKeystorePassword.sh | /usr/bin/tail -n 1
I'm curious to see how it runs.
I installed java-11 via yum so it got installed in the below location.
/QOpenSys/pkgs/lib/jvm/openjdk-11
Do I need to change MY_JAVA_HOME variable to the location that you mentioned, or should I put the actual location that it got installed?
(Also, I looked into those shell scripts. If MY_JAVA_HOME variable is empty, then it will look for the version present in JAVA_HOME variable - which I already populated & exported in my .profile file)
The thing is Code for IBM i expects Java 11 to be installed through the PTF provided by IBM: https://www.ibm.com/support/pages/download-installation-and-usage-java-11-ibm-i-os
Even if you change or create a MY_JAVA_HOME environment variable, it will be overwritten by the encryption process.
I can think of two possible ways to fix this:
- Preferred: install Java 11 through its PTF
- Workaroud: create a symbolic link from
/QOpenSys/pkgs/lib/jvm/openjdk-11to/QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit...I can't be positive it will work though 😅
The preferred method won't work out for me as I can't do PTFs.
However, I will try experimenting with the workaround and provide you the update here.
Meanwhile, did we hardcode the java's path in the encryption process? If yes, then do we need to make change in the encryption code (?!) in order to look for JAVA in the defined location? I would also suggest allowing yum installation of JAVA-11 for the debug.
Meanwhile, did we hardcode the java's path in the encryption process? If yes, then do we need to make change in the encryption code (?!) in order to look for JAVA in the defined location? I would also suggest allowing yum installation of JAVA-11 for the debug.
It is hardcoded yes. So far, I don't know if yum's Java 11 is updated regularly or not. But we can ask IBM and depending on their recommandation, make a change to use this other Java 11 if the PTF's one is not available.
The preferred method won't work out for me as I can't do PTFs.
However, I will try experimenting with the workaround and provide you the update here.
Meanwhile, did we hardcode the java's path in the encryption process? If yes, then do we need to make change in the encryption code (?!) in order to look for JAVA in the defined location? I would also suggest allowing yum installation of JAVA-11 for the debug.
So, here is what I did.
- Created the directory tree as per PTF installation for Java-11
- Created a symbolic link in that folder to point the
yuminstallation of java-11 - Modified my
.profilefile to include the path of the PTF installation for Java-11
Below is my .profile file
And yet, it didn't work. May be we need to fiddle with the correct symlink structure? Could you please do an
ls /QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit
and show me the contents of that folder? I'll try to match the same contents with my symlink test and try again?
OK, so it seems that this boils down to the encryption script failing to encrypt the password. Can you open a bash terminal and then run this:
export MY_JAVA_HOME="/QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit" && export DEBUG_SERVICE_KEYSTORE_PASSWORD="O_RJwwx20Akgi7cTGw81IVKfb71AFsupbszEkNyIsr0vNlG0SGJ3" && /QIBM/ProdData/IBMiDebugService/bin/encryptKeystorePassword.sh | /usr/bin/tail -n 1I'm curious to see how it runs.
I had to remove the
tail command to view the full output.
The output says, JAVA_HOME is faulty. Either the symlink is pointing to some parent (or child) directory of java-11 sdk or it didn't accept the symlink at all.
Unfortunatelly, I don't have a box with Java 11 installed...yet.
Meanwhile, did we hardcode the java's path in the encryption process? If yes, then do we need to make change in the encryption code (?!) in order to look for JAVA in the defined location? I would also suggest allowing yum installation of JAVA-11 for the debug.
It is hardcoded yes. So far, I don't know if yum's Java 11 is updated regularly or not. But we can ask IBM and depending on their recommandation, make a change to use this other Java 11 if the PTF's one is not available.
I could ask around in Ryver for the support on java-11 installed via yum. But I guess you would have better means of communication with IBM. So, can you please ask around and check for the possibility of including the yum installation?
But for the time being, I want this debugger to work. The version1 was working fine with java 8. Is there a way to switch the debugger back to version1?
Hi @sebjulliand, just following up. Would you please answer the below questions?!
- Did you happen to test this debug thing with Java-11?
- Does the IBM regularly update the Java-11 via yum?
- Is it possible to switch back the debugger to version-1?
Hi @ravisankar-PIO !
- With OpenJDK11, yes, I did. It requires some changes in Code for i and in the scripts provided by IBM to make it work (and I can't start it using SBMJOB). My friend and contributor Christian uses the debug v2 with the IBM Java 11 and it works fine.
- I don't think so. The version available with
yumis11.0.15whereas the latest version available online seems to be11.0.23. - No, unless applying Debug v1 PTF again overwrites the v2 files.