Burning UDF 2.01 File Systems under Linux using a Script

In certain earlier postings, I wrote about the possibility of burning Blu-rays using the UDF File System, but using the GUI-application ‘K3b’, under Linux. One big problem with this approach was, that the version of UDF being applied was only 1.02, and that it was part of an ISO9660 / UDF bridge-format, which the earliest ISO9660-capable devices are able to read because of the ISO9660 backwards-compatibility, but which would present some of the error-correction capabilities that UDF is supposed to offer, to more-modern devices, via UDF 1.02 .

The issue with this would be, that UDF 1.02 may still not be robust enough, in its error-correction, and that we wish to burn UDF 2.01 File Systems, using open-source software, under Linux.

(Edit 10/22/2017 :

Actually, my recent findings seemed to suggest, that if we use ‘cdrecord’ to burn a Data-Disk Project, the UDF version it applies may already exceed that standard. )

This posting will describe how such a File System can be written using a script, which I have tested myself, but which does not offer any type of GUI at all.

First of all, in order for this to work, our Linux computer needs a reasonably recent Kernel version, because what the script will do is create an empty UDF File System, and then mount that as a loop-device, so that the same script can batch-copy the contents of the Present Working Directory, (the PWD, as it’s called under Linux,) to this File-System, after which the FS is unmounted, and burned onto a Disk.

If our Kernel-version is not recent, then to mount and/or to batch-copy may fail, and for no other reason. I’ve tested this to work using Kernel version ‘4.4.0-30-generic’, which is by far not the standard Kernel-version that my Debian / Jessie repositories would offer.

Another prerequisite is, the package called:

‘udftools’

Which we would use to create the empty File System, but which we won’t be using to do anything other than that. ‘udftools’ can be installed using our standard Debian package-manager, and offers support up to UDF 2.01 as its maximum. This package also contains the commands for growing a UDF File System, ‘wrudf’, but because I did not trust the package-version of UDF being offered, I chose not to use it. ‘wrudf’ is supposed to work somewhat like the ‘growisofs’ command would work, within a GUI-application such as K3b, but K3b does not recognize it out-of-the-box. In fact, I do not envy anybody, who needs to use ‘wrudf’ to grow their UDF File System.

This is the script which I have tested:

 

#!/bin/bash

if [ ! -e "/dev/sr1" ] ; then
	exit 1
fi

if [ ! -x "/usr/bin/mkudffs" ] ; then
	exit 1
fi

if [[ $UID -ne 0 ]] ; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

rm -f /tmp/image.udf

echo "Creating Sparse File..."
truncate -s 24G /tmp/image.udf

echo "Formatting File System..."
mkudffs --media-type=dvdram --spartable=2 --vid="BD_$1" /tmp/image.udf || \
	exit 1

echo "Mounting File System..."

mkdir -p /media/udfimage || exit 1

mount -t udf -o loop,rw /tmp/image.udf /media/udfimage
rm -rf /media/udfimage/lost+found
chown -R root:root /media/udfimage

echo "Writing to File System. This may take some time..."
cp -rf ./* /media/udfimage

echo "Unmounting File System..."
umount /media/udfimage

echo "Burning File System. This may take some time..."

unset SUDO_COMMAND
export GENISOIMAGE=/usr/bin/genisoimage

growisofs -dvd-compat -Z /dev/sr1=/tmp/image.udf

echo "Cleaning Up..."
rm -f /tmp/image.udf

eject
echo "Done."


 

There are a few observations about this script, which anybody would wish to know about, who might want to use it. First of all, this script will expect one command-line argument, which is going to be prefixed with the string ‘BD_’ and then applied as the volume-ID of the file-system to be created. This will appear on computers, and on some playback-devices, as the name of whatever disk we have inserted. The exact naming is not critical, just as the exact naming for ISO9660-based Volumes may not be critical. It’s a formality which should be taken care of.

Secondly, this script expects to be run while the PWD is whatever directory we wish at the root of our created File System, and expects to be run as root. This poses an obvious security gap, as anybody could use this script in order to burn a copy of a folder, which he or she never had permission to read, if he could get root privileges with this script.

I have done my best to allow this script to be run using ‘sudo’, if it was placed in my system-directory:

‘/usr/local/bin/UDF-Burn.sh’

But, I have never tested whether it can be made to run using ‘sudo’ in this way. It might not, because it consists of a shell-script, which might only cause the script-interpreter to be elevated to ‘root’, but not all the commands within the script! My readers may test this as they wish, but since I’m the only real user of my own computers, I’ve always just felt comfortable to make myself ‘root’, and then just to run this script.

In the interest of allowing this script to be run via ‘sudo’, I have set the variables ‘SUDO_COMMAND’ and ‘GENISOIMAGE’ as would be appropriate. This has to do with the behavior of ‘growisofs’ to use an external helper, in order actually to grow certain types of File Systems, and an unscrupulous user could run this as ‘sudo’, and could set this external command to be anything he wanted it to be. It would allow an unscrupulous user to execute an arbitrary program as root, if my script did not take care to re-set this variable to the correct path.


 

The reader may be reassured to know, that by default, if one of his scripted commands throws an error, the execution of the script will continue after that command, as if nothing had gone wrong. This discovery actually cost me several blank disks, until I had sprinkled a few error-checking commands into it.

Hence, the output which the user sees could be:

Error: ‘/tmp/image.udf’  Is A Directory

After which Bash will try to keep running the rest of the script… And then, the next important question becomes, whether the ‘mkudffs’ command can eventually still execute successfully, which I did bracket, If it cannot store the File-System Image it creates at that location…

I also figured, that I was more likely to uninstall the package ‘udftools’ by accident, than I was, eventually to downgrade the kernel, on a computer which I had already established, could mount a UDF 2.01 File System correctly. But, if the reader has such fears, he can also just add:

|| exit 1

To the mount command…


 

I suppose another observation I should add about how this script will behave, is that it will create an empty, 24GB File-System Image right off the bat, and start to build the data within. A possible nuisance, because this would represent the total amount of raw space that a device would hold – unformatted – and the entire 24GB will be written to the Blu-ray disk every time the script is used, regardless of how little data we might actually want written to the disk. I chose 24GB because the true amount of raw space on a single-layered Blu-ray is actually ~24.8GiB, and the format does not allow for fractional values to be put on the command-line. So for our purposes, we only have 24.0GiB of raw, unformatted space to work from.

I suppose I could have sat down with a calculator, to determine that 24.7GiB ~= 25292MiB …

(Updated 10/24/2017 : )

Continue reading Burning UDF 2.01 File Systems under Linux using a Script

UDF-Capable Disk Burning with K3b and Debian / Stretch

According to This earlier posting, I was using a Debian / Jessie laptop, the first part of which is also known as Debian 8, to burn UDF-Capable Blu-ray Disks, given an external Blu-ray burner, and that version of Linux required help. Specifically, I needed to modify the way K3b behaves, by uninstalling the package ‘wodim’, which provides ‘cdrkit’, and by custom-compiling ‘cdrtools’, which is meant to act as a drop-in replacement for ‘cdrkit’, except for the fact that for the moment, ‘cdrtools’ was more powerful than ‘cdrkit’.

Under Debian / Stretch, which is also known as Debian 9, ‘wodim’ is not suggested by ‘K3b’ anymore, but rather a required dependency, for which reason to uninstall ‘wodim’, would also uninstall K3b. And so I needed to know, whether the package-provided version of K3b, and all its dependencies, could still burn Blu-rays via the GUI.

And the short answer is that Indeed, under Debian / Stretch, the packaged software has the required capabilities, so that to try to modify the behavior of K3b ( v2.0.3 ) is not only a bit risky, but totally unnecessary.

I created a Data-DVD Project – which we would also do for Blu-rays, and then burned that onto a DVD+R with 3 sets of options:

  1. File System = “Linux+Windows”, back-end = ‘growsiofs’
  2. File System = “UDF”, back-end = ‘growisofs’
  3. File-System = “UDF”, back-end = ‘cdrecord’

What I next did, was to run the command ‘df -T /dev/sr0′ , after mounting each disk via the GUI, both actions as a regular user. I found that options (2) and (3) both showed up as a “udf” file-system, while option (1) showed up as an “iso9660″ file-system.

This is as much, as custom-compiling ‘cdrtools’ could do for the user. Also, when going into the Programs settings of K3b, the full range of supported back-ends shows up as being available. Using burning-options (3) above, starts out the dialog with “Using Wodim” in the GUI, but all 3 settings still show me in the K3b GUI, “Burning ISO9660 File System”.

(Updated 10/23/2017 :

screenshot_20171023_173754

If this is to be used seriously for burning Blu-rays, then there is something which the user should further know.

Continue reading UDF-Capable Disk Burning with K3b and Debian / Stretch

LXDE and Plasma 5 .desktop -Files don’t meet the same requirements.

I’ve just switched a Linux computer of mine from the LXDE to the Plasma 5 desktop managers, because Plasma 5, the successor to KDE 4, is infinitely more-powerful. But then there were some issues with the transition, that may be relevant to my readers, if the readers also wish to switch desktop-managers, on an installed Linux computer.

One fact which I learned, was that even though LXDE and Plasma 5 both use .desktop -Files to launch applications, each system’s .desktop Files are different.

There is a directory named:

‘~/.config/autostart’

In which we find .desktop -Files that are to be run when the user first logs in. And we may find that the initial log-ins don’t run those files:

screenshot_20171017_083544

Also, because the configuration in question is just a set of files, trying to click on these entries  in the Plasma 5 settings center does not enable them.

One main reason for which this happens, is the fact that the professional who set up these configuration files, gave the original ones a line that goes like this:

OnlyShowIn=XFCE;LXDE;LXQt;

On my system, this fact was a life-saver, because the LXDE version initially had Compiz installed, which is a fun compositor, but which is not compatible with KDE or Plasma 5. If that had launched, it would have messed up my first attempt to establish a Plasma 5 session.

But there exist other applications which I’d want to have run, even if I’m logging in to Plasma 5, for which reason I used the GUI, to create a Plasma 5 -compatible launcher for the script that updates my version of Flash to the latest version:

screenshot_20171017_083357

And I edited-in a line with a text-editor, which now goes:

OnlyShowIn=KDE;

The exact appearance of the icons here is purely coincidental. But if we wanted to transfer such scripts to:

‘/etc/skel’

Then a big problem for a user like me would be, that scripts which we created in our own home-folders, are likely to contain configuration-details, which will only work for the one user who created them. And so I kept this .desktop -File spartan, to make sure that it will work, regardless of whose home-folder it eventually ends up in.

Dirk

 

I just Kiboshed my Last Remaining Windows Computer…

As it last stood, I still possessed one remaining Windows computer, which was a 64-bit Octa-Core (threaded as 4) running Windows 7, a tower-computer which has 12GB of RAM, and which I had named ‘Mithral’.

I finally completed my conversion, kicked Windows off that computer, and installed an up-to-date Linux desktop onto it.

The distribution which I chose to start with, was ‘Kanotix‘, which I have been subscribing to for decades now. However, I cannot name this installation a direct Kanotix installation. The reason for this is the fact that the last Kanotix version which their team distributed a ‘KDE’-based version of, was called “Kanotix Spitfire”, and was based on Debian / Jessie, which is also known as Debian 8, and which is not state-of-the-art. Kanotix has been offering a leaner version of all their distributions, which use ‘LXDE’ as their desktop manager, for some time now, starting with ‘Spitfire’. Their latest distribution is called “Kanotix Steelfire”, is based on Debian / Stretch, aka Debian 9, but is only offered from their site as an LXDE-based version.

LXDE stands for ‘Lightweight X Desktop Environment’, and what was ‘KDE version 4′, has been replaced with ‘Plasma 5′, although the last time I checked, there was still no official Plasma 5 -based ‘Kanotix Steelfire’ version.

And so what I did, was to install their LXDE-based version of ‘Steelfire’, and then to use the Debian package-manager to click together an arbitrary Plasma 5 Desktop Manager, which I was also able to actualize as my new Desktop Manager.

screenshot_20171015_183411

Right now I don’t have much installed on it, except for Plasma 5, but more software is to come. The screen-shot above, also prominently shows the ‘gkrellm’ widget, that gives me real-time usage-data, that all my Linux-based systems have, except for the one tablet.

When I install a whole new O/S, I also change the name of the computer in question. The one I’m writing about is now named ‘Plato’. ‘Mithral’ is no longer with us.

It’s not necessarily a good practice for novice users, ‘just to click together’ a Desktop Manager in this way, because there may be compatibility issues which specific users are not aware of. For example, the new Kanotix version, just like all of Debian / Stretch, no longer uses ‘kdm’ to start and stop sessions, as a starting-point for causing Plasma 5 sessions to run. I found that I was able to overcome the hurdles, but then the Plasma 5 version Kanotix is about to recommend in the future, may not be an exact match of the one I ‘created’. In fact, it most-probably won’t be.

But what I have works.

(Edit 10/17/2017 : )

Continue reading I just Kiboshed my Last Remaining Windows Computer…