Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 115 additions & 38 deletions INSTALL.sh
Original file line number Diff line number Diff line change
@@ -1,56 +1,133 @@
#!/bin/bash

echo "Creating directories..."
mkdir -p ${HOME}/.capt/root
mkdir -p ${HOME}/.capt/debs_temp
################################################################################
# Function declarations
################################################################################

echo "Creating installer script..."
cat <<"EOF" >${HOME}/.capt/capt
#!/bin/bash
function fail () {
echo ${@:-"Install encountered and error\nExiting..."} > /dev/stderr
exit 1
}

cd ${HOME}/.capt/debs_temp
rm -rf *.deb
if [[ $1 == "install" ]]; then
echo "Downloading prerequisites..."
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances $2 | grep "^\w" | sort -u)
echo "Installing..."
find . -iname "*.deb" -type f -exec dpkg -x {} ${HOME}/.capt/root \;
echo "Finished installing, removing temp files..."
rm -rf *.deb
echo "Done"
else
echo "Capt only supports \`capt install\`"
fi
function bash_install {
local bashrc="${HOME}/.bashrc"

EOF
echo "Adding stuff to bashrc"
if grep "# add capt to PATH" "$bashrc" > /dev/null; then return 0; fi
cat <<- EOF >> "$bashrc" || fail

echo "Setting executable bit on \`capt\` executable..."
chmod +x ${HOME}/.capt/capt
# add capt to PATH

echo "Adding stuff to zshrc"
cat <<EOF >>${HOME}/.zshrc
export LD_LIBRARY_PATH=${HOME}/.capt/root/lib/x86_64-linux-gnu:${HOME}/.capt/root/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
export PATH=${HOME}/.capt:${HOME}/.capt/root/usr/local/sbin:${HOME}/.capt/root/usr/local/bin:${HOME}/.capt/root/usr/sbin:${HOME}/.capt/root/usr/bin:${HOME}/.capt/root/sbin:${HOME}/.capt/root/bin:${HOME}/.capt/root/usr/games:${HOME}/.capt/root/usr/local/games:${HOME}/.capt/snap/bin:$PATH
export LD_LIBRARY_PATH=${CAPT_DIR}/root/lib/x86_64-linux-gnu:${CAPT_DIR}/root/usr/lib/x86_64-linux-gnu:\$LD_LIBRARY_PATH
export PATH=${CAPT_DIR}:${CAPT_DIR}/root/usr/local/sbin:${CAPT_DIR}/root/usr/local/bin:${CAPT_DIR}/root/usr/sbin:${CAPT_DIR}/root/usr/bin:${CAPT_DIR}/root/sbin:${CAPT_DIR}/root/bin:${CAPT_DIR}/root/usr/games:${CAPT_DIR}/root/usr/local/games:${CAPT_DIR}/snap/bin:\$PATH
EOF
}

EOF
function zsh_install {
local zshrc="${HOME}/.zshrc"

echo "Adding stuff to bashrc"
cat <<EOF >>${HOME}/.bashrc
export LD_LIBRARY_PATH=${HOME}/.capt/root/lib/x86_64-linux-gnu:${HOME}/.capt/root/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
export PATH=${HOME}/.capt:${HOME}/.capt/root/usr/local/sbin:${HOME}/.capt/root/usr/local/bin:${HOME}/.capt/root/usr/sbin:${HOME}/.capt/root/usr/bin:${HOME}/.capt/root/sbin:${HOME}/.capt/root/bin:${HOME}/.capt/root/usr/games:${HOME}/.capt/root/usr/local/games:${HOME}/.capt/snap/bin:$PATH
echo "Adding stuff to zshrc"
if grep "# add capt to PATH" "$zshrc" > /dev/null; then return 0; fi
cat <<- EOF >> "$zshrc" || fail

EOF
# add capt to PATH

export LD_LIBRARY_PATH=${CAPT_DIR}/root/lib/x86_64-linux-gnu:${CAPT_DIR}/root/usr/lib/x86_64-linux-gnu:\$LD_LIBRARY_PATH
export PATH=${CAPT_DIR}:${CAPT_DIR}/root/usr/local/sbin:${CAPT_DIR}/root/usr/local/bin:${CAPT_DIR}/root/usr/sbin:${CAPT_DIR}/root/usr/bin:${CAPT_DIR}/root/sbin:${CAPT_DIR}/root/bin:${CAPT_DIR}/root/usr/games:${CAPT_DIR}/root/usr/local/games:${CAPT_DIR}/snap/bin:\$PATH
EOF
}

FISHRC=${HOME}/.config/fish/config.fish
if [ -f $FISHRC ]; then
function fish_install {
local DEFAULT_FISHRC="${HOME}/.config/fish/config.fish"
local FISHRC=${DEFAULT_FISHRC}

if [ ! -f "${FISHRC}" ]; then
read -p "File 'config.fish' not in expected location.\n Enter path to config.fish. Leave blank to use default location anyway.\n$PS2" FISHRC
if [ -z "$FISHRC" ]; then
echo "Using default location '${DEFAULT_FISHRC}'"
FISHRC="${DEFAULT_FISHRC}"
mkdir -p $(dirname "${DEFAULT_FISHRC}") || fail
elif ![ -f $FISHRC ]; then
echo "config.fish not in entered location. Aborting..."
exit 1
fi
fi
echo "Adding stuff to fishrc"
cat <<EOF >>$FISHRC
if grep "# add capt to PATH" "$FISHRC" > /dev/null; then return 0; fi
cat <<- EOF >> "$FISHRC" || fail "Cannot write to 'config.fish'"

# add capt to PATH

set -p LD_LIBRARY_PATH ${CAPT_DIR}/root/lib/x86_64-linux-gnu:${CAPT_DIR}/root/usr/lib/x86_64-linux-gnu
set -p PATH ${CAPT_DIR}:${CAPT_DIR}/root/bin:${CAPT_DIR}/root/sbin:${CAPT_DIR}/root/usr/bin:${CAPT_DIR}/root/usr/sbin:${CAPT_DIR}/root/usr/games:${CAPT_DIR}/root/usr/local/bin:${CAPT_DIR}/root/usr/local/sbin:${CAPT_DIR}/root/usr/local/games:${CAPT_DIR}/snap/bin
EOF
}

# add capt to PATH
################################################################################
# Script start
################################################################################

set -p LD_LIBRARY_PATH ${HOME}/.capt/root/lib/x86_64-linux-gnu:${HOME}/.capt/root/usr/lib/x86_64-linux-gnu
set -p PATH ${HOME}/.capt:${HOME}/.capt/root/bin:${HOME}/.capt/root/sbin:${HOME}/.capt/root/usr/bin:${HOME}/.capt/root/usr/sbin:${HOME}/.capt/root/usr/games:${HOME}/.capt/root/usr/local/bin:${HOME}/.capt/root/usr/local/sbin:${HOME}/.capt/root/usr/local/games:${HOME}/.capt/snap/bin
CAPT_DIR="${HOME}/sgoinfre/.capt"
echo "Creating directories..."
mkdir -p ${CAPT_DIR}/root || fail
mkdir -p ${CAPT_DIR}/debs_temp || fail

echo "Creating installer script..."
cat << EOF > ${CAPT_DIR}/capt || fail
#!/bin/bash

CAPT_DIR="${CAPT_DIR}"
EOF
cat << "EOF" >> ${CAPT_DIR}/capt || fail
cd ${CAPT_DIR}/debs_temp
rm -rf *.deb
if [[ $# < 2 || "$1" != "install" ]]; then
echo "Capt only supports 'apt install [packages...]'"
exit 1
fi
shift
echo "Downloading prerequisites..."
PACKAGES_DOWNLOADED=0
while [ $# -gt 0 ]; do
if apt-cache depends $1 > /dev/null; then
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances $1 | grep "^\w" | sort -u)
((PACKAGES_DOWNLOADED++))
fi
shift
done
if [ $PACKAGES_DOWNLOADED -eq 0 ]; then
exit 1
fi
echo -n "Installing packages"
find . -iname "*.deb" -type f -exec echo -n "." \; -exec dpkg -x {} ${CAPT_DIR}/root \;
echo
echo "Finished installing, removing temp files..."
rm -rf *.deb
echo "Done"
EOF

echo "Setting executable bit on \`capt\` executable..."
chmod +x ${CAPT_DIR}/capt || fail

echo "Which shell do you use?(zsh is default at Codam)"
select selection in "zsh" "bash" "fish"; do
selection=${selection:-${REPLY}}
case $selection in
"zsh")
zsh_install
break
;;
"bash")
bash_install
break
;;
"fish")
fish_install
break
;;
*)
echo "Invalid input"
esac
done

echo "Done, please restart your shell or run \`source ${HOME}/.zshrc\` / \`source ${HOME}/.bashrc\` / \'source ${HOME}/.config/fish/config.fish\' (depending on your shell)"
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
Replacement for `apt` for use at Codam Linux stations. Might be compatible with other 42 Network Linux systems as well.

How to install `capt`\
Download & run `installer.sh`: `wget https://raw.githubusercontent.com/PanoramixDeDruide/Codam_apt/main/INSTALL.sh && chmod +x INSTALL.sh && ./INSTALL.sh`
Download & run `installer.sh`:
```
wget https://raw.githubusercontent.com/MFelida/codam-apt/main/INSTALL.sh && chmod +x INSTALL.sh && ./INSTALL.sh
```

How to check if the `apt` package of your choice is available\
-Run `apt-cache search <package-name>`
Expand Down