Browsed by
Category: Linux

Couldn’t delete a failed R package installation

Couldn’t delete a failed R package installation

Today I faced a strange thing, while I tried to install an update to one of my R-packages. As usually, I installed the latest version from it like this

library("devtools")
install_github("fischuu/GenomicTools")

But the installation failed, and when I tried to reinstall it, I got this error message:

Installing package into ‘/homeappl/home/<user>/R/x86_64-redhat-linux-gnu-library/4.1’
(as ‘lib’ is unspecified)
ERROR: failed to lock directory ‘/homeappl/home/<user>/R/x86_64-redhat-linux-gnu-library/4.1’ for modifying
Try removing ‘/homeappl/home/<user>/R/x86_64-redhat-linux-gnu-library/4.1/00LOCK-GenomicTools’
Warning message:
In i.p(...) :
  installation of package ‘/tmp/Rtmp<...>Lv/file3c36<...>34/GenomicTools_0.2.11.tar.gz’ had non-zero exit status

So, I tried to go in said directory and delete the folder manually and there I received another error:

rm: cannot remove '00LOCK-GenomicTools/GenomicTools/libs/.nfs00000001002e2<...>d': Device or resource busy

I tried this and this, but nothing helped to delete that folder, it kept mocking my that the device is busy. Eventually, it helped just to rename the folder list this

mv 00LOCK-GenomicTools/ 00LOCK-GenomicTools-deleteThis/

It is now still hanging there in the folder, but I was able to reinstall the R-package and now I need to revisit the folder in a few days and check, if the device is still busy or if I can delete it then…

Git submodules

Git submodules

Today I noticed for the first time the concept of submodules in git. While cloning a repository from GitHub I noticed that one folder in it remained empty. After having a closer look, I noticed a reference to another repository tree like this:

Here, the folder htslib is actually from a tree in a different repository. After I cloned the repository like this (I forked it before):

git clone https://github.com/fischuu/SE-MEI.git

the folder htslib remained empty. That is because files from submodules are not fetched by default. This needs to be done separately by first initializing the submodules (first, cd into the cloned repository)

git submodule init

and then update the files from it

git submodule update

After these steps, the repository should be complete. However, instead of initializing the submodule separately, there is also a shortcut to fetch them all in one step by adding an additional parameter to the cloning like this:

git clone --recurse-submodules https://github.com/fischuu/SE-MEI.git

More details to git submodules can be found here.

Adding an external HDD to fstab

Adding an external HDD to fstab

In order to permanently add an external HDD, the best way is to first identfy the UUID and the corresponding file system by typing

sudo blkid

with that information one can edit the fstab

sudo vim /etc/fstab

and enter then there a line with the format

UUID=<UUID> \tab <mountPoint> \tab <filesystem> \tab <options> \tab 0 \tab 1

Here, the values for <UUID> and <filesytem> we get from the blkid command, the mount point is ‘free choice’ and as option, I choose e.g. errors=remount-ro

Once the fstab is populated like this, just try to mount the disc by typing

sudo mount -a
Cancel all slurm jobs larger job ID X

Cancel all slurm jobs larger job ID X

Sometimes it happens that we have running a whole bunch of slurm jobs from different projects, some of them are running already for days, while others are just fired – and then we noticed, damn, the 100 jobs that I just fired are wrong and they need to be canceled. Unfortunately, there is no slurm command that can do that, it requires some kind of scripting to do that.

The following script takes as an input a slurm job ID and cancels all jobs larger than that (that belong to the logged in user…).

#!/bin/bash

declare -a jobs=()

if [ -z "$1" ] ; then
    echo "Minimum Job Number argument is required.  Run as '$0 jobnum'"
    exit 1
fi

minjobnum="$1"

myself="$(id -u -n)"

for j in $(squeue --user="$myself" --noheader --format='%i') ; do
  if [ "$j" -gt "$minjobnum" ] ; then
    jobs+=($j)
  fi
done

scancel "${jobs[@]}"

If you store this e.g as killLarger.sh in your PATH somewhere, you can just use it from anywhere and cancel slurm jobs that are larger than this ID.