# IceBreak build 0803

| Download | Contents |
|---|---|
| [IceBreak-0803.savf](https://webfiles.system-method.com/download/IceBreak/savf/IceBreak-0803.savf) | The bundle: IceBreak and the admin server in one save file |
| [IceBreak-0803-core.savf](https://webfiles.system-method.com/download/IceBreak/savf/IceBreak-0803-core.savf) | IceBreak alone, without the admin server |
| [IceBreak-0803-admin.savf](https://webfiles.system-method.com/download/IceBreak/savf/IceBreak-0803-admin.savf) | The admin server alone, for an IceBreak that is already installed |

## Before you start

- Log on with IBM i Access Client Solutions (ACS) as QSECOFR or as a profile with
  SPCAUT(\*ALLOBJ \*SECADM \*JOBCTL).
- Open "Run SQL Scripts", paste one of the scripts below, place the cursor on the first line and
  press CTRL-R. Check the job log with CTRL-J.
- The scripts download the save file to `/tmp` with SYSTOOLS.HTTPGETBLOB. A system that cannot
  reach the internet: copy the save file to `/tmp` on the IBM i in any way (for example FTP in
  binary mode), leave out the two download lines (`set buf` and `ifs_write_binary`) and run the
  rest.
- Change the values to your own: `LIB` and `ICELIB` (the IceBreak library, here ICEBREAK),
  `IFSPATH` (here /sitemule/IceBreak), `SVRID` (the admin server's name, here ADMIN) and
  `ADMINPORT` (the admin server's port, here 7000). Installing into an existing IceBreak library
  upgrades it: the installed library is kept as a backup library ICEBCKnnnn and your data is
  copied into the new release.

## 1. The bundle: IceBreak and the admin server

One save file for both - the easiest to move into a production system. ICEINSTALL installs
IceBreak into LIB; ICEINSTADM then installs the admin library (LIB's name + ADM, e.g. ICEBREAKAD)
and creates the admin server SVRID on ADMINPORT. Without the admin server, leave out the two
ICEINSTADM lines.

```sql
begin
    declare buf blob(2G);
    set buf = systools.httpgetblob (url => 'https://webfiles.system-method.com/download/IceBreak/savf/IceBreak-0803.savf', httpheader => null);
    call qsys2.ifs_write_binary(path_name => '/tmp/IceBreak-0803.savf', line => buf, overwrite => 'REPLACE');
    begin
        declare continue handler for sqlexception begin end;
        call qcmdexc ('DLTLIB ICEINSTTMP');
    end;
    call qcmdexc ('CPYFRMSTMF FROMSTMF(''/TMP/IceBreak-0803.savf'') TOMBR(''/QSYS.LIB/QTEMP.LIB/ICEBREAK.FILE'') MBROPT(*REPLACE) CVTDTA(*NONE)');
    call qcmdexc ('RSTLIB SAVLIB(BLUEICE) DEV(*SAVF) SAVF(QTEMP/ICEBREAK) RSTLIB(ICEINSTTMP)');
    call qcmdexc ('CHGCMD ICEINSTTMP/ICEINSTALL PRDLIB(ICEINSTTMP)');
    call qcmdexc ('ICEINSTTMP/ICEINSTALL LIB(ICEBREAK) IFSPATH(''/sitemule/IceBreak'')');
    call qcmdexc ('CHGCMD ICEINSTTMP/ICEINSTADM PRDLIB(ICEINSTTMP)');
    call qcmdexc ('ICEINSTTMP/ICEINSTADM ICELIB(ICEBREAK) SVRID(ADMIN) ADMINPORT(7000)');
    call qcmdexc ('DLTLIB ICEINSTTMP');
end;
```

## 2. IceBreak alone (the core)

IceBreak without the admin server. The admin server can be added later with step 3.

```sql
begin
    declare buf blob(2G);
    set buf = systools.httpgetblob (url => 'https://webfiles.system-method.com/download/IceBreak/savf/IceBreak-0803-core.savf', httpheader => null);
    call qsys2.ifs_write_binary(path_name => '/tmp/IceBreak-0803-core.savf', line => buf, overwrite => 'REPLACE');
    begin
        declare continue handler for sqlexception begin end;
        call qcmdexc ('DLTLIB ICEINSTTMP');
    end;
    call qcmdexc ('CPYFRMSTMF FROMSTMF(''/TMP/IceBreak-0803-core.savf'') TOMBR(''/QSYS.LIB/QTEMP.LIB/ICEBREAK.FILE'') MBROPT(*REPLACE) CVTDTA(*NONE)');
    call qcmdexc ('RSTLIB SAVLIB(BLUEICE) DEV(*SAVF) SAVF(QTEMP/ICEBREAK) RSTLIB(ICEINSTTMP)');
    call qcmdexc ('CHGCMD ICEINSTTMP/ICEINSTALL PRDLIB(ICEINSTTMP)');
    call qcmdexc ('ICEINSTTMP/ICEINSTALL LIB(ICEBREAK) IFSPATH(''/sitemule/IceBreak'')');
    call qcmdexc ('DLTLIB ICEINSTTMP');
end;
```

## 3. The admin server alone

For an IceBreak that is already installed (step 2). It checks that the IceBreak in ICELIB is new
enough, installs the admin library and creates the admin server SVRID on ADMINPORT.

```sql
begin
    declare buf blob(2G);
    set buf = systools.httpgetblob (url => 'https://webfiles.system-method.com/download/IceBreak/savf/IceBreak-0803-admin.savf', httpheader => null);
    call qsys2.ifs_write_binary(path_name => '/tmp/IceBreak-0803-admin.savf', line => buf, overwrite => 'REPLACE');
    begin
        declare continue handler for sqlexception begin end;
        call qcmdexc ('DLTLIB ICEADMTMP');
    end;
    call qcmdexc ('CPYFRMSTMF FROMSTMF(''/TMP/IceBreak-0803-admin.savf'') TOMBR(''/QSYS.LIB/QTEMP.LIB/ICEADMIN.FILE'') MBROPT(*REPLACE) CVTDTA(*NONE)');
    call qcmdexc ('RSTLIB SAVLIB(BLUEADM) DEV(*SAVF) SAVF(QTEMP/ICEADMIN) RSTLIB(ICEADMTMP)');
    call qcmdexc ('CHGCMD ICEADMTMP/ICEINSTADM PRDLIB(ICEADMTMP)');
    call qcmdexc ('ICEADMTMP/ICEINSTADM ICELIB(ICEBREAK) SVRID(ADMIN) ADMINPORT(7000)');
    call qcmdexc ('DLTLIB ICEADMTMP');
end;
```

## What's changed in build 0803


#### Fixed

- **Routing in any job CCSID.** Route patterns with `{ } [ ]` in `webconfig.xml` now match when the
  server job runs in another CCSID than 37 or 277 (for example 1148 or 285), and the `columns` of
  a `.dmd` file are found again. Both came from the noxDB parser in the IceBreak library, which
  is updated.
- **`CHGAPPAUT` shows IceBreak right after the installation.** The installer now registers the
  product (`IBL-SRV`, "IceBreak server for IBM i") with the library, version and date it was
  installed. Before, the product only appeared once the first IceBreak server had been started.

#### Good to know

- **New download names**: the build number comes first, so the files of one build are listed
  together: `IceBreak-0803.savf` (the bundle), `IceBreak-0803-core.savf`,
  `IceBreak-0803-admin.savf` and `IceBreak-0803-readme.md`. Builds 0801 and 0802 keep their names
  (`IceBreak-core-0802.savf`, `IceBreak-admin-0802.savf`).

#### For developers

- C programs that call noxDB directly: `jx_AsJsonText`, `jx_AsJsonTextMem` and `jx_AsXmlText` take
  a target CCSID as their last parameter (`0` = the job CCSID). RPG programs using the
  `QRPGLEREF` prototypes are not affected.
