From 54ef9effd78c95b031a2dbf433c7e12edd9b5049 Mon Sep 17 00:00:00 2001 From: Matt Tesauro Date: Sat, 24 Jul 2021 01:30:24 -0500 Subject: [PATCH] Bug fixes for 2 bugs impacting 1.15.x installs on 'iron' (#23) * Minor updates, cleaning up dev branch * Updated embedded dojoConfig.yml to latest version * More clean-up for 2.0.x and start of work on supporting Debian install targets * Update for new embedded version * Workaround Python 3.8 bug that kinda broke 1.15.1 (and maybe other releases) * Bump version for 2 bugfixes --- bindata.go | 25 ++++++- godojo.go | 2 +- runner.go | 21 ++++++ targets.go | 8 --- ubuntu.go | 206 +++++++++++++++++++++++++++++++++-------------------- 5 files changed, 174 insertions(+), 88 deletions(-) diff --git a/bindata.go b/bindata.go index 4591cd4..e1ee43d 100644 --- a/bindata.go +++ b/bindata.go @@ -1,6 +1,7 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: // embd/dojoConfig.yml (12.513kB) +// embd/factory_2.0.3 (2.418kB) // embd/gdj.tar.gz (6.275kB) // embd/setup-superuser.expect (290B) @@ -91,6 +92,26 @@ func embdDojoconfigYml() (*asset, error) { return a, nil } +var _embdFactory_203 = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x56\xdd\x4e\xe4\x38\x13\xbd\xcf\x53\xd4\x17\x2e\xda\xd1\xd7\xca\x03\x20\xe5\x82\xd9\x61\x24\x2e\x16\x18\x60\x56\x2b\x8d\x50\xe4\x38\x95\x8e\x69\xb7\x9d\xb5\x2b\x30\x11\xe2\xdd\x57\x76\x9c\x3f\x58\x56\xdb\x37\x21\xf1\xa9\x53\x55\xa7\x7e\x8c\x3c\x75\xc6\x12\x28\x73\x38\x48\x7d\x48\x1a\x6b\x4e\x50\x9b\x27\x93\x9f\x4c\x8d\xca\x41\x3c\x7f\x40\x47\xe5\xc3\xd0\x61\x92\xdc\x5e\xdc\xdd\x5f\xde\xdd\x43\x01\xaf\x6f\xc9\x19\x3c\xdc\x7c\xbd\x01\x8b\x27\xf3\x8c\x40\x2d\xa7\xe4\xfe\xb7\x8b\xeb\xf2\xfe\xe6\xfa\xe2\xee\xfb\x8f\x2f\x97\xe5\xc5\xed\x15\x14\xb0\xbb\x37\x9a\xdb\xef\x7d\x85\xe0\x3f\x5c\x05\xd6\x5d\x92\x24\x35\x36\x60\xf1\x20\x1d\xa1\x65\x1d\xb7\x0e\x6d\x49\x43\x87\xd9\x79\x02\x00\xd0\x18\x0b\x4e\x70\x1d\xbe\x81\xd4\xb0\x82\xb0\x2c\x3f\x20\x95\xf3\xb1\x63\xd1\xc8\xff\x46\x1c\x14\x5b\x83\xf9\x58\x36\x0b\x6d\x8e\xba\x76\x2f\x92\x5a\xb6\xab\x91\xb8\x54\x58\xef\x56\x4c\x0b\x5b\xee\x90\x4a\xaf\xcb\x1a\x38\xe3\xa6\x2c\xca\x11\xcc\x66\xfe\x7d\x34\xcf\xde\xa5\xfb\x39\x70\x74\x1e\x6b\x92\xd7\x58\xf5\x07\xd6\xa4\x93\xdd\x12\xf9\xf9\xeb\xfc\xe7\x1b\xf8\x0c\x22\xc1\xf9\xeb\xf8\x7c\x4b\xc7\xf0\xce\x40\xb4\x28\x8e\x50\x9b\xbe\x52\x18\x03\xb0\x9c\xa4\xd1\x60\xec\xf6\x3d\xd0\x70\x0d\xf8\x4b\x3a\x92\xfa\x00\x47\x1c\x92\xf7\x92\xf9\x4a\xc4\x3e\x58\x84\xb2\x5c\x3a\x84\x3f\xb8\xea\xf1\xd2\x5a\x63\x59\x93\x3e\xd8\x01\xc8\xcc\x19\x6f\x78\x63\x85\x76\xab\x1c\x76\x31\xde\x48\xfd\x73\x3e\x79\x9c\x0b\x19\x35\x1c\xdb\x32\x2a\x58\x36\x5c\x90\xb1\x03\x6b\xa4\xc2\x3d\x10\x3a\xda\x03\x17\x24\x9f\x71\x0f\xcf\x68\x65\x23\xb1\xde\x2f\xd1\x17\xd7\x46\x4f\x0d\x96\xa6\xe9\x1d\x52\x6f\x35\xf0\x29\xa2\x6a\x00\x6a\x31\xc0\xc1\xc3\x03\xee\xa1\x95\x0e\x9a\x5e\x8b\x20\x52\x48\xc2\x81\xd1\x6a\x08\x2d\x5a\x71\x71\x7c\xe1\xb6\x06\x61\x4e\x1d\x27\x59\x49\x25\x69\x98\x1c\xfc\x37\xf9\xce\x40\x58\xe4\x84\x50\x0f\x9a\x9f\xa4\xe0\x6a\xf0\xb8\xaf\x5f\x66\x84\x4f\x2c\x36\xca\x08\xad\xa1\x58\x26\x33\x37\xd5\x13\x0a\x72\x61\x28\x8c\x2d\x47\x08\xd3\xfc\x84\xc5\xec\x79\x33\x01\x91\x64\xdb\xea\xb3\x93\xdc\xf1\xe7\xf5\xc8\xd8\x51\xa6\x8f\xb5\x09\x08\x54\x0e\xff\xad\x15\x76\x3f\xf4\x51\x9b\x17\x1d\xe2\x05\x1f\x2f\xac\x0b\x3f\xcd\x86\x8f\x5d\xb4\x46\x8a\x65\x9a\x2d\x3a\x28\x40\x49\x47\x31\x18\x2f\xf8\x11\x87\x7f\xee\x41\x74\x39\xef\x3a\xd4\x35\x63\x47\x1c\xf6\x73\xb8\x47\x1c\x1e\x83\x32\x8a\x57\xa8\xca\xc6\xd8\xf5\xe2\x38\xe2\x90\x65\x59\xb2\x4a\x93\xfa\x4e\x21\xb3\xe8\x96\xa9\xfd\xab\x97\x16\x5d\xe9\x9b\x6c\x99\xd9\x18\xe4\xb6\xba\x0e\x7c\x87\xc1\x66\x77\x69\x43\x9f\x44\x1c\xfc\x7d\xe3\xca\x61\x1c\xd6\x6f\x57\x7f\xfe\x7e\x09\x7e\x25\x89\xd6\x8f\xcf\x09\xa9\x35\x35\x98\x26\xf4\x65\x9c\x83\x11\x3a\xaf\xb9\x4f\xca\x12\xd9\x97\x30\xfe\x57\xc0\xc7\x05\x9d\x24\x49\xdc\xf3\xc6\x8d\x57\x80\xd4\xae\x43\x41\xd3\xfa\x97\x4e\x28\xee\xe2\x59\x77\x3c\xf4\x24\xd5\x7c\xe6\x57\xd9\xc9\xd4\xbd\xc2\x09\xc0\xa9\x55\xb2\x9a\x00\xb7\x9c\xda\xc8\x1a\x3e\xac\x8e\xe2\x18\x8f\xd6\x49\x72\x16\xc8\xfc\x0c\x50\x6b\x4d\x7f\x68\x43\xc2\x91\xdb\xab\xe7\x5f\x45\x6f\x2d\x6a\x82\x8e\x8b\x23\x3f\x60\x12\x9f\x65\x2d\xbd\x0e\x8e\x2c\xf3\x0e\x59\x19\x0a\x55\x96\x59\x6e\xd1\x19\xe5\x5b\x39\xef\xb8\xb7\xcc\x12\xdf\x41\xcc\x47\xb9\x8f\xe4\xa5\x9f\x92\x3d\x94\x99\x77\xb2\x4e\x88\xfd\x5c\xd1\x3f\xc6\x62\x4f\xeb\x54\x36\x20\x69\xe7\xc0\xf5\x55\xcc\x20\xb6\x82\x71\xb9\x67\xcf\xa5\xab\xa5\x65\xd3\xdb\x93\x91\x9a\xad\xe8\x36\xce\xb3\xd5\x8d\x43\x76\xd8\xce\xe4\xd9\xa4\xd7\x22\x07\x70\x5d\x7f\x50\x4b\x92\x03\x4e\x64\x65\xd5\x13\xba\x0d\x45\xb4\x2a\xb6\x92\xb3\x26\x0d\x97\x3d\x19\xa3\x5c\xfe\xba\x8a\xe7\x2d\x1f\x5b\x2b\xcd\x36\x34\x5e\xb9\xd9\x43\x00\x7a\xc5\x7c\x96\xa3\xed\xbb\x7b\xd3\xff\x66\x38\x14\x7e\xbc\xfd\x6b\x04\xef\xdf\x51\x65\x1f\x6c\xbd\xc2\x63\xeb\xb1\x19\x9a\x85\xd4\xb7\x96\xb9\x32\x2f\x68\x59\x06\x45\xb1\x16\x35\xb7\xd8\x29\x2e\x90\xa5\x65\xba\x87\x34\xcd\xe0\xff\xb0\x1b\xf3\xda\x7d\x0c\x14\x56\x97\xf8\xca\xdd\x8c\xc3\x5f\x02\x3b\xda\xda\x4d\x77\xf4\x78\x26\x8d\x66\x4d\xda\x84\xff\x0c\xfc\xe0\x2a\xc3\x6b\xd8\xa8\x9a\x66\xc9\xdf\x01\x00\x00\xff\xff\x8d\x0b\xc7\x9d\x72\x09\x00\x00") + +func embdFactory_203Bytes() ([]byte, error) { + return bindataRead( + _embdFactory_203, + "embd/factory_2.0.3", + ) +} + +func embdFactory_203() (*asset, error) { + bytes, err := embdFactory_203Bytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "embd/factory_2.0.3", size: 2418, mode: os.FileMode(0664), modTime: time.Unix(1626740898, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4a, 0x24, 0xce, 0x42, 0xbc, 0x98, 0xb2, 0xe6, 0x6f, 0xf8, 0xcc, 0x7b, 0xe, 0x1b, 0xf2, 0x12, 0x9a, 0xe1, 0x55, 0x15, 0x3, 0xff, 0x7d, 0x57, 0x34, 0x33, 0xef, 0x15, 0x1f, 0x7, 0xac, 0xfa}} + return a, nil +} + var _embdGdjTarGz = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x00\x83\x18\x7c\xe7\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xed\x98\x75\x50\x9c\x4d\x97\xe8\x07\x77\x18\x5c\x82\x4c\xd0\xe0\x33\x78\x70\x27\x58\x70\x09\x4e\x86\xc1\x61\xf0\xa0\x21\xb8\x13\x08\x24\x81\x40\x70\x19\x2c\x01\x06\x09\x12\xdc\xdd\x35\xb8\xbb\x0d\x01\x12\x20\x37\xef\xdd\xdd\xda\xef\xdb\xba\x77\xf7\xfe\xb1\xbb\x5f\x6d\xdd\xfc\xaa\xab\xbb\x4f\x9d\xee\xe7\xb4\xd4\xe9\x73\xea\xb1\x81\xd9\xc2\xa0\x5e\x36\x70\x47\xb8\x25\xcc\xe5\x39\x9f\x97\xb5\x07\x9f\x9d\x3f\xe0\x3f\x17\xf0\x6f\x44\x44\x84\xfe\x6a\x21\xa2\xc2\xe0\xbf\x6d\xff\x42\x40\x04\x02\x06\x40\x84\xc0\xa2\xc2\x10\x51\xb0\x88\xc0\xef\x71\x10\x61\x21\x01\x61\x00\x08\xfc\x9f\xbc\x8e\xff\x23\xde\x9e\xbf\xf7\x0c\x02\x01\x5c\xbc\x60\x9e\xd6\xde\x1e\xf0\xff\xdb\xb8\xff\x48\xff\x3f\x14\xa6\x38\xdc\x7f\xea\x60\x1c\x19\x9b\xc2\x33\x9e\x50\x8c\x20\x83\xbb\xf5\xcd\x2b\xd8\xea\x69\xa0\x7c\x3d\x4f\xb8\x23\x30\x17\xbc\x0f\xd4\xa9\x25\x16\x35\x8d\xb8\x85\xda\xac\xb4\x08\xe2\x31\x14\x74\x8b\xf7\x83\x57\xac\x4f\x23\xc4\xea\x26\x1c\x03\xc6\xeb\x32\x71\x02\xc4\xae\x3c\xb7\x25\x58\x22\x5f\x35\xb3\xad\xf7\xcf\x16\x12\xe7\x67\x95\x52\xfd\xd2\xd5\x3a\xd2\xff\x25\xea\xc5\xcc\xa9\xa1\xb4\xef\xad\x6f\x20\xbd\xf7\xc4\x3c\xbd\xea\xd5\x8f\xb7\x17\xeb\xa9\x76\x14\x45\x80\xcc\x2e\x0a\x18\x58\xab\x1f\xf2\x35\x6a\xf3\x97\x1e\x7e\xec\x1d\x49\xf4\x2f\xe2\xc2\x50\xad\x75\xb6\x7e\xed\x00\x4a\x15\x4b\x21\xe5\xaa\xf6\x0f\x45\xf4\xf3\xc1\xaa\x13\x8d\xfb\xcb\xf7\x65\x52\x4a\x8f\xd1\x3e\xf2\x7f\xe8\x26\xfd\xd1\x7f\xf5\x0b\x92\xc6\xeb\x86\x7d\xcc\x02\x08\x17\x93\x07\x80\x9f\xa5\xa9\x8c\xc7\xde\xb1\x4b\x77\xb3\x86\x90\xe6\x60\xe6\x38\xd1\x6c\x25\x31\x5b\xe5\x02\x6f\xa6\x9e\x3f\x72\x94\xc4\x16\x43\xe3\x7e\x53\x0c\x62\x96\xd6\x53\xe8\x17\x7e\xaa\x4a\x96\x1f\x5e\x27\xb7\x01\x49\xc9\x20\x35\x4f\x0a\x6c\x01\x50\x91\xe0\x8c\x0c\xba\x29\x01\xdf\x80\x64\xe5\x65\xa9\x71\x6d\x6e\x3c\x54\x75\x63\xd1\xb7\x5f\xbb\x3c\xa5\x68\x67\xe6\x8b\x26\x15\x24\x16\xa0\xfa\xe8\x87\x3f\x26\xc0\xcc\x0d\x08\xd1\x22\xc3\x77\x0f\xd5\x0d\x1c\x24\xf4\x99\xa7\x68\x90\xad\xd4\x50\x4d\xba\xa8\x29\x9b\x97\xdc\xb2\xc6\xe7\x57\x29\xb5\xbd\x61\x0d\x17\xa0\xa6\x60\x43\xf3\x7c\xf0\xa6\x66\x9f\xcb\x8e\x73\x65\x35\x8f\x62\x00\x35\x19\x2f\x60\x24\xdd\x49\x1a\x73\xc6\xfb\x74\x1b\x30\x99\xa7\xd4\x4c\xae\x9e\xa6\x7b\xb8\x43\x1a\x66\x1c\xe9\x30\xc2\xed\x20\x8a\x29\x67\x6f\x96\x2f\x04\x25\xc1\xb6\x1f\x38\xb2\x40\x26\xe7\xa2\xe8\x7e\x3e\x12\xa4\x03\xb0\x7a\x66\x36\xf3\x53\x01\x7c\x1f\x27\x86\x7a\xe0\xf9\x56\xec\x4a\x09\xcb\x9a\x9a\x79\x0e\xa0\xc7\x66\x26\x78\x6b\xc5\x79\x67\x48\xac\x72\x89\x45\x7a\xb2\x13\xf8\x5a\x0e\x3c\x5b\xe1\x8b\x10\x18\xe1\x67\xea\x19\xc5\xd9\x68\xfd\x26\xe3\x62\x27\x9e\x16\x4f\x14\x72\xf9\x00\x86\x62\xa9\xb7\x0b\xb2\xe5\xed\x33\x7b\xb7\x2b\x5e\x00\x38\xcf\x70\x4e\xbc\xd1\x2b\x2c\x7e\xe0\xbe\xe7\x64\x33\x9a\xd9\x7e\x33\x55\xdb\xbb\x3d\x3f\x56\x47\x58\x89\x57\xcd\x0f\x94\xa7\x81\x21\xe2\xbd\x35\xf3\x24\xf9\x24\xb4\xb1\x17\x0a\xf7\x7b\x1e\xb5\x8d\x01\x2f\x78\x28\x91\x58\x1a\xc9\x7d\x9e\xd4\xd4\x42\x89\x8a\x7c\x1b\xca\x58\xce\x5c\xdf\x9d\x2b\x77\xa2\x6b\xd5\x4f\x76\x3f\x0a\xa7\xec\x6d\x5a\x84\x23\xb1\xf0\x63\x0b\x78\x06\x83\x84\xdd\x6d\x23\xb5\x11\x81\xdf\xf6\x0a\xc2\xc9\xb2\x15\xb1\x73\xee\x3d\x06\x13\x54\xdb\x4c\x1a\x40\xce\xad\x27\x4a\xda\x14\x37\xf6\xe1\xf3\x6e\x8d\x31\x1d\x53\xd2\xdc\xf8\xf0\xcb\x60\x39\xf9\x53\x2a\x76\xcf\x73\x30\x85\x9a\x54\x24\xd6\x41\xc4\xe3\x97\xd2\x37\x5e\xe0\xae\xb2\x43\x2e\x93\xb0\x90\xa2\x32\x36\x6b\x05\xe8\xab\xd6\x8c\x75\xa2\x2e\x7d\xab\x30\x16\xab\x85\x11\xaa\xe1\xe2\x9c\x7e\x03\xa2\x67\xc7\xf6\xdd\x29\xb2\x71\x96\x0d\x9d\xb3\xf2\x67\xdc\xc7\x92\xb8\xcd\xa7\x1d\xc7\xd9\x50\x59\x68\x42\xed\x21\x32\x6e\xc7\xf9\x55\x16\x25\x8d\xa3\xe1\x35\x8c\x08\x47\xd6\xd7\xec\x91\xe4\x22\x5a\xb2\x04\x24\xaa\xb3\xdf\x69\xd1\x23\x38\x5b\xc3\x6e\xb2\xf6\xc8\x3c\x6b\xac\x14\x61\xba\x3d\x24\x29\x58\x5c\x17\xb0\x46\x28\x9a\x5c\xca\x93\x5b\x6e\x51\x2e\xb4\x34\xc7\xab\xf5\xe2\x6b\xc9\x23\xfd\x6f\xd9\x8b\x0a\x8b\x0d\x5e\xa3\x99\xfd\xea\x8b\xee\xfc\x45\x75\x48\x62\x0f\x59\xd0\xd0\xc5\xd1\x3b\x06\xf0\x4b\xd8\xd3\xe2\xcf\x1c\x89\x97\xb4\xc4\x45\xdf\x1b\xa0\xa3\xdf\xde\x7f\xdf\x5a\x40\x74\x00\xa9\xe2\x44\x77\x06\xf5\xca\xca\x56\xa4\xd5\x9e\xf6\xd6\x4d\x9b\x7c\x94\xf2\x60\x67\xf9\xb1\x79\xe9\xe2\x33\xdf\x61\x34\xad\x48\xbf\x58\xdd\x8b\x0c\x79\xec\xa5\x19\xb0\xef\x63\x50\xb1\x7e\x11\xad\x7d\x5d\xcb\xdf\x4e\x95\x49\xf2\x59\x7b\xbb\x5e\x7c\x26\x8e\x63\xe9\x9d\x9d\xff\x7c\x77\xc6\x98\x03\x67\xff\xe9\xf6\xea\x5a\x7b\x94\x67\xad\x8d\xef\x95\x1b\x99\x73\x3a\xc0\xe6\x50\xff\xbb\x0e\x44\x6c\xab\x2b\xda\x39\x5e\x77\xd7\x36\x5a\xd7\xc7\xcb\x8e\x72\x78\xd8\x39\xce\xad\x21\x50\xf6\xa6\x4d\xa7\x5b\x9d\x6e\x7e\xa6\xcd\xeb\x63\x7f\xf8\xb0\xf4\x8b\x4e\x98\x52\x87\x74\xac\x76\xe3\x39\xd0\x6c\xe3\xc6\x89\xc4\xee\x2c\x55\x7e\xb4\x53\xa8\xe5\xc7\xf9\xa4\x89\x21\x0b\xc5\x96\xa4\x18\xf2\x32\xf3\x36\xde\x53\x97\x79\x33\xb2\x40\xe3\x07\xc6\xc3\x16\x1e\x44\x4f\x60\xc2\x0d\xc6\x80\x58\x3b\x45\x67\xb4\xb9\x46\x0b\xe9\xa6\x0c\xf5\xda\x95\xb6\x79\xff\xb5\x04\x74\xa1\x46\x39\xcc\x9d\x72\x90\x32\x12\x10\x46\xc3\x71\x95\xaa\xb2\x6d\xe5\xab\x71\xe3\x45\x5d\x30\xcc\x5f\x7c\x55\x9e\x4d\x94\xb9\x37\xc4\x90\xc1\xf2\x33\xf1\x35\xbe\x29\x98\x24\x92\xe1\x43\xd4\xa1\x8f\xd9\x5a\xa8\xf9\x11\x97\x61\xd8\x59\x4e\xdb\xd9\xea\x70\x4f\x4e\x07\xd0\xfe\x43\xbe\x7f\x9d\xb4\x75\x9d\xda\xad\x7e\x71\xe9\x26\xe2\xc8\xc2\xd4\xf0\xe9\x3c\x43\xf2\xb4\xb5\xac\xa6\xc1\xb4\xab\x0c\xa1\xfc\x4a\x98\x35\x4e\x84\xf9\xd7\xcf\xdc\x21\x45\x0a\xb4\xde\x85\x16\x5a\x2a\x0c\x9a\xe7\xde\xe6\x04\x0a\x4a\xd3\x52\x15\xb3\x29\x3f\x75\x5b\xcb\xc2\x4d\x44\x51\x14\xb5\x2f\x08\x7f\xe5\x0f\xee\x31\x29\xcc\x42\x7a\x67\x6c\xba\x2c\x4f\xb8\x70\xec\x3c\x23\xaa\xb7\xeb\xd3\x53\x04\x12\x06\x92\x0e\x25\x3d\x77\x99\x90\x73\x12\x5b\xf5\x86\xa6\xf7\x3a\x83\x09\xfb\x2d\xb0\x18\x54\x10\x77\x76\x17\x44\x23\x74\x1d\xbc\xee\x8d\xb9\x55\xb2\x81\x24\x90\x44\x71\xaa\x61\xd5\xe5\xca\x9f\xad\x61\x14\xb6\x6e\x09\x4d\x41\xb5\x9e\x39\x25\x5d\xaa\x64\x4b\x95\x64\x70\xcc\xd9\x5d\x41\x67\x7b\x0f\x3a\x1d\x98\x5e\xbe\x58\xee\xc2\x78\x92\xfb\xd0\xa2\x53\x3f\xbe\x92\xc3\x75\xa4\x7f\x58\xbd\x9d\x01\xe5\x9c\xee\x61\x0a\x57\x37\x05\xf8\x35\xae\x44\x94\xd2\x61\xe2\x13\x6e\xb5\x1d\xb4\x81\x51\x34\x56\x3f\xc6\xde\x03\x0f\x91\x4a\x08\x4c\x29\x3c\xb5\x87\xba\x42\x32\xfa\xb0\x8f\xb9\xdc\x49\x06\xa3\x27\x10\x97\xe1\x59\xba\xb7\xb7\xdf\xc9\x31\x98\xa4\x97\xb7\xde\x51\x47\x85\xde\x7d\x95\xc1\x9f\xd1\xd7\xd3\x14\x9e\xfe\xbb\x4a\x86\xe2\x8e\x00\xc8\x4d\x1f\x0d\x78\xf4\x8f\x7b\xff\xf9\x6c\x6c\xf8\x5c\xe0\x36\xff\xa5\x36\xfe\x83\xf8\x0f\x16\x10\x84\x00\x20\x82\xa2\x82\x82\xc2\xc2\x82\x42\x82\x7f\xc5\x7f\x01\x61\x88\xd0\x9f\xf8\xff\xdf\x81\xad\xb8\xcd\xbf\x66\x80\x6e\x76\xbc\xbf\x93\x40\x4b\x08\x9f\x28\x1f\xe4\x9f\x53\x41\x7c\x5b\x71\x07\x17\x6b\x3b\x98\xe7\xbf\xc8\x50\x71\x67\xcf\xdf\xd5\x6f\x09\x1f\xf6\xbb\x0b\xe2\x75\xb6\xb6\x07\xf1\xc3\xdd\xbc\xf8\xf9\xfe\xfa\x06\xaf\x17\xcc\xc5\xed\xb7\xe6\xaf\x43\xe5\xf5\xf5\xf7\xb1\xfd\xb7\x3a\xfe\x7f\xdf\x1e\x88\x57\xe1\x7f\xcf\xc0\xff\x47\x1f\xcc\xff\x27\xfc\xdd\xe5\xfe\x17\xd9\xf8\xf7\xfd\x1f\x02\x16\x05\x0b\xfc\xb3\xff\x0b\x89\x80\x7f\xbf\x05\xe0\xdf\x82\x10\xe4\x8f\xff\xff\x77\xf0\x37\xf9\xbf\xa9\xa9\xe7\xa2\x58\x75\x96\xdd\x2f\x7c\xe7\xf3\xa4\xa1\x4f\xbc\x37\x6f\xc4\x18\x65\x2a\x78\xc6\xeb\x66\xde\x20\x48\x4b\xc4\xfa\xf5\x0d\xb1\x92\x93\xba\x20\x4a\x6e\x7e\x55\x15\xb7\x3f\x8e\x5c\x5f\xb1\x22\xe2\x3e\x2e\x95\x56\xe8\x15\xab\xa5\x95\x90\x12\xe5\xb4\x62\x37\x3e\x48\x70\x05\xa4\x0c\x14\x8a\xa9\xf9\x6e\x0e\xf6\x38\xd2\xde\x9f\xcb\x70\xf6\x6a\x8f\xc8\x04\xb6\xad\xa4\x68\x31\xbd\x1e\xb6\x7c\x64\x77\x7a\x32\xcf\xcf\x61\x97\x3d\x32\x22\xfd\x52\x4c\x46\xfa\xe6\x7a\xf0\xac\x3f\x8a\x1c\xf1\xbc\xf7\x57\xc6\xda\x94\x7a\x96\xad\xa4\xf5\xe1\x7b\x18\xbb\x6e\x16\x87\x87\x51\xeb\xec\xc2\xaf\xec\x77\xf5\xe5\x2c\xb6\x92\x24\x82\xdb\xfd\xf6\x54\x43\xf3\x1a\xec\xce\x7c\x41\x37\xc5\x36\x72\x98\xd5\x78\x0a\x59\x58\x02\x6a\x24\xcb\x8c\xcd\xb0\xfa\xf3\x18\xd8\x1b\xb6\xd0\x9f\x3c\xa6\xb8\x54\xd8\xc9\x4f\xe6\xf5\xc3\xcf\xf7\xc8\x3e\xf0\x1e\xf3\x22\x88\xfd\xbb\x62\x9e\x28\xa5\x16\xc6\x23\x55\x18\xb7\x43\xb7\x4a\x4e\xe7\xbd\x94\xbc\xe8\x9e\xb1\x9e\x62\x51\xca\xc5\x3a\xbf\x97\x54\x48\x92\x61\x6e\xa1\x58\xe1\x9f\x67\x6a\xa1\x9b\x7b\x81\xed\x3d\xb3\x7a\xf1\xc2\xa7\xeb\x7e\x37\x7a\x4a\x3d\x94\x46\x05\xc5\xf0\x43\x9a\x57\x91\x59\x8d\x0e\x5b\x2c\x3a\x31\x18\xfc\x38\x1f\x2e\x5c\x26\x99\xab\x5a\x09\x22\x57\x3f\xb4\x90\x77\xc2\xbf\xab\x67\xe4\x8c\xb5\x12\xe5\x25\x52\x9a\x8c\xd9\x85\x3c\xb1\xa9\x09\x8f\x39\x07\x22\x52\x5e\x69\x29\x48\x19\x24\xa5\x04\x52\xa8\x92\x5d\x77\xc8\xb2\xd0\xf4\x08\xbe\xdb\x04\x5f\x58\xa9\xe6\x8b\xda\x45\x8c\xd1\x63\xeb\xcf\x20\xd2\x01\xdd\x74\x7d\x4d\xa9\xdd\x7e\x64\x83\xfa\x49\x8e\x8d\x8e\x2d\x82\xb4\xa1\x02\xa1\xf6\x9f\xb6\xd1\x8d\xf1\x10\xaa\x43\x02\xec\xef\xdc\xeb\x9e\xdf\x86\x20\x45\xe1\xc4\x55\x27\xb1\x52\x58\xd6\xb8\x0b\xd0\x9a\xfb\xf7\x6b\xb1\xc3\x4a\xac\x56\x8d\x60\xff\xd5\xe2\xb7\xfa\xf1\xd5\x1f\x71\x99\xb6\x69\x4f\x2b\x61\x8f\x8b\x99\x46\x4f\xba\xf0\x1d\x19\xd6\xd8\x98\x3b\x4f\xc2\x3e\xed\x07\xfb\xb5\xcd\xd9\x25\x17\x80\x51\xea\xdf\xb7\x0b\xce\x4a\xdc\xcf\xb1\xf5\xe7\xf6\x34\xbc\x78\x77\xdd\x59\xe5\xdb\xf5\xda\x19\xbd\x89\x34\x48\x87\xb4\x7d\x9f\xe1\x1c\xb9\xbe\xeb\x63\x6b\xc2\xab\x56\x92\xe6\xf5\x2f\x02\xec\xf7\x49\x9e\x29\xb6\x47\x0c\xfb\xe2\xe2\x62\x9a\x39\xa1\x5d\x73\x73\x86\xe0\xeb\x8b\x60\xe8\x14\x4d\x19\x8f\x60\x77\x11\x74\x10\x59\x09\x1c\xde\xb1\xc4\x8a\xeb\xd0\xbf\xc4\x22\x66\xed\x0e\x7e\xe3\x91\x62\x46\xcf\xf5\x9c\xa4\xf0\xd8\x08\xc0\x2a\xb4\xe7\xe7\xa7\xbb\x4b\x5d\x98\x50\xad\x35\x63\x4b\xc9\x71\x4e\x5a\x73\xf2\x1e\xda\x8a\x2e\x17\x40\x90\x14\xcb\xcf\xb8\x92\xa6\x60\x44\x04\xf6\xa0\xb6\x2a\x42\xe1\x20\xae\x66\x1c\xbd\xc7\xe2\x65\x15\x96\xe5\x7d\x49\xc0\x36\xe9\x76\x62\x65\x3f\xc2\x2f\x7d\xd5\x45\x5c\x1a\xcc\xb0\xe7\xd9\xa0\xc5\xc5\xc5\xad\x41\xab\x93\x9e\x27\xb7\xf5\x24\x3b\xd4\xbd\x4c\x32\x9a\x52\x67\x7b\xf5\xc8\xb8\x0b\xad\x1d\x6a\xea\x9d\x56\x4d\x2d\x19\x73\xb3\xeb\xf5\x7c\x38\xb1\x12\x69\xa7\x76\xaa\x5c\xc8\x25\xe6\x34\x5d\x4f\x6b\xbf\x8f\x31\x1d\x01\x7f\x1a\x16\x63\x5f\xe4\x0f\xea\x22\xc5\xa2\xd7\x1e\xb9\x16\x8e\x5c\x87\xd9\xe0\x9a\x95\x0b\x59\x1b\xe1\x0a\x9d\xdf\xe6\xcf\x69\x3e\x2a\x0d\x30\xa3\xd0\x1e\x8e\x40\x46\xaa\xe4\x94\xad\xde\x80\xac\xd3\x0b\xd8\x5e\x36\x26\x69\x91\xb6\x35\xe0\x5d\x75\xb1\x0d\x9b\xe6\xea\x44\xe4\x06\x24\x65\x44\xdb\x0b\xaf\xcb\xbe\x13\x18\xd6\xe6\xd7\x33\xe6\xe3\x49\xbd\x78\xbc\x3f\x34\x4a\x7e\x3b\x1e\x8b\x35\x96\x7c\xda\xf0\x3e\x1d\x51\x5a\x44\x9c\x81\x10\x3f\x75\x75\x48\xc2\x7a\x6d\x4f\x2b\xe8\x52\xb3\x49\xbe\x45\x5f\x51\xcb\xc2\x58\x9f\xce\xa5\xaf\x25\x42\x44\x29\x45\x3c\x87\x79\x3d\x4e\x13\xa4\x0a\x29\x40\x01\xb7\xf0\x46\x20\xbe\xd8\x25\xa5\x58\x44\x63\x0a\x56\x94\xb3\xb0\x92\xd2\xfd\x8d\x78\x03\x86\xe7\xb3\x52\xe9\xdf\x09\x55\x9c\xad\x9a\xca\x17\x99\xbe\x97\xb7\x08\xbb\x55\x10\xff\x74\x6c\x00\xac\xec\x58\x10\x3d\xb8\xff\x84\x51\xcc\x2c\xf8\x55\x2c\x8c\xc8\x8b\xd8\x80\xfe\x48\xd1\x7b\x99\x58\xf2\x0d\x99\xf2\x5d\x11\xe7\x46\x79\xcc\x83\x78\x0b\x74\xe3\x04\x69\xb4\xe0\x40\xe3\x34\x0b\xf6\x14\x83\xbd\x70\xa2\xd6\xb6\x8d\x34\x22\x1b\x6c\x47\xa6\x27\x63\xa4\x24\xda\x01\xc3\x13\x87\xee\xe6\x77\xfd\xf9\x0d\x92\xa5\xf6\x8e\x65\x84\x69\x5e\x6a\x81\x73\xbe\xf8\xcb\x7d\x03\x56\xf9\x0c\xd8\x7c\xfe\x6d\x2d\xc4\xf2\xc9\xe8\x5e\x8f\xa4\x18\x1d\xc5\x4a\x03\xf0\x12\xc4\xc3\x16\x2a\x17\x03\x80\xba\xd8\x04\x11\xc5\x20\xd1\x29\x7b\x7a\xb5\xe3\xce\xa8\x3e\x49\x2f\xf1\xa0\x35\x1c\x7a\x1a\x9e\x33\x23\xc1\x9c\x46\x5e\x42\x0a\xe8\x66\x8e\x76\x1b\x17\x3e\xfb\x6a\x64\x3b\x88\x9a\xec\x99\x2c\x02\x7d\xff\x49\xb5\x15\x76\xa4\x89\xbb\x87\x3d\xa8\x4d\x2d\x01\x91\x94\x40\xb7\xac\x3e\x34\x44\x4b\x41\xf8\x6b\x8d\xbe\xda\xaa\x7f\x27\xaf\x03\xde\x0d\xd9\xcf\x21\x93\xd0\x77\x6e\x9f\x1e\xc8\xf9\x1a\x60\xde\xcd\xa0\x0b\x72\xa0\xfb\x46\x1c\x0b\xd1\xbb\x4f\xe1\xdf\x00\xce\x98\xf7\x1c\x24\xb6\x96\x5b\x98\x6a\x2c\x08\x8d\xcb\xea\xee\x77\x22\x52\x2c\xce\x22\xcf\xd6\x3d\x06\x3a\x2b\x2b\x73\x1c\xb7\x8c\x6a\x17\x73\xc7\x3b\x55\xb7\xc3\x44\xe5\x95\x28\x94\x91\xb6\x6a\x03\x26\xbd\x0e\xc4\x98\xdc\x5f\x07\x8a\x1b\xce\xa5\x9d\xdc\xb5\xdf\xc5\xba\x45\xbe\xdc\xc0\x17\xd5\xee\x29\xc7\xf5\xcf\xd5\xbc\x32\x1a\x39\x91\xe2\x1d\x1b\x99\x56\x9c\xce\x37\xb6\x96\xd7\xfb\xe6\x1a\x5e\x1a\x32\xfe\x0a\x69\x75\x92\x2b\x1a\x8e\x13\x15\xbf\x4b\x3c\x0f\x94\x5c\x91\x24\x45\x2d\xf5\x02\x0a\x3d\x2f\xcb\x18\x8d\x9a\xb6\x8c\x79\x6a\x99\x39\xdc\xc2\x46\x67\x2c\xa3\x5d\x48\x78\x67\x53\x31\x2a\x0b\x1a\x85\x39\x5f\x7d\x97\x4d\x37\x42\xb0\xd1\x96\x30\xa0\xe5\x7f\xc2\x72\x73\x2a\x62\x46\x33\x5a\x0c\x34\xab\xbe\xaa\x01\xbe\x34\x20\xf7\x27\x9e\xe0\xa9\x90\x50\x48\x23\x9e\x3e\x06\x58\xa6\xb0\x93\x40\x4e\xc3\x79\xe5\xc6\x0b\xc8\x7c\xe2\x27\xf0\x94\xe4\x11\x15\x54\xb7\x84\x7d\x0f\xd1\xfa\xd9\x2a\xe9\xb9\xdb\x75\x2a\x16\x5c\x15\xe5\x57\x22\xe2\xce\x08\x54\xb9\xaa\xb4\x25\xf1\x49\x49\x1f\x74\x5b\x9d\x71\x35\xc2\x58\x0e\xae\xdc\x5f\x60\x7e\x22\x8c\x21\xab\x0a\xcf\x9a\x8a\xea\x09\xdd\x3f\x34\x2b\x8c\x7d\x4c\x86\x76\xa1\xf2\x30\x71\x29\x62\x93\x94\x9a\x43\x9a\x5a\x81\x33\x98\x1e\x67\x3d\xe4\x01\x06\xf3\x35\x8b\x48\x78\x36\x47\xfa\x75\xc6\x86\xea\x60\x6e\x69\x72\xf2\xc6\xdb\x43\x54\x58\xe2\x1c\x88\x67\xb5\xf2\x08\x06\x84\x03\x4f\xd0\x10\xb2\x9f\x65\x83\x4d\x20\x1d\x8e\x5e\x03\xca\xc6\x66\xd5\x39\x7d\x13\x49\x90\x23\x64\xdb\x9b\xd3\x1e\xb5\x44\x7c\x7e\xad\x14\x7c\x8f\x72\x9b\x18\x99\x71\x11\x63\x3a\x54\xdc\x5c\x67\x36\xe5\xe4\xa9\x30\x27\xe9\x67\x5e\xe7\x97\xba\xf6\xf5\x56\xd5\x11\xc1\x2a\x17\x15\x62\xd0\xb8\x86\xb1\x4a\x4a\xbb\xb2\x1e\x7e\x72\x90\x84\x84\x84\xf4\x67\x65\x7c\x03\x31\xdd\xdb\x92\x04\xa0\x39\x6d\x5a\x4c\xf4\x98\xb6\x8d\x22\xea\xa3\x62\xcf\x41\x1c\xda\xc1\xbe\xa9\x0b\xbb\x5b\x70\x85\x1f\x3e\x4a\x7c\x8e\x44\x9c\xa6\x27\x4a\x67\x4d\x63\x9b\xf4\x13\x60\xb1\xc1\xcc\x68\x45\xe7\x03\x05\x69\xf1\x11\xc5\x02\x92\xa1\x82\xa3\x4f\x3f\x2b\xcf\xdb\x28\x9e\x3e\xe4\x31\xdd\xe3\x86\x40\x3d\x27\xad\x40\x52\xec\xe7\x5c\xb9\x2b\x0c\xad\xab\xc0\xd2\x38\xab\x81\x30\x64\x6c\x37\x5f\x05\xa5\x64\xbd\xf8\xc0\xac\xbe\x77\x4a\x9f\xe4\xb2\x38\x8b\xa3\x8e\x9e\x6e\x76\xd3\x4e\x97\x28\xbb\xf0\xb1\x0f\xdf\x7c\xff\xfc\x7c\xb1\x9a\xec\x52\x62\x9d\xeb\xcc\x91\x33\x81\x12\x4a\x68\x0a\x21\xd2\x07\x8f\x36\x23\xb2\xe1\xb8\xa3\xcf\x70\x77\x22\xa7\xdd\x07\x1b\x88\x1f\x60\xda\x24\x50\x30\x85\xb0\x18\x68\x6e\xa9\x74\x46\x6d\x2b\x37\x73\xd5\xb9\x0e\x7e\x04\xa1\xe1\x89\x9b\xa6\x96\x01\x4b\xdf\x58\x7d\x80\x32\x1a\x69\x4f\x78\x41\x14\xd6\x28\xaa\x43\x7d\x07\x3e\xa6\x5d\xaf\xdb\xfe\x42\x5f\xa1\x53\x3f\x6c\xea\x99\xd8\xbd\x46\x2f\x7e\xbe\x82\x26\xda\xc2\xdb\xab\xbf\xb8\xbc\xb1\x0d\xa6\x4b\xb2\x13\x05\x65\x5e\x26\xc8\xc9\xf6\x3e\x27\xec\xcb\xa3\xe0\xdd\xd4\x5c\x44\x7a\xb0\xa1\x13\xea\xdd\xc2\x80\xd3\x86\xb8\xbd\x1f\x98\x6d\xf7\x50\x4d\x61\xcf\x23\xb4\x8d\x0c\x17\x79\x34\x54\x58\x8a\x68\x4a\xd2\x08\xa0\xe4\x0e\xb3\xf2\x73\x5d\xd6\xcd\xeb\xdf\x3d\x0f\xda\x4d\xce\x41\x3c\x5f\xee\x83\x96\xc2\x38\xef\xa7\x70\xb0\x73\x5e\x36\x9c\xe8\x95\x1a\xc4\x3f\x4f\xa9\xad\x8b\x0c\x1f\xd2\xce\x26\x9a\x06\x94\x10\x01\x4e\x44\x9f\x4c\xbe\x78\x04\x75\xe6\xfd\x6a\xf3\x9a\xfc\xa9\x93\x02\xcf\x5c\x25\x39\xeb\x26\x7b\x64\x82\xc3\x23\xfc\x7a\xec\x1c\x47\xb4\xbc\x28\x02\xc0\x10\xb0\x88\xca\xca\x1f\x83\x6b\x85\xcd\x14\x9c\xd0\xd3\x2c\xe7\x0c\xbc\xdb\x24\x7b\xb1\x9a\xd2\xb9\x7e\xa2\xf7\xe3\x27\x6a\xb5\xcd\xec\x0d\xaf\xa4\x16\xa9\xf4\x31\x96\x58\x64\x2b\x55\xd8\xee\xe5\x61\x40\x99\x60\x43\x2d\xc3\x2c\x44\x59\xe7\x90\xd4\x01\x29\x11\xfe\x48\x9e\x34\x9f\xec\x21\x56\x9c\x95\xb6\x37\x14\xeb\xb6\x0e\x50\xdc\xd2\x18\x4a\xb9\x26\xfb\xe6\x64\x27\xb7\x6d\x8b\xb2\xe4\xa3\x99\xa0\x93\xa9\x94\x13\xca\xdb\x03\x56\xfb\x2d\x66\xb2\xa5\x56\x7c\x23\x4b\xb8\xe1\xf8\x7b\xb9\x5c\x19\x7c\x8d\xd8\x00\xf3\x20\x38\xec\x15\x6a\x34\x52\x25\x29\x81\xd3\x4a\xe4\xd6\xa1\x9b\x25\x99\x84\x79\x7c\x71\x89\xee\xbc\xaf\x05\xa9\x2c\x44\xfb\xaa\x69\xda\xf3\x51\x85\xe2\xb8\x82\xc8\x6b\x80\x93\x6f\x84\xf5\x49\x07\x7d\x1d\xfd\xce\x32\xa3\x77\x5d\x45\xc8\x7b\x77\xa4\xd2\x1a\x1e\x2a\xfe\xd6\x81\xe5\xce\x08\xb7\xfd\x88\x58\xf9\xd8\xc5\x9c\xca\xd4\xc1\x3d\x9f\xa7\x45\x37\xe8\x49\x55\x82\x94\xcb\x89\x0a\x87\xe9\xe3\x79\x96\xfa\xb9\x9d\x38\xbd\x61\xce\x2b\x46\xcc\x43\xae\x13\x95\x40\x71\xa2\xea\xfb\x13\xc2\x6d\xb1\x50\x21\xbe\x3b\x6f\x22\xda\x69\x8d\x81\x08\x9d\xd3\x7e\x02\x72\x5d\x86\x10\x52\xcb\x7b\x6e\x43\x88\x3b\xde\xfd\xc4\x58\x6f\xfe\x32\x1f\x4c\x96\xfc\xd8\xe9\x74\xa5\x51\xa9\xa5\x88\xf0\x88\xa3\x1e\x2a\x3e\x83\x98\xe3\x09\xa6\xaa\xe5\xd8\x91\x92\x3c\x9e\x6b\x3b\x9c\x17\x4d\xc9\xba\x9c\xef\xb0\x6e\xf4\xe9\xe5\xe3\x54\x66\xc6\x52\xf1\x2a\x2c\x30\x83\xfd\x80\xa5\x95\xed\xa9\xbc\x13\x3c\x6e\x48\x29\x33\xfc\x39\x42\xe7\x55\x17\x66\x3c\x0a\xb1\x29\xa8\x4c\xe3\x1f\x91\xa1\x67\x82\xb3\xd4\xb7\x10\x3e\x9c\x79\x31\xd3\x6f\x9e\x25\xed\xb5\x93\xac\x11\x8e\x2e\x30\xc9\x4a\xb4\x5a\x97\xd9\xa4\x7a\x65\x6b\xf5\x9a\x87\xa8\x8e\xa8\x8b\xb4\x92\x2d\xa2\x9d\x84\xcc\x91\xde\x97\x64\xed\x03\x16\x30\x1e\x23\xf4\xa8\xce\x7f\x09\xce\xba\x82\x6e\x73\x41\x31\x03\x64\x66\x7d\x34\xd3\x86\x95\x87\x57\xf3\x34\xc7\xcf\xc3\x2e\x08\xeb\xf9\xae\x01\xa3\x9a\x02\xc1\x61\x92\x45\x75\xac\xe0\xf6\x5b\xfb\xa4\xa7\x72\xb1\xc4\x52\xa1\x09\x39\x25\xb8\xd0\xe4\x26\xc1\x46\x57\xf5\x1b\x60\xb4\xe9\x2c\xc3\x82\xce\x97\xd2\x7e\x80\x09\x87\xcb\x62\xcb\x81\x09\xb9\x23\x13\xaa\x65\xa6\xf3\x59\xfc\x00\xc1\x00\x33\x7c\x8a\x53\x86\x2c\xec\x0c\xe4\x93\x90\xcc\xd2\x2c\x49\x5a\xfb\x64\x7e\x73\xc3\xf8\xe8\xac\x6f\x61\x33\x2f\x94\x8c\x15\x86\x4c\x1a\xb5\xb4\x31\xc4\xbc\x86\x0d\x98\x17\x00\x78\xeb\xbd\xb1\x1e\x9f\x77\xd1\x7d\xf3\xc2\xe9\xeb\x6a\xbf\x20\x91\xdc\x15\xf4\x74\xc7\xc8\x3d\x36\x53\xf7\x3f\x32\x9a\x45\x54\x21\xe5\x24\x10\x0d\xb7\x6f\x0c\x9b\xae\x85\x17\x42\x16\xe8\x09\x16\x34\x39\xcc\x26\x1e\xdc\xbf\x20\xc2\x88\xd1\x20\x3c\xf7\xcd\x40\x0d\xcc\x57\x4c\xca\xdb\x49\x82\xf9\xa3\x97\x0c\xcc\x88\x97\xe9\x12\xcb\x7d\x06\x6b\xc5\xb1\x7d\x87\x39\xde\xce\x0d\x30\xbc\x1d\x2b\x00\x85\x7e\x0e\x15\x21\xcf\xdf\x0e\xe7\x02\x6e\x05\xcf\x60\x8b\x19\xe6\x12\x4e\x24\xee\x21\xca\x47\xb3\x7f\x26\xd5\x71\x70\xe3\xcc\x30\x94\xdf\x21\xe3\xe2\x2e\x36\xe2\xf0\x9d\x04\x18\xbf\x1f\x1a\xda\x4d\xc0\x83\xd2\x51\x15\x2d\x44\x65\x63\x21\x85\x51\xc7\x57\x21\x48\x82\xba\x4c\x2a\xf5\xca\x30\x15\xb1\x5a\x16\xb2\x03\xc7\x40\xa4\x9f\x62\xa9\x4b\x85\xf8\x59\xee\x90\xd6\xb4\xae\xac\xcd\xf8\x4d\x8d\xe5\x28\xfa\xaf\x71\xba\x6f\x73\x4a\x87\x22\xf6\xe6\x97\x3c\x9d\x09\x3a\xc0\x62\x9b\x74\x3e\xe4\x75\xf5\x7c\xd7\xdc\xd6\x09\x45\x7d\xce\x7d\x19\xcd\xe9\x39\x2a\x9f\x2a\x75\x1a\xee\x1d\x60\x32\x85\x45\x88\x35\xaf\xf4\x73\xd5\xb3\x42\x09\xde\x6c\xe0\x54\x85\xdc\xe7\x9b\x25\x63\xbe\x61\x0c\x17\x8e\x89\x8a\xdd\x01\xb2\xd3\x56\x7f\xa9\x53\x71\x71\x0a\xad\x1a\xc7\x7d\xfd\xbe\x2d\x65\x49\xcc\x7b\x3c\x1c\x8b\xd3\xc6\x9a\xfb\x1d\x9a\xd4\x17\x16\x5c\x87\xbd\xd3\xed\x8a\xaa\x50\xa1\xd6\xfa\xa5\x47\x7d\xa9\x4d\xe5\xa2\x28\xd9\x24\x6d\x96\xbc\x7c\xc9\xe9\xfc\xa3\x90\x53\x30\x4d\xd8\xbb\xcc\xd1\xd9\xd7\x1b\x42\x44\x75\x35\x85\xfc\x75\x63\x89\xa6\xa2\x54\xbe\xef\x12\x61\xa1\x63\x47\xa3\xec\x6f\x30\x3f\xae\x63\xbf\x8e\xca\x50\x63\x1b\x46\xef\xc7\x7e\x81\x76\xdc\x8a\x91\xf1\x64\x71\x3a\xaf\xd5\xa8\xf7\xa3\x57\x90\xac\x50\xfc\xa8\xd5\x8c\x6f\x6f\x6a\x00\x63\xd7\x26\x52\xb2\xab\x29\x0c\x94\xc7\x72\x6d\x07\x74\xd6\x52\xf4\x9c\xea\xde\x53\x09\xe2\x22\x2c\xc2\x3b\x0f\x27\xf2\x70\x53\xa0\x0b\x71\x55\x56\xcb\xe9\xe0\x4a\xe5\xc8\x42\x7e\x80\x16\x6e\xd8\x04\xfd\xb0\xc8\x04\x77\xee\x9a\xa4\x24\xbb\x34\x71\xd9\xe6\xe5\x1f\xb4\xa6\x8f\xeb\xb9\x13\x9a\x8f\x1d\x3c\x9e\x80\x78\x23\x23\xf3\xd8\xa3\xcb\x5e\x48\xee\x57\x1b\x17\xdb\x4c\x25\xbb\x72\xed\x8d\xe4\x6d\x9b\xd7\xe8\x8d\xc7\x76\x89\xf4\x6e\xe8\x98\xca\x77\x6c\xc3\x94\x0c\x59\x4e\x5f\xb0\x94\xc9\xe9\xe2\x86\x9a\x62\x8c\x4d\xb6\xb9\x84\x04\xf6\xb7\xc5\xf9\xf2\x60\xd1\xc7\xcb\x01\xa3\xf1\x04\x77\x20\x34\xcf\x46\x69\x95\x6f\xd7\x68\x78\xe2\xbe\x5c\xea\xcf\xdc\xf5\x36\x09\x67\x9d\xb4\xc0\xdd\x6a\x5b\xbe\xcc\xd8\x03\x24\x0e\x7d\xc7\xa6\x9b\x39\xbe\xf2\xdd\x5c\x31\xe3\x20\xaa\x28\x7d\xbf\x5f\x80\x8c\x43\x78\xb3\x1e\x64\x99\xb5\xfc\x4c\x3c\x5b\x33\x59\x7a\x18\xd0\xcb\x12\xe3\xa7\x39\x3f\x48\x53\x43\x6c\x91\xb4\x4a\x77\xfb\x4d\x0b\x17\x11\x6d\x6b\x1f\x3f\xcb\xd2\xd4\xca\xe9\x11\x94\x2c\xd6\x95\xb1\x30\xa9\x95\x00\xbd\xde\xb1\xc1\xe8\xad\xea\xfd\x82\x68\xea\x8c\x6d\x69\xfe\x5e\xe1\x85\x2f\x71\x86\x7b\xee\x41\xe9\x16\xef\x6d\x5c\x1e\x04\x32\x29\x4a\x7c\x7c\x8a\x1e\x8b\xb9\xbe\xc6\x09\x68\x54\x5a\x88\x17\x8c\x26\x79\x28\xa3\xe7\x07\x7f\x51\xe4\x5a\x46\x92\x40\xb0\x97\x32\x19\x37\x30\x13\x17\x68\xbc\xa4\x26\x0f\x8e\x6f\x4f\xa0\xa3\x3a\xbc\x06\x22\xa5\x43\x4c\x6f\xd7\xc5\xac\x06\x69\x5d\xe9\xb6\xdf\xa2\x61\x11\xd2\x34\x2f\x77\xf6\x40\x42\x9e\xa6\xa9\x36\xd4\x44\x39\x37\x6c\xfc\xf0\xc0\x94\x4a\x8c\xc4\x8b\x1f\xcc\xaf\xe2\xc7\xbc\x72\x70\xd2\x69\x1e\xb3\x6d\x0f\x5a\xbb\x17\x4d\x72\xa0\x18\xb2\x15\x8e\x01\x71\xd7\xe8\x45\x0f\xb0\x1f\xcf\x3e\x74\xde\xa9\x13\xdc\xb5\xb0\x84\xdb\xd9\xbe\x82\x24\xd4\x8d\x9c\x50\x4d\x0c\xbb\x6e\x46\x34\xf0\x67\x06\xe2\x0b\xac\x26\xcd\xb8\x66\x80\x7c\x32\xbd\x70\x8e\x96\xbf\x60\xe8\x4c\x5c\x97\x42\xc3\x68\x09\x35\x2c\xe3\xe1\x74\xb8\x31\xae\xaa\x6a\x60\x14\xe3\x13\x33\x28\x9e\xa5\xc0\x79\xc8\xf8\x7c\x7f\x2f\xf2\x62\x83\xd9\x59\xc4\xaf\xbd\x5e\x6a\x17\x14\x46\x5e\x47\x96\x99\xe5\x53\x10\x4b\xb8\x4f\x75\x8e\xd7\xfc\x00\xdc\xd1\x82\x80\x68\x9b\x6b\x97\x10\x62\xde\x36\x7b\x64\x2e\xf3\x0e\xfb\x2c\x06\x46\xb2\xfc\x24\x70\xee\x7f\x0a\x0f\x9d\x5d\x6f\x9a\x52\x12\x23\xf4\xaf\x18\x24\x2a\xc5\xb7\xfb\x4a\xc4\xe0\x4e\x10\x65\x4e\xad\x73\x74\xbf\x16\xf3\x79\x62\x22\x64\x92\x2d\xb1\xc0\xd7\x10\x8f\xbb\xdb\xf4\xd7\xd2\x5a\x15\xf4\xf1\xd3\x59\xc6\x66\xe0\xc3\xcf\x55\x17\xaa\x82\xb0\x66\x8d\x49\x56\x46\x83\x5d\x13\x68\x23\x9b\xbe\xc5\x46\x03\x29\x2f\x7c\xcb\xbe\x67\xd8\x34\x3d\x54\xaf\x58\x50\x6b\x38\xff\x20\xd4\x13\x9c\x47\xa1\xe2\x9f\x96\xbd\x39\x9f\x77\xc9\xd2\xcb\xfd\xc0\x48\x51\x72\xc0\x99\x58\xb8\x18\x36\xa6\xf7\x89\xac\x49\x13\x6f\x70\xee\xeb\xc7\x9a\x96\xf6\x53\x10\x6e\xd8\xe5\x44\x28\x25\x14\xba\x55\x42\x8a\xed\x62\x71\x4c\x8e\x33\xb3\x9f\x6a\xba\x13\x37\x74\x40\x7c\x60\xd0\x33\xf0\xfe\x2d\x8f\xb3\xa2\x14\x8c\xe4\xf9\x25\x1d\xd3\xe9\x74\xf7\x5b\x94\x96\x20\x06\x5c\xf3\xa5\x0f\x41\xaf\x62\xe7\xd7\x1e\x43\xbf\xad\x5f\xe1\x25\x1e\x0b\xa6\xc6\x45\x98\x97\x74\x0a\x97\x09\x75\xa7\x17\x3c\x97\x96\x36\xe0\x03\x33\x4a\xc6\x03\x1f\xc7\x78\x78\x41\x66\x54\x87\x50\xf6\xd1\xad\xab\xf3\xcf\x22\xbb\xe9\x0a\xdb\xb2\xf1\x47\x6d\xbc\xec\x50\x8f\x05\x07\x6e\x6f\x91\x01\x65\xa1\x75\x62\x02\x88\xb5\xe5\x84\x0e\x43\xc3\x94\x26\x43\x60\x9c\xed\x61\x54\x3c\x37\x6a\xa6\xd2\x54\xbd\x56\xc3\xeb\x27\x71\x35\x7d\x02\xd1\xdd\x69\x1d\xe6\x2e\xcd\xcb\xf5\xfb\xf2\xd5\x17\xab\x2d\x5f\x1c\x35\x57\xdf\xcf\x70\x55\x2d\x52\xf8\x77\xc3\x8a\xfb\x34\x89\xd5\x56\xc3\x6b\x15\xbe\x51\xae\xaa\x77\x88\x40\xd4\x75\x32\x2a\xdf\xe6\xec\xdd\x28\x48\xbd\xf4\xf9\xf6\x6e\xd1\xa5\x95\x4a\x96\x7b\x80\x4c\x3e\x6a\x6c\xff\xb1\x12\x32\x51\x9f\x7e\x78\x0f\xb0\xe0\xeb\x03\xe1\x5e\xb1\x9e\x0a\xf5\x37\x3a\x2d\x94\x16\x04\xf5\x32\xd9\x70\x97\x4e\x56\x7e\x9a\xde\xa7\x8e\xc2\xc1\xb8\x00\x8b\xf2\x8a\xdb\x8d\xa5\xbb\x4d\x38\x1f\x11\xa2\xaf\xbc\xd6\x08\x7c\x6e\xdb\xbc\xed\xc6\xdb\xbb\x24\xf6\x7e\x8c\x8f\x49\x4e\xd9\x8f\xa2\x84\x40\x05\xff\x07\x5d\xf4\xc4\x13\x44\xf5\x38\x9e\x2e\x89\x65\x44\x89\x34\xfb\xaa\xbd\x24\x4d\x1a\x8e\x99\x6b\x25\xc5\x0a\x2b\x43\x67\xfc\x92\xcf\x38\x72\xb1\x9e\x7d\xc5\x59\x3c\xac\x9d\xf8\x10\x07\x35\xe7\xcb\x28\x6b\x04\xb9\x26\x3e\xcc\x65\x1a\x9a\x36\x2d\xf6\xb7\xdf\x4c\x34\x39\x6a\x52\x6d\x0d\x10\x44\x4f\x5e\xc4\xd8\x78\x05\xcf\x0c\xef\x54\x1c\x0a\xdd\x51\xeb\xcc\x01\xe2\x8a\x97\x1f\x1c\x53\xeb\x57\x36\xe2\xaa\xf6\x7f\xd8\x7b\xc8\x66\x51\xa5\x74\xd1\x79\x6e\x4c\x94\x5d\x3e\xed\x4a\x77\x16\x6a\x38\x62\xab\x72\x8d\x2f\xb7\x87\x92\x62\x78\xb2\xe1\x07\x0e\xef\x5d\x4a\x89\xeb\x8b\x27\xee\x01\xe9\x21\x1e\x38\x37\x8b\xe4\xea\x2b\x99\x3b\x63\xca\xec\x2a\xa0\xa1\x9e\x26\x8a\x02\x72\x8e\x77\xd0\xbe\xc1\x0f\x36\x8f\x45\x15\x98\xa1\x93\x15\xaf\x7b\xb7\xb1\x65\x5e\xaa\xed\x84\x50\xde\x54\x61\x7a\xe5\x4f\x7e\xf5\x9c\xc4\x22\x19\xa3\x5d\x58\x42\xe3\x8b\xcb\x8b\xf3\xaf\x0a\x57\xc4\x72\xbf\xcb\xd1\x20\x75\x6d\x0a\x42\x90\x5e\x1a\x4c\x58\xb0\xec\x97\xd9\x7c\xb5\xdc\xdc\x15\x46\x0f\xe2\x34\x62\x69\xbb\xa8\xbc\x6c\x8a\x16\xd7\xe1\xd5\x9b\x56\xec\x89\x69\x55\x75\x6b\x7d\xa5\xfd\xe8\x8d\x9c\xc9\xeb\xc6\x63\xf8\x43\x56\xba\x39\x73\x3b\x97\x9f\xcf\x4e\x55\x02\xaf\x52\xb1\x62\x23\xc7\x15\xd2\x8d\xde\xdd\xdc\x75\x32\x9b\x46\xa6\xc7\x07\x0d\xf1\x7c\xf0\xfb\x20\xc4\xb9\xe1\xf4\x34\x0c\x71\xa3\x2f\xbc\x7f\xb6\xbc\xb2\xd4\x78\x97\xe5\x44\x22\x91\x06\xa5\xb1\x73\xc7\x81\x9f\xb9\x73\x66\x35\xb6\x25\x72\x43\x83\xf4\x8a\x56\xc8\x0f\xa8\x43\x50\x56\x0a\x85\x66\xd7\x16\x9c\x64\xd7\x89\xe4\x4c\x33\xa9\x9f\xb5\xad\xad\x37\xba\x5d\x36\xc9\x09\xe7\xef\x27\xd1\x4f\x02\xdc\xab\xa0\x87\x88\xac\x44\x0c\x41\xe3\x60\x82\x4b\x7c\x0a\xc3\xd0\xf7\x5b\x6d\xe5\xbe\xd3\xbe\x56\xbd\x8e\x2e\x1d\x28\x57\x25\x1a\xee\xfa\x2f\x7d\xd5\x62\x5f\x9d\x45\x76\x50\xa7\xd4\x93\x2b\xb6\x67\xdb\x2d\x25\xda\x97\x14\x7b\xb9\xec\x5f\x6b\x96\x54\x8d\x55\x2b\x1b\xce\x58\x2b\xfb\xc9\xe1\xa4\x92\xb1\xb6\x58\xb3\x91\x43\x9b\xad\x18\x4e\xb2\xad\xf8\x3b\xdc\x5a\x79\x19\x6b\x09\x68\x1b\x51\x09\x94\xfa\x3d\x24\x9e\xa1\xe7\xdd\x42\xab\x3a\x82\x23\xc5\x95\x76\xc2\xdb\x67\xcd\x4f\x25\xc8\xaa\x0a\x66\xdb\xf5\xbe\x0b\x00\x16\x08\x8f\x11\x69\x95\x06\x40\x0c\x63\xcc\xcb\x67\xb2\x57\xca\x98\xb5\x5c\x81\xac\x98\x7d\xa9\xe7\xbe\x1e\x1e\x0b\xbe\x9f\x70\x2b\xb6\xa6\x5a\x79\x96\x81\x07\x9a\xd7\xab\xab\xbf\x7e\x04\x6b\xce\xbd\x0f\x9a\xff\x7f\x2d\xbf\x72\x6e\x1f\x18\x80\x68\x36\x01\xda\xff\xd0\x9f\x47\x7f\xf8\xc3\x1f\xfe\xf0\x87\x3f\xfc\xe1\x7f\x24\xff\x0b\xa0\x51\xa7\xb6\x00\x28\x00\x00\x01\x00\x00\xff\xff\x31\xac\x2c\xa1\x83\x18\x00\x00") func embdGdjTarGzBytes() ([]byte, error) { @@ -106,7 +127,7 @@ func embdGdjTarGz() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "embd/gdj.tar.gz", size: 6275, mode: os.FileMode(0644), modTime: time.Unix(1626665459, 0)} + info := bindataFileInfo{name: "embd/gdj.tar.gz", size: 6275, mode: os.FileMode(0664), modTime: time.Unix(1626673103, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9a, 0xa7, 0xa4, 0x2d, 0x14, 0xf4, 0x3b, 0xc1, 0xa7, 0xd2, 0x9, 0xa9, 0x19, 0xea, 0x40, 0x33, 0xd7, 0xa3, 0xaa, 0x8f, 0x75, 0x50, 0xd1, 0x6, 0x2a, 0x80, 0x4c, 0xff, 0x8f, 0xed, 0xc7, 0x81}} return a, nil @@ -224,6 +245,7 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ "embd/dojoConfig.yml": embdDojoconfigYml, + "embd/factory_2.0.3": embdFactory_203, "embd/gdj.tar.gz": embdGdjTarGz, "embd/setup-superuser.expect": embdSetupSuperuserExpect, } @@ -274,6 +296,7 @@ type bintree struct { var _bintree = &bintree{nil, map[string]*bintree{ "embd": &bintree{nil, map[string]*bintree{ "dojoConfig.yml": &bintree{embdDojoconfigYml, map[string]*bintree{}}, + "factory_2.0.3": &bintree{embdFactory_203, map[string]*bintree{}}, "gdj.tar.gz": &bintree{embdGdjTarGz, map[string]*bintree{}}, "setup-superuser.expect": &bintree{embdSetupSuperuserExpect, map[string]*bintree{}}, }}, diff --git a/godojo.go b/godojo.go index 1042fb9..cd4e735 100644 --- a/godojo.go +++ b/godojo.go @@ -24,7 +24,7 @@ import ( // Global vars var ( // Installer version - ver = "1.1.5" + ver = "1.1.6" // Configuration file name cf = "dojoConfig.yml" // Global config struct diff --git a/runner.go b/runner.go index 3ae56d8..69c6fae 100644 --- a/runner.go +++ b/runner.go @@ -11,6 +11,27 @@ import ( "time" ) +// OS commands to perform an action e.g. install DB from OS packages +type osCmds struct { + id string // Holds distro + release e.g. ubuntu:18.04 + cmds []string // Holds the os commands + errmsg []string // Holds the error messages if the matching command fails + hard []bool // Flag to know if an error on the matching command is fatal +} + +func newCmds(d string) *osCmds { + var o osCmds + o.id = d + return &o +} + +func addCmd(o *osCmds, cmd string, lerr string, hard bool) { + // Append command to existing list + o.cmds = append(o.cmds, cmd) + o.errmsg = append(o.cmds, lerr) + o.hard = append(o.hard, hard) +} + // TODO: Document this and/or move it to a separate package func sendCmd(o io.Writer, cmd string, lerr string, hard bool) { // Setup command diff --git a/targets.go b/targets.go index 9d0c791..4355804 100644 --- a/targets.go +++ b/targets.go @@ -27,14 +27,6 @@ type targetOS struct { release string } -// OS commands to perform an action e.g. install DB from OS packages -type osCmds struct { - id string // Holds distro + release e.g. ubuntu:18.04 - cmds []string // Holds the os commands - errmsg []string // Holds the error messages if the matching command fails - hard []bool // Flag to know if an error on the matching command is fatal -} - func determineOS(tOS *targetOS) { // Determine OS first tOS.os = runtime.GOOS diff --git a/ubuntu.go b/ubuntu.go index d802a6f..337ff13 100644 --- a/ubuntu.go +++ b/ubuntu.go @@ -6,6 +6,7 @@ import ( "io/fs" "io/ioutil" "os" + "strconv" "strings" "github.com/mtesauro/godojo/config" @@ -309,7 +310,14 @@ func ubuntuSetupDDjango(id string, inst *config.InstallConfig, b *osCmds) { traceMsg(fmt.Sprintf("Injecting file %s at %s", "setup-superuser.expect", inst.Root+"/django-DefectDojo")) _ = injectFile("setup-superuser.expect", inst.Root+"/django-DefectDojo", 0755) + err := patchOMatic(inst) + if err != nil { + traceMsg(fmt.Sprintf("patchOMatic failed with non-blocking error: %+v", err)) + traceMsg("A failure of patchOMatic may lead to a corrupt install - be warned") + } + // Django installs - migrations, create Django superuser + // TODO: Remove this switch to simplify switch id { case "ubuntu:18.04": fallthrough @@ -318,91 +326,82 @@ func ubuntuSetupDDjango(id string, inst *config.InstallConfig, b *osCmds) { case "ubuntu:20.10": fallthrough case "ubuntu:21.04": - b.id = id - b.cmds = []string{ - //"cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py makemigrations --merge --noinput", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py makemigrations dojo", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py migrate", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py createsuperuser --noinput --username=\"" + - inst.Admin.User + "\" --email=\"" + inst.Admin.Email + "\"", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && " + - inst.Root + "/django-DefectDojo/setup-superuser.expect " + inst.Admin.User + " " + inst.Admin.Pass, - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata role", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata product_type", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata test_type", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata development_environment", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata system_settings", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata benchmark_type", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata benchmark_category", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata benchmark_requirement", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata language_type", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata objects_review", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata regulation", - //"cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py import_surveys", - //"cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata initial_surveys", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py buildwatson", - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py installwatson", - "cd " + inst.Root + "/django-DefectDojo/components && yarn", - "cd " + inst.Root + "/django-DefectDojo/ && source ../bin/activate && python3 manage.py collectstatic --noinput", - "chown -R " + inst.OS.User + "." + inst.OS.Group + " " + inst.Root, - } - b.errmsg = []string{ - //"Initial makemgrations failed", - "Failed during makemgration dojo", - "Failed during database migrate", - "Failed while creating DefectDojo superuser", - "Failed while setting the password for the DefectDojo superuser", - "Failed while the loading data for role", - "Failed while the loading data for product_type", - "Failed while the loading data for test_type", - "Failed while the loading data for development_environment", - "Failed while the loading data for system_settings", - "Failed while the loading data for benchmark_type", - "Failed while the loading data for benchmark_category", - "Failed while the loading data for benchmark_requirement", - "Failed while the loading data for language_type", - "Failed while the loading data for objects_review", - "Failed while the loading data for regulation", - //"Failed while the running import_surveys", - //"Failed while the loading data for initial_surveys", - "Failed while the running buildwatson", - "Failed while the running installwatson", - "Failed while the running yarn", - "Failed while the running collectstatic", - "Unable to change ownership of the DefectDojo directory", - } - b.hard = []bool{ - //true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - //true, - //true, - true, - true, - true, - true, - true, + // Add commands to setup DefectDojo - migrations, super user, + // removed - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py makemigrations --merge --noinput", "Initial makemgrations failed", + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py makemigrations dojo", + "Failed during makemgration dojo", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py migrate", + "Failed during database migrate", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py createsuperuser --noinput --username=\""+ + inst.Admin.User+"\" --email=\""+inst.Admin.Email+"\"", + "Failed while creating DefectDojo superuser", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && "+ + inst.Root+"/django-DefectDojo/setup-superuser.expect "+inst.Admin.User+" "+inst.Admin.Pass, + "Failed while setting the password for the DefectDojo superuser", true) + + // Roles showed up in 2.x.x + if onlyAfter(inst.Version, 2, 0, 0) { + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata role", + "Failed while the loading data for role", true) } + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata product_type", + "Failed while the loading data for product_type", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata test_type", + "Failed while the loading data for test_type", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata development_environment", + "Failed while the loading data for development_environment", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata system_settings", + "Failed while the loading data for system_settings", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata benchmark_type", + "Failed while the loading data for benchmark_type", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata benchmark_category", + "Failed while the loading data for benchmark_category", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata benchmark_requirement", + "Failed while the loading data for benchmark_requirement", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata language_type", + "Failed while the loading data for language_type", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata objects_review", + "Failed while the loading data for objects_review", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata regulation", + "Failed while the loading data for regulation", true) + + // removed - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py import_surveys", "Failed while the running import_surveys", + // removed - "cd " + inst.Root + "/django-DefectDojo && source ../bin/activate && python3 manage.py loaddata initial_surveys", "Failed while the loading data for initial_surveys", + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py buildwatson", + "Failed while the running buildwatson", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo && source ../bin/activate && python3 manage.py installwatson", + "Failed while the running installwatson", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo/components && yarn", + "Failed while the running yarn", true) + + addCmd(b, "cd "+inst.Root+"/django-DefectDojo/ && source ../bin/activate && python3 manage.py collectstatic --noinput", + "Failed while the running collectstatic", true) + + addCmd(b, "chown -R "+inst.OS.User+"."+inst.OS.Group+" "+inst.Root, + "Unable to change ownership of the DefectDojo directory", true) } return } func injectFile(n string, p string, mask fs.FileMode) error { - loc := emdir + "setup-superuser.expect" + loc := emdir + n d, err := Asset(loc) if err != nil { return err @@ -418,3 +417,54 @@ func injectFile(n string, p string, mask fs.FileMode) error { return nil } + +func patchOMatic(inst *config.InstallConfig) error { + // If a source or commit install, do no patching + if inst.SourceInstall { + return nil + } + + // Check the install version for any needed patches + switch inst.Version { + case "1.15.1": + // Replace dojo/tools/factory to work around bug in Python 3.8 - https://bugs.python.org/issue44061 + w := bufio.NewWriter(os.Stdout) + _ = injectFile("factory_2.0.3", inst.Root+"/django-DefectDojo/dojo/tools", 755) + _ = tryCmd(w, + "mv -f "+inst.Root+"/django-DefectDojo/dojo/tools/factory.py "+inst.Root+"/django-DefectDojo/dojo/tools/factory_py.buggy", + "Error renaming factory.py to factory_py.buggy", false) + _ = tryCmd(w, + "mv -f "+inst.Root+"/django-DefectDojo/dojo/tools/factory_2.0.3 "+inst.Root+"/django-DefectDojo/dojo/tools/factory.py", + "Error replacing factory.py with updated one from version 2.0.3", false) + } + + return nil +} + +//onlyAfter(inst.Version, "2") +func onlyAfter(v string, major int, minor int, patch int) bool { + // Split up version + vBits := strings.Split(v, ".") + if len(vBits) != 3 { + traceMsg(fmt.Sprintf("Bad version string: %s sent to onlyAfter()", v)) + return false + } + + // Convert version bits + vMaj, _ := strconv.Atoi(vBits[0]) + vMin, _ := strconv.Atoi(vBits[1]) + vPat, _ := strconv.Atoi(vBits[2]) + + // + if vMaj < major { + return false + } + if vMin < minor { + return false + } + if vPat < patch { + return false + } + + return true +}