mirror of
https://github.com/metabarcoding/obitools4.git
synced 2026-03-25 21:40:52 +00:00
Enhance OBITools4 installation script with version control and documentation
Update installation script to support specific version installation, list available versions, and improve documentation. - Add support for installing specific versions with -v/--version flag - Add -l/--list flag to list all available versions - Improve help message with examples - Update README.md to reflect new installation options and examples - Add note on version compatibility between OBITools2 and OBITools4 - Remove ecoprimers directory - Improve error handling and user feedback during installation - Add version detection and download logic from GitHub releases - Update installation process to use tagged releases instead of master branch
This commit is contained in:
34
README.md
34
README.md
@@ -16,12 +16,17 @@ The easiest way to run it is to copy and paste the following command into your t
|
||||
curl -L https://raw.githubusercontent.com/metabarcoding/obitools4/master/install_obitools.sh | bash
|
||||
```
|
||||
|
||||
By default, the script installs the *OBITools* commands and other associated files into the `/usr/local` directory.
|
||||
The names of the commands in the new *OBITools4* are mostly identical to those in *OBITools2*.
|
||||
Therefore, installing the new *OBITools* may hide or delete the old ones. If you want both versions to be
|
||||
available on your system, the installation script offers two options:
|
||||
By default, the script installs the latest version of *OBITools* commands and other associated files into the `/usr/local` directory.
|
||||
|
||||
### Installation Options
|
||||
|
||||
The installation script offers several options:
|
||||
|
||||
> -l, --list List all available versions and exit.
|
||||
>
|
||||
> -v, --version Install a specific version (e.g., `-v 4.4.3`).
|
||||
> By default, the latest version is installed.
|
||||
>
|
||||
> -i, --install-dir Directory where obitools are installed
|
||||
> (as example use `/usr/local` not `/usr/local/bin`).
|
||||
>
|
||||
@@ -30,14 +35,31 @@ available on your system, the installation script offers two options:
|
||||
> same time on your system (as example `-p g` will produce
|
||||
> `gobigrep` command instead of `obigrep`).
|
||||
|
||||
You can use these options by following the installation command:
|
||||
### Examples
|
||||
|
||||
List all available versions:
|
||||
```{bash}
|
||||
curl -L https://raw.githubusercontent.com/metabarcoding/obitools4/master/install_obitools.sh | bash -s -- --list
|
||||
```
|
||||
|
||||
Install a specific version:
|
||||
```{bash}
|
||||
curl -L https://raw.githubusercontent.com/metabarcoding/obitools4/master/install_obitools.sh | bash -s -- --version 4.4.3
|
||||
```
|
||||
|
||||
Install in a custom directory with command prefix:
|
||||
```{bash}
|
||||
curl -L https://raw.githubusercontent.com/metabarcoding/obitools4/master/install_obitools.sh | \
|
||||
bash -s -- --install-dir test_install --obitools-prefix k
|
||||
```
|
||||
|
||||
In this case, the binaries will be installed in the `test_install` directory and all command names will be prefixed with the letter `k`. Thus, `obigrep` will be named `kobigrep`.
|
||||
In this last example, the binaries will be installed in the `test_install` directory and all command names will be prefixed with the letter `k`. Thus, `obigrep` will be named `kobigrep`.
|
||||
|
||||
### Note on Version Compatibility
|
||||
|
||||
The names of the commands in the new *OBITools4* are mostly identical to those in *OBITools2*.
|
||||
Therefore, installing the new *OBITools* may hide or delete the old ones. If you want both versions to be
|
||||
available on your system, use the `--install-dir` and `--obitools-prefix` options as shown above.
|
||||
|
||||
## Continuing the analysis...
|
||||
|
||||
|
||||
Submodule ecoprimers deleted from b7552200bd
@@ -1,27 +1,56 @@
|
||||
#!/bin/bash
|
||||
|
||||
INSTALL_DIR="/usr/local"
|
||||
OBITOOLS_PREFIX=""
|
||||
# default values
|
||||
# Default values
|
||||
URL="https://go.dev/dl/"
|
||||
OBIURL4="https://github.com/metabarcoding/obitools4/archive/refs/heads/master.zip"
|
||||
GITHUB_REPO="https://github.com/metabarcoding/obitools4"
|
||||
INSTALL_DIR="/usr/local"
|
||||
OBITOOLS_PREFIX=""
|
||||
VERSION=""
|
||||
LIST_VERSIONS=false
|
||||
|
||||
# help message
|
||||
# Help message
|
||||
function display_help {
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -i, --install-dir Directory where obitools are installed "
|
||||
echo " (as example use /usr/local not /usr/local/bin)."
|
||||
echo " (e.g., use /usr/local not /usr/local/bin)."
|
||||
echo " -p, --obitools-prefix Prefix added to the obitools command names if you"
|
||||
echo " want to have several versions of obitools at the"
|
||||
echo " same time on your system (as example -p g will produce "
|
||||
echo " same time on your system (e.g., -p g will produce "
|
||||
echo " gobigrep command instead of obigrep)."
|
||||
echo " -v, --version Install a specific version (e.g., 4.4.8)."
|
||||
echo " If not specified, installs the latest version."
|
||||
echo " -l, --list List all available versions and exit."
|
||||
echo " -h, --help Display this help message."
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 # Install latest version"
|
||||
echo " $0 -l # List available versions"
|
||||
echo " $0 -v 4.4.8 # Install specific version"
|
||||
echo " $0 -i /opt/local # Install to custom directory"
|
||||
}
|
||||
|
||||
# List available versions from GitHub releases
|
||||
function list_versions {
|
||||
echo "Fetching available versions..." 1>&2
|
||||
echo ""
|
||||
curl -s "https://api.github.com/repos/metabarcoding/obitools4/releases" \
|
||||
| grep '"tag_name":' \
|
||||
| sed -E 's/.*"tag_name": "Release_([0-9.]+)".*/\1/' \
|
||||
| sort -V -r
|
||||
}
|
||||
|
||||
# Get latest version from GitHub releases
|
||||
function get_latest_version {
|
||||
curl -s "https://api.github.com/repos/metabarcoding/obitools4/releases" \
|
||||
| grep '"tag_name":' \
|
||||
| sed -E 's/.*"tag_name": "Release_([0-9.]+)".*/\1/' \
|
||||
| sort -V -r \
|
||||
| head -1
|
||||
}
|
||||
|
||||
# Parse command line arguments
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
-i|--install-dir)
|
||||
@@ -32,67 +61,104 @@ while [ "$#" -gt 0 ]; do
|
||||
OBITOOLS_PREFIX="$2"
|
||||
shift 2
|
||||
;;
|
||||
-v|--version)
|
||||
VERSION="$2"
|
||||
shift 2
|
||||
;;
|
||||
-l|--list)
|
||||
LIST_VERSIONS=true
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
display_help 1>&2
|
||||
display_help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Error: Unsupported option $1" 1>&2
|
||||
echo "Error: Unsupported option $1" 1>&2
|
||||
display_help 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# the directory from where the script is run
|
||||
# List versions and exit if requested
|
||||
if [ "$LIST_VERSIONS" = true ]; then
|
||||
echo "Available OBITools4 versions:"
|
||||
echo "=============================="
|
||||
list_versions
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Determine version to install
|
||||
if [ -z "$VERSION" ]; then
|
||||
echo "Fetching latest version..." 1>&2
|
||||
VERSION=$(get_latest_version)
|
||||
if [ -z "$VERSION" ]; then
|
||||
echo "Error: Could not determine latest version" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Latest version: $VERSION" 1>&2
|
||||
else
|
||||
echo "Installing version: $VERSION" 1>&2
|
||||
fi
|
||||
|
||||
# Construct source URL for the specified version
|
||||
OBIURL4="${GITHUB_REPO}/archive/refs/tags/Release_${VERSION}.zip"
|
||||
|
||||
# The directory from where the script is run
|
||||
DIR="$(pwd)"
|
||||
|
||||
# the temp directory used, within $DIR
|
||||
# omit the -p parameter to create a temporal directory in the default location
|
||||
# WORK_DIR=$(mktemp -d -p "$DIR" "obitools4.XXXXXX" 2> /dev/null || \
|
||||
# mktemp -d -t "$DIR" "obitools4.XXXXXX")
|
||||
|
||||
# Create temporary directory
|
||||
WORK_DIR=$(mktemp -d "obitools4.XXXXXX")
|
||||
|
||||
# check if tmp dir was created
|
||||
# Check if tmp dir was created
|
||||
if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
|
||||
echo "Could not create temp dir" 1>&2
|
||||
echo "Could not create temp dir" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "${WORK_DIR}/cache" \
|
||||
|| (echo "Cannot create ${WORK_DIR}/cache directory" 1>&2
|
||||
|| (echo "Cannot create ${WORK_DIR}/cache directory" 1>&2
|
||||
exit 1)
|
||||
|
||||
|
||||
# Create installation directory
|
||||
mkdir -p "${INSTALL_DIR}/bin" 2> /dev/null \
|
||||
|| (echo "Please enter your password for installing obitools in ${INSTALL_DIR}" 1>&2
|
||||
|| (echo "Please enter your password for installing obitools in ${INSTALL_DIR}" 1>&2
|
||||
sudo mkdir -p "${INSTALL_DIR}/bin")
|
||||
|
||||
if [[ ! -d "${INSTALL_DIR}/bin" ]]; then
|
||||
echo "Could not create ${INSTALL_DIR}/bin directory for installing obitools" 1>&2
|
||||
echo "Could not create ${INSTALL_DIR}/bin directory for installing obitools" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
INSTALL_DIR="$(cd ${INSTALL_DIR} && pwd)"
|
||||
|
||||
echo "WORK_DIR=$WORK_DIR" 1>&2
|
||||
echo "INSTALL_DIR=$INSTALL_DIR" 1>&2
|
||||
echo "OBITOOLS_PREFIX=$OBITOOLS_PREFIX" 1>&2
|
||||
echo "================================" 1>&2
|
||||
echo "OBITools4 Installation" 1>&2
|
||||
echo "================================" 1>&2
|
||||
echo "VERSION=$VERSION" 1>&2
|
||||
echo "WORK_DIR=$WORK_DIR" 1>&2
|
||||
echo "INSTALL_DIR=$INSTALL_DIR" 1>&2
|
||||
echo "OBITOOLS_PREFIX=$OBITOOLS_PREFIX" 1>&2
|
||||
echo "================================" 1>&2
|
||||
|
||||
pushd "$WORK_DIR"|| exit
|
||||
pushd "$WORK_DIR" > /dev/null || exit
|
||||
|
||||
# Detect OS and architecture
|
||||
OS=$(uname -a | awk '{print $1}')
|
||||
ARCH=$(uname -m)
|
||||
|
||||
if [[ "$ARCH" == "x86_64" ]] ; then
|
||||
ARCH="amd64"
|
||||
if [[ "$ARCH" == "x86_64" ]] ; then
|
||||
ARCH="amd64"
|
||||
fi
|
||||
|
||||
if [[ "$ARCH" == "aarch64" ]] ; then
|
||||
ARCH="arm64"
|
||||
if [[ "$ARCH" == "aarch64" ]] ; then
|
||||
ARCH="arm64"
|
||||
fi
|
||||
|
||||
GOFILE=$(curl "$URL" \
|
||||
# Download and install Go
|
||||
echo "Downloading Go..." 1>&2
|
||||
GOFILE=$(curl -s "$URL" \
|
||||
| grep 'class="download"' \
|
||||
| grep "\.tar\.gz" \
|
||||
| sed -E 's@^.*/dl/(go[1-9].+\.tar\.gz)".*$@\1@' \
|
||||
@@ -100,44 +166,71 @@ GOFILE=$(curl "$URL" \
|
||||
| grep -i "$ARCH" \
|
||||
| head -1)
|
||||
|
||||
GOURL=$(curl "${URL}${GOFILE}" \
|
||||
GOURL=$(curl -s "${URL}${GOFILE}" \
|
||||
| sed -E 's@^.*href="(.*\.tar\.gz)".*$@\1@')
|
||||
|
||||
echo "Install GO from : $GOURL" 1>&2
|
||||
|
||||
curl "$GOURL" \
|
||||
| tar zxf -
|
||||
echo "Installing Go from: $GOURL" 1>&2
|
||||
|
||||
curl -s "$GOURL" | tar zxf -
|
||||
|
||||
PATH="$(pwd)/go/bin:$PATH"
|
||||
export PATH
|
||||
GOPATH="$(pwd)/go"
|
||||
export GOPATH
|
||||
|
||||
export GOCACHE="$(pwd)/cache"
|
||||
echo "GOCACHE=$GOCACHE" 1>&2@
|
||||
|
||||
echo "GOCACHE=$GOCACHE" 1>&2
|
||||
mkdir -p "$GOCACHE"
|
||||
|
||||
# Download OBITools4 source
|
||||
echo "Downloading OBITools4 v${VERSION}..." 1>&2
|
||||
echo "Source URL: $OBIURL4" 1>&2
|
||||
|
||||
curl -L "$OBIURL4" > master.zip
|
||||
unzip master.zip
|
||||
if ! curl -sL "$OBIURL4" > obitools4.zip; then
|
||||
echo "Error: Could not download OBITools4 version ${VERSION}" 1>&2
|
||||
echo "Please check that this version exists with: $0 --list" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Install OBITOOLS from : $OBIURL4"
|
||||
unzip -q obitools4.zip
|
||||
|
||||
cd obitools4-master || exit
|
||||
mkdir vendor
|
||||
# Find the extracted directory
|
||||
OBITOOLS_DIR=$(ls -d obitools4-* 2>/dev/null | head -1)
|
||||
|
||||
if [ -z "$OBITOOLS_DIR" ] || [ ! -d "$OBITOOLS_DIR" ]; then
|
||||
echo "Error: Could not find extracted OBITools4 directory" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Building OBITools4..." 1>&2
|
||||
cd "$OBITOOLS_DIR" || exit
|
||||
mkdir -p vendor
|
||||
|
||||
# Build with or without prefix
|
||||
if [[ -z "$OBITOOLS_PREFIX" ]] ; then
|
||||
make GOFLAGS="-buildvcs=false"
|
||||
make GOFLAGS="-buildvcs=false"
|
||||
else
|
||||
make GOFLAGS="-buildvcs=false" OBITOOLS_PREFIX="${OBITOOLS_PREFIX}"
|
||||
fi
|
||||
|
||||
# Install binaries
|
||||
echo "Installing binaries to ${INSTALL_DIR}/bin..." 1>&2
|
||||
(cp build/* "${INSTALL_DIR}/bin" 2> /dev/null) \
|
||||
|| (echo "Please enter your password for installing obitools in ${INSTALL_DIR}"
|
||||
|| (echo "Please enter your password for installing obitools in ${INSTALL_DIR}" 1>&2
|
||||
sudo cp build/* "${INSTALL_DIR}/bin")
|
||||
|
||||
popd || exit
|
||||
popd > /dev/null || exit
|
||||
|
||||
# Cleanup
|
||||
echo "Cleaning up..." 1>&2
|
||||
chmod -R +w "$WORK_DIR"
|
||||
rm -rf "$WORK_DIR"
|
||||
|
||||
echo "" 1>&2
|
||||
echo "================================" 1>&2
|
||||
echo "OBITools4 v${VERSION} installed successfully!" 1>&2
|
||||
echo "Binaries location: ${INSTALL_DIR}/bin" 1>&2
|
||||
if [[ -n "$OBITOOLS_PREFIX" ]] ; then
|
||||
echo "Command prefix: ${OBITOOLS_PREFIX}" 1>&2
|
||||
fi
|
||||
echo "================================" 1>&2
|
||||
|
||||
Reference in New Issue
Block a user