Friday, 2022-01-07

EmilienMstevebaker[m]: hey, happy new year :)00:26
EmilienMstevebaker[m]: i'm trying to get devstack+ironic working for some CI related to Gophercloud and since recently I'm having this error: https://paste.opendev.org/show/bMRr0OFT1VbloH9vJnRL/ I wonder if that rings a bell to you00:26
EmilienMiurygregory: ^ FYI00:26
*** rcastillo|rover is now known as rcastillo02:15
*** pmannidi is now known as pmannidi|brb02:55
holtgreweGood morning Ironic \o06:48
holtgrewedtantsur: Remember the VIF problem I had. This was caused by using "neutron" network interface instaed of "flat" ... I have not yet configured ironic-neutron interaction really.06:56
arne_wiebalckGood morning Ironic!07:30
manuvakery1Error: Detected change in error condition on node Intel-Xeon-E-2236G-01. Error enabling the console on node 8e00140b-0116-4a6b-94c9-a2159ac0407f. Reason: Console subprocess failed to start. Timeout or error while waiting for console subprocess to start for node: 8e00140b-0116-4a6b-94c9-a2159ac0407f. Command: shellinaboxd -t -p 36080 --background=/tmp/8e00140b-0116-4a6b-94c9-a2159ac0407f.pid -s /:991:988:HOME:ipmitool 07:45
manuvakery1-I lanplus -H 172.16.1.100 -L ADMINISTRATOR -U ADMIN -f /tmp/8e00140b-0116-4a6b-94c9-a2159ac0407f.pw sol activate. Exit code: 0. Stdout: '' Stderr: '[server] Failed to find any available port!\n07:45
manuvakery1getting above error while enabling console 07:46
manuvakery1when i tried to connect directly using IMPI its works well07:46
manuvakery1ipmitool -I lanplus -H 172.16.1.100 -U ADMIN -P ***** sol activate07:46
arne_wiebalckmanuvakery1: I do not know this part of the code in detail, but if it works like other IPMI interactions, Ironic may send the command and then waits for the effect (e.g. Ironic does not assume the power state was changed when the IPMI command was successful, but waits until 'power status' reports the node to be down).07:49
arne_wiebalckmanuvakery1: My point is that the manual command may look like it works, but the actual action is not done (and Ironic is timing out while waiting for it).07:50
arne_wiebalckmanuvakery1: So, I would suggest to have a look where Ironic is doing this command and check if there is a condition it is waiting for.07:51
arne_wiebalckmanuvakery1: No, sorry, I think this is sth else: re-reading your error message, this seems to be an issue with shellinaboxd not being able to find a port (this is also why your manual IPMI command works, your BMC interaction is fine).08:11
arne_wiebalckmanuvakery1: Maybe there is a shellinaboxd running already?08:12
holtgreweDear ironic, Is there any dead-tree book that you could recommend that is a bit more prose than the docs and not as comprehensive for all corner cases?08:19
rpittaugood morning ironic! o/08:27
rpittauTGIF!08:28
manuvakery1arne_wiebalck: thanks for your response.. you are right there was multiple shellinaboxd was running.. once i cleaned all i am able to enable the console well08:30
arne_wiebalckmanuvakery1: great :)08:37
arne_wiebalckgood morning rpittau o/08:37
rpittauhey arne_wiebalck :)08:40
ajyahappy Friday ironic08:51
arne_wiebalckhey ajya o/08:51
ajyaTheJulia: thanks, I'll take a look next week probably08:51
ajyahi arne_wiebalck 08:52
rpittauhey ajya :)08:53
ajyagood morning rpittau 08:53
arne_wiebalckmanuvakery1: you have shellinabox working with your nodes?09:01
manuvakery1arne_wiebalck: yes its working09:04
arne_wiebalckmanuvakery1: nice! does this require kernel boot parameters in order to work?09:05
manuvakery1yes i had to update the grub as follows to make it work09:08
manuvakery1#!/bin/bash09:08
manuvakery1for file in /etc/default/grub /etc/default/grub.d/*; do09:08
manuvakery1sed -i 's/ttyS0/ttyS1,115200n8/g' $file09:08
manuvakery1done09:08
manuvakery1update-grub09:08
manuvakery1reboot09:08
arne_wiebalckmanuvakery1: thanks! this is on the instance you deployed, right?09:09
manuvakery1yes 09:09
arne_wiebalckmanuvakery1: yeah, this was my understanding and one of the reasons why I did not try it: we would need to control the kernel parameters of the user's image to make this work09:11
manuvakery1arne_wiebalck: you are right .. even i could not find any other way to make it work09:12
arne_wiebalckmanuvakery1: I guess you could pass the above config via kernel boot parameters, no?09:12
manuvakery1also grub changes varies per distribution09:12
manuvakery1arne_wiebalck: i have tried passing it via kernal boot parameters but did not succeed .. not able to recall what exactly i faced 09:14
arne_wiebalckmanuvakery1: ok, thanks!09:14
manuvakery1arne_wiebalck: you meant using pxe_append_params right?09:16
arne_wiebalckmanuvakery1: one last thing if I may09:16
arne_wiebalckmanuvakery1: were the docs in https://docs.openstack.org/ironic/latest/admin/console.html useful/helpful to set things up?09:16
manuvakery1it was helpful but required more work related  using COM2 for SOL port and because COM2 translates to ttyS1 and update the grub config 09:21
dtantsurmorning ironic09:21
dtantsurholtgrewe: writing a book was something TheJulia and I pondered in the past, but it never happened09:22
opendevreviewArne Wiebalck proposed openstack/ironic master: [doc] Add note about shellinabox console enable error  https://review.opendev.org/c/openstack/ironic/+/82377809:38
holtgrewedtantsur: :-D09:48
holtgreweSo, now I have 239 ironic nodes. Does that count as a mid-sized installation already?09:49
holtgrewedtantsur: Yeah, my problem with OS is that it's hard to find good introductory books (Packt are really hit and miss) or courses.09:51
holtgrewe(with missing being more likely at Packt)09:51
dtantsurholtgrewe: I'd say 100-1000 is mid-size, yes :)09:52
dtantsurwell.. re books: I suspect that's because software vendors prefer to publish books on their products, and upstream communities don't have technical writers09:52
holtgrewedtantsur: ;-) yeah, I'm seeing these 1/100 cases failures ... but can still handhold them through09:53
holtgrewedtantsur: and also, OS is pretty well documented. I've seen worse documented commercial products (granted relatively niche). The commercial grid engine was ... well supported but training and docs were sub par.09:59
dtantsurthat's nice to hear (re well documented ofc)!09:59
holtgreweIt's just that it's too much.10:00
holtgrewe:-D10:00
holtgreweAnd hard to know where to start.10:00
arne_wiebalckIn that spirit, there are some open doc patches if someone wants to have a look :-D https://review.opendev.org/c/openstack/ironic/+/821685 https://review.opendev.org/c/openstack/ironic/+/821272 https://review.opendev.org/c/openstack/ironic/+/823778 10:01
arne_wiebalck"in that spirit" == "well document", not "too much" :-)10:02
dtantsurarne_wiebalck: I'm double-checking the whole statement in the 1st patch since "core deploy steps" is no longer a thing10:10
dtantsurokay, we do still have that, but it's only about deploy.deploy10:11
dtantsurmgoddard: hi! do you remember why we're preventing changing priorities of the "core" deploy step (aka deploy.deploy)?10:12
arne_wiebalckdtantsur: tbh, I did not look at the content, I just ran into the broken link by accident10:14
arne_wiebalckdtantsur: if the target is changed or removed, the patch can be abandoned ofc10:15
dtantsurarne_wiebalck: I've proposed the wording change, see inline10:15
opendevreviewArne Wiebalck proposed openstack/ironic master: [doc] Fix broken link in "Node Deployment"  https://review.opendev.org/c/openstack/ironic/+/82168510:19
arne_wiebalckdtantsur: thanks, updated10:19
arne_wiebalckdtantsur: and thanks for the reviews on the other patches10:27
dtantsursure10:27
opendevreviewMerged openstack/ironic master: [doc] Add parameters for burn-in log files  https://review.opendev.org/c/openstack/ironic/+/82127210:27
opendevreviewAija Jauntēva proposed openstack/ironic master: Add more sources to redfish firmware upgrade  https://review.opendev.org/c/openstack/ironic/+/82278111:33
iurygregorygood morning Ironic happy friday11:44
iurygregoryEmilienM, I will take a look o/11:44
opendevreviewAija Jauntēva proposed openstack/ironic master: Add more sources to redfish firmware upgrade  https://review.opendev.org/c/openstack/ironic/+/82278111:44
EmilienMiurygregory: thanks. Let me know if you find anything, I'm working on the PR for gophercloud where I pinged you11:55
iurygregoryEmilienM, sure!11:59
opendevreviewVanou Ishii proposed openstack/ironic master: [WIP] Deal with iRMC virtual media incompatibility  https://review.opendev.org/c/openstack/ironic/+/82379012:25
iurygregoryEmilienM, newbie question.. I'm trying to find neutron logs from the job https://github.com/gophercloud/gophercloud/runs/4732330343 any ideas where it would be? .-.12:35
EmilienMiurygregory: in https://github.com/gophercloud/gophercloud/actions/runs/1664963957 you click on one of the Artifacts, e.g. functional-baremetal-master and then you have logs in there12:45
EmilienMiurygregory: however I thought we were collecting the journal, but I don't see the file. I'll look at it12:45
iurygregoryEmilienM, ack, I saw that we have a commit from stevebaker[m] to improve the problem related to tap device, but it seems is not helping in the gophercloud scenario12:46
EmilienMiurygregory: oh I know why I don't have systemd logs, I'll resend a patchset to have it, if this helps12:47
iurygregoryso I'm wondering if could be the problem we had in neutron related to the firewall (just thinking out loud XD)12:48
iurygregoryoh nice!12:48
dtantsurmake sure you're not trying to use OVN12:48
EmilienMoh12:49
EmilienMI'm using devstack defaults12:50
dtantsurEmilienM: https://opendev.org/openstack/ironic/src/branch/master/zuul.d/ironic-jobs.yaml#L54-L5612:50
EmilienMand these overrides: https://github.com/gophercloud/gophercloud/blob/0735c975876addd65d9725faefe754813e794e7f/.github/workflows/functional-baremetal.yaml#L41-L6212:50
dtantsuractually, copying this definition is highly recommended12:50
iurygregoryoh right :D12:50
iurygregorywe don't like OVN :D12:50
iurygregoryor better, OVN doesn't like Ironic :D12:50
EmilienMok so I guess I can stop investigating and add that to my overrides12:51
iurygregory++12:51
EmilienMand hi dtantsur :) (and thanks)12:51
dtantsurEmilienM: also IRONIC_VM_SPECS_RAM=384 is too optimistic for year 2022 :(12:51
dtantsurI'd start with 1G and work you way down if possible12:51
iurygregory1G for tinyipa? we are already on this? O.o12:52
iurygregorywe don't test with DIB in gophercloud I think12:52
EmilienMiurygregory: I hope not12:52
EmilienMbut i'll update to 1024 in case12:52
dtantsurI think we *can* do 512M or even less, but I'd start with a safer value12:52
dtantsur1G is not for DIB, DIB requires at least 2.5G12:52
iurygregoryoh right IRONIC_VM_SPECS_RAM: 102412:53
iurygregoryfor tinyipa jobs :D12:53
dtantsuryeah12:53
dtantsurit's a bit more than needed, but it makes the jobs more reliable12:53
arne_wiebalckiurygregory: two doc reviews if you have moment: https://review.opendev.org/c/openstack/ironic/+/823778 https://review.opendev.org/c/openstack/ironic/+/82168512:58
iurygregoryarne_wiebalck, sure!13:00
EmilienMiurygregory: same error. I'm looking at logs13:19
iurygregoryEmilienM, ack I will check in a few (finishing some reviews)13:20
dtantsuriurygregory: please add https://review.opendev.org/c/openstack/bifrost/+/823671 to your plans if possible13:20
dtantsurwe've had a few people recently confused by our docs13:20
iurygregorydtantsur, sure =)13:24
*** rcastillo is now known as rcastillo|rover13:28
opendevreviewMerged openstack/ironic bugfix/19.0: Configure CI for bugfix/19.0  https://review.opendev.org/c/openstack/ironic/+/82233713:32
opendevreviewArne Wiebalck proposed openstack/ironic master: [doc] Add note about shellinabox console enable error  https://review.opendev.org/c/openstack/ironic/+/82377813:45
EmilienMiurygregory: I'm wondering if 20s can be too short, in some environments14:04
EmilienMI have collected the neutron logs: https://paste.opendev.org/show/b1yCOJ2gxBmtwBXolLP6/14:06
opendevreviewMerged openstack/ironic master: [doc] Fix broken link in "Node Deployment"  https://review.opendev.org/c/openstack/ironic/+/82168514:06
EmilienMi'm actually thinking it's because the network was not created, q-dhcp seems not deployed14:06
iurygregorylet me check the list of services we have enable in the job in ironic 14:07
iurygregoryI think 20sec would be enough since we also retry..14:07
EmilienMiurygregory: don't investigate yet, sorry for noise. Let me retry by making sure I ahve q-dhcp14:09
iurygregoryEmilienM, ack =) and don't worry because my timezone now is in Brazil so I still have some time to look today :D14:10
EmilienMiurygregory: oh cool. you have sun. I have snow.14:10
iurygregorysend snow please :D14:12
arne_wiebalckdtantsur: can you move this one fwd once more, please? (iurygregory spotted a missing ' which broke rendering in CI), so I had to push an update: https://review.opendev.org/c/openstack/ironic/+/82377814:12
arne_wiebalckEmilienM: iurygregory: just started snowing here, too :)14:13
iurygregory=(14:13
opendevreviewMerged openstack/bifrost master: Clean up the "How to" documentation  https://review.opendev.org/c/openstack/bifrost/+/82367114:18
dtantsurI really loved spending a week in the snow14:20
EmilienMdtantsur: did you have to shovel? or just enjoy the snow :D14:22
dtantsurEmilienM: does skiing count for shoveling? :)14:23
dtantsurI was in the alps for the holidays. There is little hope for snow where I normally live.14:24
EmilienMskiing doesn't count no, :D14:25
EmilienMI'm trying to run devstack/ironic on stable/train w/ python3 and it's using py2 for installing virtualbmc:14:27
EmilienMhttps://pipelines.actions.githubusercontent.com/VpcJmuZKqOQwnBakVAncoCADDbxjEFKEE2Y2lfgYJECEuVLego/_apis/pipelines/1/runs/842/signedlogcontent/3?urlExpires=2022-01-07T14%3A27%3A13.4250133Z&urlSigningMethod=HMACV1&urlSignature=xxW%2FLGU6BnwIRHjloq7xwndmyzNG68t7RPCsBiqYHc8%3D14:27
EmilienMhave you seen that error before?14:27
dtantsurTrain was long ago...14:27
EmilienM"ImportError: No module named _internal.cli.main"14:27
dtantsuryeah, it rings some bells, but nothing more than bells14:28
dtantsuryour link gives "Uri expired" btw14:28
EmilienMoh oops14:29
dtantsurwe did have some jobs with py3 on train14:31
EmilienMyeah https://opendev.org/openstack/ironic/src/branch/stable/train/zuul.d/ironic-jobs.yaml#L208-L21514:31
EmilienMand it's weird:14:31
EmilienM/opt/stack/ironic/devstack/lib/ironic:install_virtualbmc:800 :   USE_PYTHON3=False14:31
EmilienMUSE_PYTHON3=True14:31
EmilienMfrom the logs14:31
EmilienMit's like the ironic plugin doesn't read it right14:32
dtantsurEmilienM: https://opendev.org/openstack/ironic/src/branch/stable/train/devstack/lib/ironic#L79714:32
dtantsur:(14:32
arne_wiebalckdtantsur: ty14:32
EmilienMdtantsur: oops :/ ok now I understand14:32
dtantsurEmilienM: I wonder if you can work around it by adding pyghmi and virtualbmc to required-projects. potentially capping at some tag.14:32
* TheJulia attempts to wake up14:33
EmilienMhttps://paste.opendev.org/show/811966/ my error14:33
dtantsurfun14:33
dtantsurI think it's a half-installed pip14:33
dtantsurI see these things nearly every Fedora upgrade14:34
dtantsure.g. in 35 they updated to Python 3.10, so my packages installed into ~/.local/lib/python3.9 stopped importing14:34
dtantsurwhile ~/.local/bin/<foo> still existed14:34
EmilienMI'll try use_library_from_git14:34
dtantsurnot sure how that would work with 2.7 though14:34
dtantsurgood morning TheJulia 14:35
EmilienMTheJulia: o/14:36
dtantsurEmilienM: btw, you're running devstack on github actions? does it work well?14:37
dtantsurfor rust-openstack I'm using openlab zuul, but it hasn't been exceptionally stable recently14:37
EmilienMdtantsur: i'm moving out from openlab zuul14:38
EmilienMit has been terrible for us14:38
EmilienMand i created a devstack-action for github14:38
EmilienMhttps://github.com/EmilienM/devstack-action14:38
dtantsurfun14:38
EmilienMcheck this out https://github.com/gophercloud/gophercloud/pull/230714:38
dtantsurI'd probably migrate under the SDK project on opendev.org though14:38
EmilienMin 19m, I can deploy devstack and run acceptance test14:39
dtantsurwow14:39
dtantsurI was afraid it would exceed some quotas, e.g. on maximum run time14:39
EmilienMdtantsur: yeah we had a thread about it and people weren't happy with the idea, most of folks in gophercloud aren't opendev contribs and aren't happy with gerrit14:39
dtantsuryeah, I've been following it14:39
dtantsurwell, I'm pretty much the only contributor to rust-openstack, sooo :D14:39
EmilienMhttps://github.com/gophercloud/gophercloud/issues/225714:39
opendevreviewMerged openstack/ironic master: [doc] Add note about shellinabox console enable error  https://review.opendev.org/c/openstack/ironic/+/82377814:42
opendevreviewHarald Jensås proposed openstack/ironic master: Ensure 'port' is up2date after binding:host_id  https://review.opendev.org/c/openstack/ironic/+/82381114:48
EmilienMiurygregory: btw fixing neutron services worked fine :) the job is almost ready I think15:02
EmilienMiurygregory: trying to make it work on train and I think it's ready to go15:03
EmilienMdtantsur: the reason why gophercloud hasn't moved to opendev (yet) is because for non opendev contributors, the amount of things to figure out before sending a patch can be discouraging and our community is too small to afford any member lost.15:05
dtantsuryep, I can imagine15:05
EmilienMCLA, accounts, Gerrit, Zuul, Launchpad, etc. Not that I'm a fan of Github, but in this case "the best tool is the one you already use" would apply15:05
EmilienMI would be very happy if we move to opendev one day but for now this decision would have bad impact I suspect15:06
iurygregoryEmilienM, \o/ awesome15:11
* iurygregory is wondering why hexchat is not showing notifications when he receives a ping D:15:12
EmilienMdtantsur: installing vbmc from source solved the issue btw.15:13
EmilienMthx15:14
EmilienMiurygregory: I have an acceptance issue on train: https://github.com/gophercloud/gophercloud/runs/4739989972?check_suite_focus=true15:14
EmilienMFailure in nodes_test.go, line 103: unexpected error "Bad request with: [PUT http://10.1.0.77/baremetal/nodes/b63fd4a0-1176-4c1a-99fe-26928b189b9a/states/raid], error message: {\"error_message\": \"{\\\"faultcode\\\":\\\"Client\\\",\\\"faultstring\\\":\\\"RAID config validation error: {'size': '> 100'} is not of type 'string'\\\",\\\"debuginfo\\\":null}\"}"15:14
* iurygregory looks15:14
dtantsurI wonder if you need to set the maximum microversion15:14
iurygregorydtantsur, the test should set the microversion so it should be ok...15:16
iurygregoryhttps://github.com/gophercloud/gophercloud/blob/18a1ee5aa4850db7055aa5a125f606ac07ba668e/acceptance/openstack/baremetal/v1/nodes_test.go#L7615:16
EmilienMthat could be a bug in https://github.com/gophercloud/gophercloud/blob/master/openstack/baremetal/v1/nodes/requests.go15:17
dtantsurEmilienM, iurygregory, requesting a microversion does not make the feature availlable :)15:17
dtantsurI'm quite confident I wrote this feature after Train15:17
dtantsurunfortunately, this particular feature is not (?) microversioned15:18
EmilienMmaybe I should just skip this test > train15:18
dtantsuryes15:19
EmilienMclient.Microversion = "1.50"15:19
iurygregorydtantsur, ok now i see what you meant =)15:19
dtantsurEmilienM: 1.50 has nothing to do with RAID https://docs.openstack.org/ironic/latest/contributor/webapi-version-history.html#id1815:19
dtantsurI wonder where it's coming from15:19
EmilienMStephen Benjamin from OpenShift wrote this test (git blame)15:20
dtantsurI think it's enough to use 1.12 to deal with RAID15:20
dtantsurthat stbenjam :)15:20
dtantsurthis is arbitrary as well: https://github.com/gophercloud/gophercloud/blob/18a1ee5aa4850db7055aa5a125f606ac07ba668e/acceptance/openstack/baremetal/v1/nodes_test.go#L2115:20
dtantsurEmilienM: generally, https://docs.openstack.org/ironic/latest/contributor/webapi-version-history.html is your friend when you need to figure out the version you need15:21
EmilienMshould I skip this test on train? or bump anything?15:21
dtantsurEmilienM: just skip on Train (and consider setting microversions to realistic values)15:22
EmilienM1.12 instead of 1.5015:22
EmilienMgotcha15:22
opendevreviewHarald Jensås proposed openstack/ironic master: Add dhcp options for each ip_version once  https://review.opendev.org/c/openstack/ironic/+/82381715:28
opendevreviewDmitry Tantsur proposed openstack/ironic master: ImageCache: respect Cache-Control: no-store  https://review.opendev.org/c/openstack/ironic/+/82232915:28
opendevreviewHarald Jensås proposed openstack/ironic master: Add dhcp options for each ip_version once  https://review.opendev.org/c/openstack/ironic/+/82381715:29
opendevreviewHarald Jensås proposed openstack/ironic master: Add dhcp options for each ip_version once  https://review.opendev.org/c/openstack/ironic/+/82381715:33
dtantsurfolks, could you please review https://review.opendev.org/c/openstack/ironic/+/821219 since it has a high potential of conflicts?15:43
dtantsuralso the bifrost changes culminating in https://review.opendev.org/c/openstack/bifrost/+/820479/ would be cool to land15:44
iurygregorydtantsur, I will take a look after lunch o/16:01
dtantsurthx16:08
EmilienMiurygregory: when time permits (even next week), please have a look at https://github.com/gophercloud/gophercloud/pull/2308 - this is going to be the CI job to test Ironic on gophercloud. Covering all releases until Train.16:38
iurygregoryEmilienM, sure!16:51
arne_wiebalckbye everyone, have a good week-end o/17:10
jamesdentonare the IPA images available at tarballs.opendev.org sufficient for PXE booting a VM? 17:15
iurygregorybye arne_wiebalck o/17:15
iurygregoryjamesdenton, they should (dib images and even tinyipa since you mentioned VMs)17:18
iurygregorydon't use tinyipa if is a production env17:18
jamesdentongood to know17:18
jamesdentonthanks -- the dib images are working to boot an OS, but having some issues inside connecting back to the API17:21
jamesdentonprobably something on my side, i'll keep looking17:22
TheJuliacan I jusst sleep all weekend?!17:25
dtantsurTheJulia: I think it's a sensible idea17:30
dtantsurI'm pondering the same, maybe with one bouldering session in the middle17:30
dtantsurjamesdenton: the DIB images we publish are configured to try DHCP on all interfaces, so they should work in most cases17:31
jamesdentonthanks dtantsur - i think this might be an issue with me attempting to perform an introspection w/o a baremetal port for the node. Seems when IPA reaches out to API:5050 with POST, inspector API kills the connection. verifying now17:35
jamesdentoni'm assuming because it has no way to identify the node? i dunno17:35
dtantsurjamesdenton: kills the connection? check for firewall, selinux and http-https mismatch17:38
jamesdentonby kill i mean FIN17:38
jamesdentonsorry17:38
jamesdentonjust a premature FIN, though, i would think. because once IPA sends the payload then it gets RST17:38
dtantsuryeah, that's why I suggested firewall as the most likely source17:38
dtantsurinspector returns a normal HTTP 40? on failure17:39
jamesdentonalright, so it looks like this may be related to IPA sending to http vs https - all of the endpoints are https17:49
jamesdentonand i guess that's due to a bunk inspector.ipxe17:51
jamesdenton*facepalm*17:51
dtantsurtime to go, have a great weekend folks o/18:21
jamesdentonthanks for the help18:35

Generated by irclog2html.py 2.17.3 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!