forked from Joshmoss11/btseq
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall_modules.sh
More file actions
executable file
·116 lines (91 loc) · 3.21 KB
/
install_modules.sh
File metadata and controls
executable file
·116 lines (91 loc) · 3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash
module load Anaconda3
# Exit on error
set -e
# Variables (Adjust these as needed)
ENV_DIR="$PWD/env"
MODULE_DIR="$ENV_DIR/modules"
CONDA_CHANNELS="-c bioconda -c defaults"
CONDA_PACKAGES=("bioconda::trim-galore" "bioconda::cutadapt" "auto::bioinfo" "bioconda::bowtie2" "bioconda::samtools" "bioconda::bismark")
# Initialize empty array for package names
PACKAGE_NAMES=()
# Extract package names from CONDA_PACKAGES
for pkg_spec in "${CONDA_PACKAGES[@]}"; do
pkg_name="${pkg_spec##*::}"
PACKAGE_NAMES+=("$pkg_name")
done
# Step 1: Create or update the Conda environment
if [ ! -d "$ENV_DIR" ]; then
echo "Creating Conda environment at $ENV_DIR..."
conda create --yes --prefix "$ENV_DIR" $CONDA_CHANNELS "${CONDA_PACKAGES[@]}"
else
echo "Conda environment already exists at $ENV_DIR"
echo "Updating Conda environment with any new packages..."
conda install --yes --prefix "$ENV_DIR" $CONDA_CHANNELS "${CONDA_PACKAGES[@]}"
fi
# Step 2: Activate the Conda environment
source activate "$ENV_DIR"
# Step 2.5: Ensure that the binaries have executable permissions
chmod +x "$ENV_DIR/bin/"*
# Step 3: Create the modulefiles directory if it doesn't exist
if [ ! -d "$MODULE_DIR" ]; then
echo "Creating modulefiles directory at $MODULE_DIR..."
mkdir -p "$MODULE_DIR"
fi
# Function to create modulefile
create_modulefile() {
TOOL_NAME=$1
VERSION=$2
MODULE_PATH="$MODULE_DIR/$TOOL_NAME/$VERSION"
# Check if modulefile already exists
if [ -f "$MODULE_PATH" ]; then
echo "Modulefile for $TOOL_NAME version $VERSION already exists at $MODULE_PATH"
return
fi
echo "Creating modulefile for $TOOL_NAME at $MODULE_PATH..."
mkdir -p "$(dirname "$MODULE_PATH")"
cat > "$MODULE_PATH" <<EOL
#%Module1.0
proc ModulesHelp { } {
puts stderr "$TOOL_NAME $VERSION"
}
module-whatis "Loads the $TOOL_NAME tool"
# Set up the environment (path to the Conda environment)
set root $ENV_DIR
prepend-path PATH \$root/bin
EOL
}
# Step 4: Create module files for each tool
for pkg_name in "${PACKAGE_NAMES[@]}"; do
# Get the version from conda list
version=$(conda list --prefix "$ENV_DIR" | awk -v pkg="$pkg_name" '$1==pkg {print $2}')
if [ -z "$version" ]; then
echo "Warning: Package $pkg_name not found in environment."
continue
fi
create_modulefile "$pkg_name" "$version"
done
echo "All module files have been created."
# Step 5: Instructions for SLURM Script Usage
echo -e "\n===================================================="
echo "To use the modules in your SLURM script, add the following lines:"
echo
echo "# Load system-wide modules if needed"
echo "module load <some_system_module>"
echo
echo "# Temporarily add your local modules directory to the MODULEPATH"
echo "export MODULEPATH=$MODULE_DIR:\$MODULEPATH"
echo
echo "# Load your custom modules"
for pkg_name in "${PACKAGE_NAMES[@]}"; do
version=$(conda list --prefix "$ENV_DIR" | awk -v pkg="$pkg_name" '$1==pkg {print $2}')
if [ -n "$version" ]; then
echo "module load $pkg_name/$version"
fi
done
echo
echo "# Now use the tools"
for pkg_name in "${PACKAGE_NAMES[@]}"; do
echo "$pkg_name --help"
done
echo -e "====================================================\n"