 Let's continue with the configuring EasyBuild command. I hope the issues have been sorted out for everybody and that you have a working EasyBuild installation. So configuration is the next part in the tutorial. So as I already showed you, the default configuration we get for EasyBuild, which we can check with the show config option, is to do basically everything in .local. Since we have installed EasyBuild with pip install you dash dash user, we will also get the easy config files that come with EasyBuild in our home.local EasyBuild directory. So everything here is using the home.local, which is not very nice, especially not in an HPC context where your home directory may be very limited in terms of disk space. So we will configure EasyBuild to do things a little bit differently. How do we do this? So first of all, EasyBuild comes with a whole set of configuration settings that you can specify. They are all listed in AB dash dash help. And if you run this, and I will pack it to less so we can scroll through it. This is all the configuration settings you can set for EasyBuild. And there's a whole lot of them. Of course, not cover all of these in this tutorial. But it gives you an idea of the flexibility of EasyBuild where it provides lots of configuration settings for you to make EasyBuild behave in one way or another. The important settings here are the overall prefix used by EasyBuild. So by default this is tollerhome.localEasyBuild. And this prefix affects a bunch of other configuration settings. It determines the install part for software and modules. The build part, which is the location for the build directories that EasyBuild will set up to perform an installation. The source part, well, it will look for source files or download them into in case they are missing. The repository part is a sort of archive of easy config files you used to install software with. And the container part is where EasyBuild will generate container images if that's a feature you are interested in. So remember, the prefix is basically an overarching setting that affects many others. Now let's look at each of these separately. The install part, which is by default the same value as the prefix value, specifies the location where software will be installed and where modules will be generated. So this is shown here. The default value here is home.localEasyBuild. Software will be installed in this location in a subdirectory named software. Modules will be installed in a subdirectory named Modules. And actually in the modules, all subdirectories, since there are separate directories in here as well, as we will see later. There's a bunch of more information here. You can split these locations into entirely different locations, so not have software and modules together in one directory, but entirely separate. And that's not something we will do here in the tutorial. The build part is the location where EasyBuild will create build directories. So these are temporary directories where EasyBuild will build to the software before installing it into the proper installation location. And it's highly recommended to use a fast file system for this, which may help a lot in speeding up the installation. So typically, this is set to either Dev Shmem, which is a file system in memory, or a temporary location like Temp.DollarUser. In this case, we recommend using Temp.DollarUser because the amount of memory we have in AWS is a bit limited. And we may run into problems if we locate the build directories in the in-memory file system. The source part is the location where source files will be either automatically downloaded to or where EasyBuild will first look for source files before it tries to download them. So it's important to have this in a shared file system location as well. You can specify multiple parts in the source part. So multiple directories can be specified as a value here. The first directory will be where EasyBuild tries to download source files to. The other directories are basically read only. So it will only check there if something is already available before trying to download it. So you may have sources in your home directory together with sources somewhere in a shared file system that you don't have right access to. And EasyBuild can consider both before trying to automatically download something. The EasyConfig's archive is a separate directory that just has a copy of the EasyConfig files that we have installed with EasyBuild. So that's useful to reproduce installations later or to have an overview of which EasyConfig files were used for doing installations. And then the modules tool and module syntax, that's another configuration setting. So by default, as mentioned, EasyBuild will use Lmod as default modules tool. Lmod is based or is implemented in Lua, but actually supports both Lua and Tickle as module syntax. And you can configure EasyBuilds to use the Tickle syntax rather than the default Lua syntax it uses. And there's a small benefit in using Lua as module syntax. It makes the modules tool a little bit faster because it doesn't have to translate between Tickle and Lua. So that's the default setting Lmod as modules tool and Lua as module syntax. In this tutorial, we will not change this setting. The robot search part, which is also shown in the output of ShowConfig is the locations where EasyBuild will look for EasyConfig files whenever it needs them. We will get to this in the next section of the tutorial and the basic usage to see what that means and when EasyBuild will look for EasyConfig files. So in this case, it's fine to leave this as the default, we won't have to touch this. The module naming scheme determines how the modules that EasyBuild generates are named. There's the default here is the standard EasyBuild module naming scheme, which is a flat naming scheme. We will look at how a different module naming scheme can be used when looking at hierarchical module naming schemes. So for now, this is safe to ignore and we're just gonna use the default in the tutorial here. So this is a couple of settings that you can specify, the overall prefix, the install part, the build part, the source part, the location of the EasyConfig's archive, which modules tool and module syntax EasyBuild should use, the robot search part, which is the location where EasyBuild will look for EasyConfig files and the module naming scheme. Of course, there's a lot more configuration settings but we will not cover these or we will not cover most of these at least in the tutorial. The next part here is more details on the different configuration levels EasyBuild has. So EasyBuild can be configured in three ways, using configuration files, using environment variables, or using command line options to the EB command. So each of these corresponds to a configuration level. So there's three configuration levels. And every of the available configuration settings can be specified on each of these levels. There are no exceptions. These levels follow a particular hierarchy. So there's an order to this, which is important to realize. When you specify something in an EasyBuild configuration file, you're overriding the default values. When you specify a configuration setting through an environment variable, this value will be used, even if something else is specified in the configuration file. So environment variables have precedence over configuration files. And similarly, when you specify a command line option, this will be the value that is used by EasyBuild. No matter if an environment variable or the value is also specified in the configuration file. So command line wins over environment variables which win over configuration files. And there's an example here with a fictional magic configuration setting. That outlines this with a small example. The question that is popping up is the current directory part of the robot search path automatically, not really. So we will get back to this in the basic usage part. When you give the name of an EasyConfig file to the EB command, it will look in the current directory for that EasyConfig file. But it will not automatically look for EasyConfig files for dependencies in the current directory. So we have to tell the robot to do that. It will only look for EasyConfig file specified on the EB command in the current directory. So the current directory is not part of the robot search path. Configuration files are the bottom configuration level in EasyBuild. So you can use configuration files which follow the standard INE format, which we will not do here in the tutorial. We will mostly use environment variables to configure EasyBuild, but it's a bit easier to play around with. To get some starting point for creating a configuration file, you can use the EB-NAS-CONFIG-HELP option. So if you type this, if you type it to less, I can show you what it looks like. This will output a full configuration file for every possible configuration setting in EasyBuild, but with everything commented out. So each line here corresponds to one configuration setting that you can define different from the default. And each line also comes with a corresponding comment that also specifies the default value. So to enable debug logging here, for example, we would uncomment this line and set debug equals one to enable it. And there's a line like this for every possible configuration setting, including for example, so they are sorted alphabetically, which is also useful. For example, install part is listed here as well. Yeah, so this is install part which we mentioned briefly before where the default is the home directory.localEasyBuild. This is a good starting point. You don't have to figure out the syntax for a configuration file yourself. You can use the output of AB-config help. So this short section clarifies that there's a very important difference between EasyBuild configuration files and EasyConfig files. They are two entirely different things. So an EasyBuild configuration file is a way to configure the general behavior of EasyBuild. So to specify one or more configuration settings, things like which modules tools to you, which modules tool to use, where the location where software should be installed and so on. An EasyConfig file on the other hand, which we will show in the next part of the tutorial, specifies the details for one particular software installation. So things like the version of the software to install, the tool chain to use, and so on. So don't confuse these two. They are very different things, even though the name is somewhat similar. So for most of this tutorial, we will be talking about EasyConfig files. We will largely ignore using configuration files to configure EasyBuild. Then the next configuration level is using environment variables. So all these environment variables start with EasyBuild underscore and to map or to figure out which environment variable to define. You basically have to take the name of the configuration setting, which is in lower case in the output of eb-dash help, make it all uppercase, replace any dashes with underscores, and then add EasyBuild underscore as a prefix. So if you want to specify the module syntax, which is module-syntax, the name of the configuration setting is module-syntax. We make this all uppercase, we replace the dash with an underscore, which gives us module syntax and uppercase, and then we prefix it with EasyBuild underscore. So that gives us the name of the environment variable to define. If you make a mistake here, so if you either forget the underscore or just make a mistake, EasyBuild will pick up any environment variable that is defined with EasyBuild underscore and will complain if it cannot map it to the corresponding configuration setting. So you cannot accidentally not configure EasyBuild in a particular way if you use environment variables. Anything that has EasyBuild underscore prefix will be picked up by EasyBuild and will be mapped to a configuration setting. And then of course, the command line options, if you want to make very sure that EasyBuild will use a particular value for a configuration setting, you can always use a command line option because no matter if it's also specified somewhere else, whatever is specified on the command line will always win. So if we, for example, want to do a test installation of something, we can use dash dash install part on the command line and tell it to use temp user as an installation location. So that way we are sure that this is where EasyBuild will install the software and not somewhere else depending on the current EasyBuild configuration. So with the three levels and all these configuration settings, it may be a bit tricky to remember how EasyBuild is configured, which is why we added the dash dash show config option, which will tell you how EasyBuild is configured. So as I already showed you by default, everything is done in dot local. If you haven't set any environment variables or not using any configuration files, this is the configuration you will get, which is not recommended for obvious reasons. But as soon as you configure EasyBuild, like we are doing here, through creating an EasyBuild configuration file and the location considered by EasyBuild, so home.config.easybuild and then config.cfg is one of the locations where EasyBuild will consider EasyBuild configuration files. We're telling it here to use slash apps as a prefix by specifying this in a configuration file. We're telling EasyBuild to use temp user as the built part by specifying or defining the environment variable. And then we're also, like we did before, telling it to use temp user as the install part. If we run all of these, and I can actually do that here in the AWS environment, so we create the configuration file, we define this environment variable. Oops, not this. We define this environment variable and then we run this command, which also tells it to use slash temp as installation. Show config will give us a whole different view. So for the build part, it will tell us this was specified through an environment variable using the E, which is temp slash EasyBuild since EasyBuild is the name of the user here and the container image. The container part is derived from the configuration file through the prefix setting. This is apps containers, same for the package part, same for the prefix, same for the repository part and the source part. So all of these are derived from the prefix we have specified here. And then the install part itself was specified via a command line option. That's where the C stands for. So here the temp dollar user corresponds to this line temp EasyBuild. And the robot part is still the default. We didn't touch this at all. So this is still the default, which picks up the easy config files that come with the EasyBuild installation. So indeed this output matches with what is mentioned in the tutorial. Remember, show config, this is a very handy tool. If you're not sure how EasyBuild is currently configured, you can easily tell. Show config will only show part of the configuration settings. It will focus on a couple of important ones like build part, install part, robot part, source part. It will always show those. And then it will also show anything that's not set to the default. So for example, in this case, prefix suddenly appears while it didn't before because we have set the prefix to something that's different from the default. If you want to see the full configuration, the full active configuration, including all the default settings, you can run show full config, I guess. Yeah, so this will give you all the configuration settings and the corresponding value no matter whether it's the default value or not. And of course here they are sorted alphabetically which is useful as well. So there's one more exercise here in this part which is installing EasyBuild, which we already did before. This should say configure EasyBuild of course. So here the idea is to configure EasyBuild. Make sure you use the EasyBuild sub directory in home for everything, except for two things. The build directory should go and temp user and the locations to consider for source files should both consider EasyBuild sources in your home directory and slash EasyBuild sources which is in the root of the file system. But make sure that whenever EasyBuild wants to download source files, it does this in your home directory and not in slash EasyBuild. This is the main exercise here. And when you've managed to configure EasyBuild this way you can try a quick installation of a very simple software package to see if things are working correctly. Let's take a look at some of the questions. Is it hard to move away from environment modules and tickle to Lmod and Lua? Does it have any benefits? And the question was answered in the chat already. So very briefly, is it hard to move away from tickle? Not really because Lmod also supports the tickle format for environment modules. So you can start playing around with tickle or with Lmod rather without having to rewrite all your module files so that's useful. And Lmod does have a bunch of benefits on top of the standard tickle-based implementation. So it has a bunch of features that the tickle-based implementation doesn't have. Here make sure you properly configure EasyBuild as mentioned in the first exercise like this. Certainly the build directory is important and where EasyBuild will install software which should be Home EasyBuild. Since we're running behind on schedule, I will mostly skip the break that we had planned right about now since we're actually one part of the tutorial behind. So I'll try to zip through that a little bit more quickly. Let me spoil the answer of the configuring EasyBuild part. It's actually quite simple. This is part of the answer, at least. We can tell EasyBuild to use $HomeEasyBuild for pretty much everything by specifying the prefix configuration setting. And we can tell it to use temp user for the build directories by setting the build part configuration setting. In the exercise, we had one additional thing. So here we tell it to use EasyBuild sources in our home directory to download source files too and the first part to consider and it should also consider EasyBuild sources. This corresponds to setting this environment variable source path which can have multiple locations. So for the remainder of the tutorial, certainly these first two lines are highly recommended to use in your active configuration. So we'll do exactly this here, including the source path and if we run show config without any further arguments or options, this is what we should see. Almost everything is specified through an environment variable except the robot path which we did in touch. And everything is done in home username, in this case, EasyBuild and the EasyBuild sub directory in there except for the build path which is done in temp EasyBuild. This is the kind of output you should see in show config.