Hi everyone! It’s been a while since I posted anything, so I thought I’d give a fairly in-depth post about progress for the new WxFixBoot. You may have noticed I jumped the new version number to 2.0; there are a lot of major changes in this release. I’ve done a lot of work on this, so let’s start with the best bits.
WxFixBoot’s New GUI
The GUI is now entirely sizer-based, which means the windows can now be resized as you wish, and they will display better in general, especially with large font sizes.
As you can see, I did eventually decide to add an extra line of text on the splash screen, which is a nice touch. Not much else has been done though, so, moving on…
The Main Window
The Main Window looks more or less the same as it used to. Notably you now can’t accidentally try to start operations without selecting any, which gets rid of that annoying caveat. Thanks to the sizers, it looks sleeker and more organised too. There’s a fair bit that will change before the final release of this version though: I intend to extend functionality so the user can pick which filesystems to check, and (if he/she wants to), select more detailed options for each individual filesystem too. This means that the check boxes on the left may well become buttons at some point fairly soon, so I might have to reorganise this window to keep it looking good.
Disk Info Window
This hasn’t changed since my last post on WxFixBoot, but I thought you might like a picture 😀
I’m sure you can tell this has changed! I’ve gotten rid of the black lines on the GUI, and replaced them with the static line things you more often see. The reason I didn’t use them before was… erm… I forgot about them. 😀 I’ve renamed the whole window as “Settings Window” instead of “Options Window” cos I can, and using sizers has made everything feel a bit less cramped than before, and sleeker. Except for the bit near the bottom where the text is misaligned. 😀 I might fix that before releasing it. The bootloader timeout, default OS, and installed bootloader settings on the left hand side will probably move to the bootloader options window soonish, but I’ll be putting some more stuff there in place of those.
Bootloader Options Window
This one is more interesting, because it’s notably different, and slightly messy 🙂 You can’t select an EFI partition any more, for the very good reason that in rare cases you might have more than one if you boot more than one OS. So instead, there’s a slightly oversized rescan for bootloaders button to click on instead. In the near future, WxFixBoot will manage multiple different bootloaders for each OS, so there will be a big OS choice box near the top of the window to allow you to configure each bootloader in more detail (timeout, default OS, etc…). I’ll also get rid of some of the check boxes because they’re unnecessary and a bit confusing. You also can’t manually specify partition schemes any more, because autodetecting these isn’t a problem.
And finally… The Restore Window Thing
There’s always been something about this window which I don’t like very much. Even after switching it to sizers, it somehow looks… odd. It’s perhaps because the same layout (and almost the same code) is used for restoring both the boot sector (or EFI partition), and the partition table. I think I’ll get rid of the radio buttons at the top, because auto detect is fine, and maybe get rid of this window altogether at some point, putting the stuff here on Settings Window.
Other improvements since my last post
Starting with the most interesting/important ones:
- I have moved the rest of the startup scripts into their own package, and refactored them.
- All of the backend code has been moved and sorted into relevant modules, packages, and sub-packages (and a sub-sub-package!)
- In several places the existing code was bypassing some safety features, and this has now been fixed, for example:
- I have a wrapper for subprocess (starts external processes) which does stuff like log output and handle return codes, which was being by passed.
- I also have a wrapper for the mount function, which does boring stuff like unmounting stuff in the way, checking if the partition is already mounted, and so on. This was being bypassed and mount was being called directly.
- WxFixBoot no longer depends on the “df”, “grep”, or “find” commands, instead always using “mount -l”, python’s text processing features, and os.walk(). This speeds things up considerably in both the backend and on startup. Both are noticeably faster when running.
- The GetDevInfo package has been extended to get Filesystems Types and Partition Schemes.
- It also uses dictionaries now to organise the info it gathers, and it replaces some of the startup scripts, simplifying the code.
That’s more or less all the interesting stuff 🙂 The rest of it has been fixing small bugs, writing logger messages into the code, doing extra checks, refactoring code and fairly tedious stuff like that. If you really want to see all the boring stuff, you can look at the Github commit messages for my repository here.
Upcoming new features and improvements
There are still a lot of these to come! 🙂
Coming for Version 2.0~pre1 (first development release for 2.0)
- The GetDevInfo package will replace more of the startup scripts, making the startup even faster and the GUI more reliable.
- Support may be dropped for both the LILO and ELILO bootloaders, because they aren’t a popular choice, and they’re finicky and very difficult to set up and maintain.
- The dependencies on “lsblk”, and “parted” may be removed because I think the new device detection system can do/can be made to do what they do.
- More refactoring needs to be done with the backend code, and more logging messages need to be written.
- I’ll simplify the Bootloader Options Window, and redo the slightly glitchy code that enables/disables the items.
- Some other really important stuff that I have inevitably forgotten to write here. I’ll post on twitter (my username is @HamishTMB) when I remember this stuff 😀
Before the final release
I don’t plan exactly what I’ll do very far in advance, so in all probability I’ll do more than what’s written here, but here goes!
- The whole program will be adapted to store and access information in dictionaries, instead of global variables. At the time of writing, it’s using a sort-of mishmash of both with a lot of abstraction code to make it work for the time being.
- Doing the above makes it a lot easier to add other features such as:
- Detection of and support for more than one EFI partition.
- Detection of and support for modifying more than one bootloader for more than one OS, and hence:
- Booting the system using multiple bootloaders, instead of having a “master” bootloader (although you normally want just one controlling the system anyway).
- Selecting individual filesystems to check, and specifying options for each one if you want to.
- I will modify the windows some more (except perhaps the Splash Screen) to accommodate these changes.
- Remove CoreBackendTools().StartThreadProcess() in favour of using CoreTools().StartProcess().
- Have the nice carriage return output box feature I added in DDRescue-GUI v1.5, which makes the outputbox a LOT more helpful.
- In general, perform a lot more quickly and reliably than v1.0.2, even though that version is already pretty good really.
WxFixBoot has come a long way since my last post, and I’ll continue to work on it in the hopes of releasing the stable version soon! After that, I can finally start working on my next projects, one of which is a module/plugin-based, extendible mount-manager type thing. The idea is it allows you to configure the filesystems Linux mounts on boot. That doesn’t sound very helpful at first, but it’ll be able to handle NFS/FTP/SAMBA network shares and the like as well, and configuring those is not an easy thing to do on Linux at the moment. More on that later.
If you’ve liked this post, please leave me some feedback or send me a tweet (my username is @HamishTMB) to let me know 🙂 I’ll also get around to doing those aforementioned software reviews soon, and just as a heads-up, I’ll definitely do one on Ubuntu 16.04 and Mint 18.