iromlab icon indicating copy to clipboard operation
iromlab copied to clipboard

Add option to run Iromlab without a disc robot

Open bitsgalore opened this issue 6 years ago • 21 comments
trafficstars

This would be useful for manual procesing of carriers that failed the bulk workflow.

bitsgalore avatar Oct 02 '19 10:10 bitsgalore

I was wondering about this! I am only currently looking into iromlab and was hoping that it could be used without a robot, as I'm realising that the isobuster GUI doesn't do any logging at all!

kieranjol avatar Jun 15 '22 15:06 kieranjol

@kieranjol You might want to have a look at Iromsgl, which is a single-disc / no disc robot version of Iromlab. I only created it as an interim step towards Ipmlab, an Iromlab derivative for arbitrary portable media that I'm currently working on (this is meant to be used for imaging 3.5" floppies, and probably other storage media types later).

Since I only created this to bridge the gap between Iromlab and Ipmlab, I doubt we'll ever do any further development on Iromsgl, but it does give you all the Iromlab functionality without needing a disc robot.

bitsgalore avatar Jun 15 '22 15:06 bitsgalore

Oh my god this is great! I’d no idea it existed!

kieranjol avatar Jun 15 '22 16:06 kieranjol

@kieranjol That's probably because I only created this a few weeks ago. Note that all documentation applies to the "regular" version, and you might run into some minor issues, but the basic functionality seems to work OK.

bitsgalore avatar Jun 15 '22 16:06 bitsgalore

I saw that, is installation just downloading it and doing a local pip install . or something?

kieranjol avatar Jun 15 '22 16:06 kieranjol

Apologies, I realise now that you can just run the actual scripts on their own without installation!

kieranjol avatar Jun 15 '22 16:06 kieranjol

Yep, just clone the repo locally and then:

python3 iromlab-launch.py

I haven't even updated setup.py so local pip install won't work. Also I'm not sure if the configuration script works, because that's just the unchanged Iromlab script. You may have to set that up manually. Or, alternatively, first install (with pip) and configure the "regular" version of Iromlab (that way you'll at least have the configuration set up in the right place), and then edit it.

bitsgalore avatar Jun 15 '22 16:06 bitsgalore

Your tip to create the config.xml worked. I actually don't have an optical drive right now to test with but I got as far as the 'Not a valid optical drive' warning so I think I'm on the right track! Thank you so much.

kieranjol avatar Jun 15 '22 16:06 kieranjol

Great! For testing you could also use WinCDEmu which creates a virtual optical drive.

bitsgalore avatar Jun 15 '22 16:06 bitsgalore

That worked and it opened!! Once I set drive letter to D in the config, entered a title and hit submit, this appeared in the console - I don't have dbpoweramp installed as I'm not doing audio, and I just have plain free isobuster. If this is related to that, or me being stupid, I apologise in advance!

C:\Users\kieran.oleary\Downloads\iromsgl-main>python iromlab-launch.py
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\kieran.oleary\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:\Users\kieran.oleary\Downloads\iromsgl-main\iromlab\iromlab.py", line 358, in on_submit
    self.title_entry(state='disabled')
TypeError: 'Entry' object is not callable

image

kieranjol avatar Jun 15 '22 17:06 kieranjol

I'll try to have a look at this tomorrow, as I haven't tested Iromsgl with the <enablePPNLookup>False</enablePPNLookup> setting.

In the meantime, could you try this:

  • Close Iromsgl
  • In the config.xml, change the enablePPNLookup value to True (<enablePPNLookup>True</enablePPNLookup>)
  • Re-launch the application
  • In the PPN entry field, enter 155658050 (this is valid PPN identifier value)
  • Hit the Submit button, and let me know what happens.

bitsgalore avatar Jun 15 '22 17:06 bitsgalore

I ignored those earlier steps and just tried out your commit and it worked! Seems like it got really far, but it dies trying to store the isobuster log: Terminal output

C:\Users\kieran.oleary\Downloads\iromsgl-main>python iromlab-launch.py
Exception in thread Thread-3 (processDisc):
Traceback (most recent call last):
  File "C:\Users\kieran.oleary\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "C:\Users\kieran.oleary\AppData\Local\Programs\Python\Python310\lib\threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\kieran.oleary\Downloads\iromsgl-main\iromlab\cdworker.py", line 214, in processDisc
    resultIsoBuster = isobuster.extractData(dirDisc, 1, 0)
  File "C:\Users\kieran.oleary\Downloads\iromsgl-main\iromlab\isobuster.py", line 46, in extractData
    with io.open(logFile, "r", encoding="cp1252") as fLog:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\kb-87e5f0d6-ecd9-11ec-8263-909c4aba942c\\8d7a7f65-ecd9-11ec-a19b-909c4aba942c\\isobuster.log'

Config file

<?xml version="1.0"?>
<!-- iromlab configuration file. This file MUST be in the same directory 
as iromlab.py/ iromlab.exe! 
-->

<config>

<!-- Note on file paths: do NOT wrap any of the file paths below in quotes, even if they contain
   spaces! (the Python os.path libs don't seem to like this!)
-->

<!-- CD drive letter -->
<cdDriveLetter>E</cdDriveLetter>

<!-- root directory - this is the default search path for creating / opening batches -->
<rootDir>C:\</rootDir>

<!-- directory for storing temporary files -->
<tempDir>C:\Temp</tempDir>

<!-- prefix that is used to create batch names -->
<prefixBatch>kb</prefixBatch>

<!-- String that sets audio format. Permitted values: wav or flac. ONLY used for the audio verification, 
the ripping format must be set from dBpoweramp's CD Ripper tool (GUI) defined in the Windows registry  -->
<audioFormat>flac</audioFormat>

<!-- maximum number of seconds that iromlab will wait while trying to load a new disc 
this will prevent iromlab from entering an infinite loop if e.g. a disc cannot be loaded
properly because its is badly damaged
-->
<secondsToTimeout>20</secondsToTimeout>

<!-- host address that is used if socket API is enabled. Use 127.0.0.1 for localhost
-->
<socketHost>127.0.0.1</socketHost>

<!-- port that is used if socket API is enabled.
-->
<socketPort>65432</socketPort>

<!-- flag that -if False- disables PPN lookup. If False, PPN is set to empty string and
operator must enter descriptive Title field in UI
-->
<enablePPNLookup>False</enablePPNLookup>

<!-- flag that -if True- causes Iromlab to wait processing any discs until the operator
finalises the batch 
-->
<startOnFinalize>False</startOnFinalize>

<!-- flag that -if True- enables Iromlab to pick up Title and PPN info from a client
application through a socket interface 
-->
<enableSocketAPI>False</enableSocketAPI>

<!-- String that defines the format of the reports that are generated by IsoBuster
More info here: https://www.isobuster.com/tips/build_custom_lists_and_reports_via_gui_or_cmd
Important! Must be wrapped inside a CDATA section: https://en.wikipedia.org/wiki/CDATA
-->
<reportFormatString><![CDATA[{'DFXML (IsoBuster 4.2 version)'}{%UTF8}{%DFXML}{%GMT}{%FOLDERS}{%STREAMS}<%XMLHEADER><%BR><dfxml xmlns='http://www.forensicswiki.org/wiki/Category:Digital_Forensics_XML'<%BR> xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'<%BR> xmlns:dc='http://purl.org/dc/elements/1.1/'<%BR> xmlns:hfs='http://www.forensicswiki.org/wiki/HFS' version='1.0'><%BR><%BR> <metadata><%BR> <dc:type><%DEVICETYPE></dc:type><%BR> </metadata><%BR><%BR> <creator><%BR> <program><%APP></program><%BR> <version><%VERSION></version><%BR> <execution_environment><%BR> <start_time><%SYSTIMEDATE></start_time><!--GMT--><%BR> <os_version><%OS></os_version><%BR> <username><%USER></username><%BR> </execution_environment><%BR> </creator><%BR><%BR> <source><%BR> <device_model><%DEVICE></device_model><%BR> <image_filename><%DEVICEPATH></image_filename><%BR> <image_size><%DEVICEFILESIZE></image_size><%BR> <sectorsize><%DEVICEBLOCKSIZE></sectorsize><%BR> <devicesectors coding='base10'><%DEVICEBLOCKS></devicesectors><%BR> </source><%BR><%BR> <volume><%BR> <partition_offset><%PARTITIONLBABYTESOFFSET></partition_offset><%BR> <ftype_str><%TYPE></ftype_str>{%HEADER}{%FOLDER}<%BR> <fileobject><%BR> <filename><%RELPATH></filename><%BR> <name_type>d</name_type><%BR> <filesize><%BYTES></filesize><%BR> <alloc>1</alloc><%BR> <inode><%UID></inode><%BR> <mtime><%TIMEDATE></mtime><!--GMT--><%BR> <byte_runs><%EXTENTLOOP> </byte_runs><%BR> </fileobject>{%FILE}<%BR> <fileobject><%BR> <filename><%RELPATH></filename><%BR> <name_type>r</name_type><%BR> <filesize><%BYTES></filesize><%BR> <alloc>1</alloc><%BR> <inode><%UID></inode><%BR> <mtime><%TIMEDATE></mtime><!--GMT--><%BR> <hfs:HFStype_creator><%TYPE>/<%CREATOR></hfs:HFStype_creator><!--Only relevant if MAC File System--><%BR> <byte_runs><%EXTENTLOOP> </byte_runs><%BR> </fileobject>{%STREAM}<%BR> <fileobject><!--Stream or Resource Fork--><%BR> <filename><%RELPATH></filename><%BR> <name_type>-</name_type><%BR> <filesize><%BYTES></filesize><%BR> <alloc>1</alloc><%BR> <inode><%UID></inode><%BR> <mtime><%TIMEDATE></mtime><!--GMT--><%BR> <byte_runs><%EXTENTLOOP> </byte_runs><%BR> </fileobject>{%EXTENT} <byte_run img_offset='<%LBABYTEOFFSET>' len='<%BYTES>' />{%FOOTER} </volume><%BR><%BR> <runstats><%BR> <stop_time><%SYSTIMEDATE></stop_time><!--GMT--><%BR> <clock_seconds><%SYSTIMELAPSEDSEC></clock_seconds><%BR> </runstats><%BR><%BR></dfxml><%BR><!-- For more information: https://www.isobuster.com/reports -->]]></reportFormatString>

<!-- Below items point to the locations of all executables that are wrapped by Iromlab
-->

<!-- location of Nimbie drivers -->
<prebatchExe>C:\Program Files\dBpoweramp\BatchRipper\Loaders\Nimbie\Pre-Batch\Pre-Batch.exe</prebatchExe>
<loadExe>C:\Program Files\dBpoweramp\BatchRipper\Loaders\Nimbie\Load\Load.exe</loadExe>
<unloadExe>C:\Program Files\dBpoweramp\BatchRipper\Loaders\Nimbie\Unload\Unload.exe</unloadExe>
<rejectExe>C:\Program Files\dBpoweramp\BatchRipper\Loaders\Nimbie\Reject\Reject.exe</rejectExe>

<!-- location of isoBuster -->
<isoBusterExe>C:\Program Files (x86)\Smart Projects\IsoBuster\IsoBuster.exe</isoBusterExe>

<!-- location of dBpoweramp console ripper -->
<dBpowerampConsoleRipExe>C:\Program Files\dBpoweramp\kb-nl-consolerip.exe</dBpowerampConsoleRipExe>

</config>

Folder created sans ISO:

kb-87e5f0d6-ecd9-11ec-8263-909c4aba942c.zip

and the iso I used for testing was: http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/mini.iso

kieranjol avatar Jun 15 '22 18:06 kieranjol

Actually it's weird, that file is indeed there and it has just a value of 0. No idea why python can't open it. Tried this seperately

>>> a =  'C:\\kb-87e5f0d6-ecd9-11ec-8263-909c4aba942c\\8d7a7f65-ecd9-11ec-a19b-909c4aba942c\\isobuster.log'
>>> import os
>>> os.path.isfile(a)
True
>>> import io
>>> with io.open(a, "r", encoding="cp1252") as fLog:
...     log = fLog.read()
...
>>> print(log)
0

kieranjol avatar Jun 15 '22 19:06 kieranjol

I ran into that with Ipmlab as well (fixed that), so I just applied the same fix to Iromsgl: https://github.com/KBNLresearch/iromsgl/commit/2e61bd252d9a67d1ab49f2eebcaacbc1a1b4d592

Let me know if this works! (Very strange error though, and I don't quite understand how this is even possible. Perhaps the log file is created by some subprocess of Isobuster that hasn't quite finished yet by the time my code tries to open it, no idea!)

bitsgalore avatar Jun 15 '22 19:06 bitsgalore

Your explanation makes perfect sense about the threading causing the timing to be off. I’m afk so might not be able to test until tomorrow but thank you so so much again. You’re such a huge benefit to our community and work!

On Wed 15 Jun 2022 at 20:19, Johan van der Knijff @.***> wrote:

I ran into that with Ipmlab as well (fixed that), so I just applied the same fix to Iromsgl: @.*** https://github.com/KBNLresearch/iromsgl/commit/2e61bd252d9a67d1ab49f2eebcaacbc1a1b4d592

Let me know if this works! (Very strange error though, and I don't quite understand how this is even possible. Perhaps the log file is created by some subprocess of Isobuster that hasn't quite finished yet by the time my code tries to open it, no idea!)

— Reply to this email directly, view it on GitHub https://github.com/KBNLresearch/iromlab/issues/97#issuecomment-1156836517, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAITFPRMJDK5CCQE642E2FDVPIUEBANCNFSM4I4ULW7A . You are receiving this because you were mentioned.Message ID: @.***>

kieranjol avatar Jun 15 '22 19:06 kieranjol

Your commit worked! I needed to add one more config call and then I think I finally got to the end of the process! https://github.com/KBNLresearch/iromsgl/pulls#4

kieranjol avatar Jun 15 '22 23:06 kieranjol

Perfect, I just merged your pull request (and applied the same fix to Ipmlab, which has the same problem).

bitsgalore avatar Jun 16 '22 10:06 bitsgalore

By the way, while working on the Ipmlab code I made several changes/improvements to the UI behaviour (especially to avoid strange things happening when you press the Quit button while some process is still running, etc.). I will probably patch those back into Iromsgl at some point, but that might take a while (I don't think I've quite nailed it yet in Ipmlab).

bitsgalore avatar Jun 16 '22 11:06 bitsgalore

It would be great to get those patched back. Is there any chance that lpmlab could get the non robot functionality of iromsgl? Or perhaps iromlab gets that functionality? I’d make a stab at doing so for iromlab if I thought it was doable.

kieranjol avatar Jun 16 '22 17:06 kieranjol

Ipmlab is non-robot by default, because I'm not aware of any robot devices for floppy disks (or other portable media). So basically Ipmlab is really similar to Iromsgl, but just without the optical-media specific stuff.

bitsgalore avatar Jun 16 '22 18:06 bitsgalore