03-26-2008, 07:00 AM | #1 |
Connoisseur
Posts: 68
Karma: 855
Join Date: Jan 2007
Location: Netherlands
Device: iLiad
|
Registry modifications
What is the best way to modify the registry?
So far, I've seen manual modification, which is not very useful for non-technical people. And I've seen shell scripts that use sed, which is not easy to undo during an uninstall. So, I've been thinking (just of the top of my head): What if we add a /mnt/settings/registry/applications and a /mnt/settings/registry/extensions directory, have our programs install partial XML files in there and then use another program, say update-registry, to merge those files into the registry? This would simplify both installing and uninstalling, since a package that has to update the registry just needs to contain a few extra files and call the update-registry program in its post-install and post-removal scripts. The update-registry program could just be a very simple shell script that cats a header, the files in those directories and a footer together to form the registry.xml file. The drawback is that this would not be compatible with programs that modify the registry.xml file directly (like the standard iLiad software), since those modifications will not affect the header/footer files. But I guess a more complex update-registry program could handle that. Is this just a silly idea? Is there a better way? What do you think? |
03-26-2008, 07:43 AM | #2 |
Addict
Posts: 281
Karma: 904
Join Date: Oct 2007
Location: Kent, UK
Device: iRex iLiad, Psion 5MX, nokia n800
|
I think this is a very good idea. I was thinking of offering a script solution for the dejavu install requested recently, but then got worried about breaking things especially if the user wanted to uninstall so I decided not to do it. A framework like this makes a lot of sense to me.
|
Advert | |
|
03-26-2008, 09:05 AM | #3 |
Addicted to Porting
Posts: 1,697
Karma: 7194
Join Date: Oct 2006
Location: Indianapolis, IN
Device: iRex iLiad, Nokia 770, Samsung i760
|
The problem is that the registry has a specific structure, and is constantly updated by the contentlister for recent documents, settings, etc.
I think your idea has potential, but It'll still be a lot of work... update-registry would have tear apart the existing registry file to:
I'm not saying it's impossible, but I think it'd be better if iRex could code some kind of extensions directory into the contentlister that would be parsed whenever it starts, so that no modifications to the registry would be needed. |
03-26-2008, 09:51 AM | #4 |
Connoisseur
Posts: 68
Karma: 855
Join Date: Jan 2007
Location: Netherlands
Device: iLiad
|
Yeah, uninstall was also a problem for me. The djvu viewer now does not have an automatic install. I could write one, but it would simple replace the registry with a backup from before the djvu install.
(Which is OK in most cases, but would break things if the registry got changed in the meantime). I agree that support from iRex would be ideal, but I guess that would take until the next firmware update, and I'm excited about developing for the iLiad now Concerning the updating of the registry: The script can get the line numbers of the lines containing with <applications> and </applications>, snip everything between those lines and replace it with what's in the /mnt/settings/registry/applications directory. And similarly for the extensionInfos section. That way any changes to other parts of the registry are unaffected. Furthermore, on first install of the update-registry package these sections of the registry.xml can be exported to a /mnt/settings/registry/applications and /mnt/settings/registry/extensionInfos directory to ensure that earlier settings from those sections are saved. The drawback here is that any direct changes to the applications or extensionInfos sections of the registry.xml file after installation of the update-registry package would be overwritten on every execution of update-registry. Splitting the sections into individual entries for each applications and file extension would indeed be nice. On one hand I think I would leave that for a later version, on the other hand I've always been a fan of designing things right the first time around. |
03-27-2008, 05:48 AM | #5 |
Connoisseur
Posts: 68
Karma: 855
Join Date: Jan 2007
Location: Netherlands
Device: iLiad
|
I found out that libxml2 is installed on the iLiad, so maybe we could use that to do some more sophisticated updating of the registry.
I also found some scripts in /usr/bin with the encouraging titles merge_registry_parts.awk, registry_convert_ini_xml.awk, registry_merge_xml.awk, registry_updates.sh. I have no idea what they do yet, but I'll look into it. EDIT: Hmmm, while I'm at it I might as wel use liberregxml, that seems to be the library that iRex uses to access the registry. Last edited by Martijn; 03-27-2008 at 06:33 AM. |
Advert | |
|
03-27-2008, 07:23 AM | #6 |
Addict
Posts: 281
Karma: 904
Join Date: Oct 2007
Location: Kent, UK
Device: iRex iLiad, Psion 5MX, nokia n800
|
If you want to stick to scripts and firends I once found xmlparse.awk but never got around to playing with it. Perhaps it would help?
|
03-27-2008, 10:49 AM | #7 |
Addicted to Porting
Posts: 1,697
Karma: 7194
Join Date: Oct 2006
Location: Indianapolis, IN
Device: iRex iLiad, Nokia 770, Samsung i760
|
I looked through the strings in liberregxml, but it doesn't seem like there's anything in there about adding or removing registry parts. It's mostly about updating sections of the registry and is likely called by the settings program...
However this could be useful: Code:
root@ereader:/usr/bin# awk -f merge_registry_parts.awk Usage: awk -v REGISTRY_NEW=registry_new \ -v delete_sections=sectionlist \ -v update_sections=sectionlist \ -v tweak_sections=sectionlist \ -f merge_registry_parts.awk registry_old registry_template registry_new = registry after update delete_sections = semicolon separated list of registry sections, see more as below update_sections = semicolon separated list of registry sections, see more as below tweak_sections = semicolon separated list of registry sections, see more as below registry_old = registry before update registry_template = registry template Merge algorithm for registry sections: 1. delete_sections sections are excluded from registry_new 2. update_sections sections are copied from registry_template to registry_new 3. tweak_sections sections in registry_old and registry_template are tweaked together to registry_new 4. other sections present in registry_old are copied to registry_new 5. other sections not present in registry_old are copied from registry_template to registry_new |
03-27-2008, 06:37 PM | #8 |
Connoisseur
Posts: 68
Karma: 855
Join Date: Jan 2007
Location: Netherlands
Device: iLiad
|
I looked at merge_registry_parts.awk. My awk is not very good, but it looks like it simply replaces anything between a certain start and end tag.
So this does not help when uninstalling an application. I took a look at libxml2 got a small program working that parses the registry and removes the JAVADJVU application and the extensions associated with it. It does leave an empty line in the applications section and two empty lines in the extensionsInfo sections, however. I'll see if I can fix that, generalize it, and make it fit for packaging. |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
FBReader Registry installer for 2.11 | Adam B. | iRex | 22 | 11-10-2013 01:38 PM |
Augen The Book - potential owner modifications to reader | rscudder | More E-Book Readers | 4 | 02-08-2011 11:12 AM |
Abiword with Registry Installer | Adam B. | iRex | 59 | 04-20-2010 07:44 PM |
need registry cleaner software? [Locked] | anni | Lounge | 7 | 01-23-2009 11:23 AM |
iLiad How to remark a line in registry.xml? | ericshliao | iRex Developer's Corner | 1 | 11-17-2008 09:37 AM |