Skip to content

Instantly share code, notes, and snippets.

@cguldogan
Last active April 20, 2025 13:30
Show Gist options
  • Save cguldogan/5353f84781a6f56dc453cbbf04c9f875 to your computer and use it in GitHub Desktop.
Save cguldogan/5353f84781a6f56dc453cbbf04c9f875 to your computer and use it in GitHub Desktop.
install-dev-stack
#!/bin/bash
set -e
# Function to check if a package is installed
is_installed() {
dpkg -s "$1" &> /dev/null
}
echo "πŸ”„ Updating package list..."
sudo apt-get update
# --- Essentials and Build Tools ---
essentials=(
git build-essential gcc g++ pkg-config cmake cmake-curses-gui
python3 python3-pip libmbedtls-dev libssl-dev libsasl2-dev
check libsubunit-dev libcurl4-openssl-dev
sphinx-doc sphinx-common graphviz python3-sphinx-rtd-theme
gdb valgrind htop net-tools
libgtk-4-dev libwebkitgtk-6.0-dev
)
for pkg in "${essentials[@]}"; do
if ! is_installed "$pkg"; then
echo "πŸ“¦ Installing $pkg..."
sudo apt-get install -y "$pkg"
else
echo "βœ… $pkg already installed."
fi
done
# --- Mosquitto MQTT ---
if ! is_installed mosquitto; then
echo "πŸ“¦ Installing Mosquitto..."
sudo apt-get install -y mosquitto mosquitto-clients libmosquitto-dev
sudo systemctl enable mosquitto
sudo systemctl start mosquitto
else
echo "βœ… Mosquitto is already installed."
fi
# --- MongoDB 8.0 ---
if ! command -v mongod &> /dev/null; then
echo "πŸ“¦ Installing MongoDB 8.0..."
sudo apt-get install -y gnupg curl wget
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo systemctl enable mongod
sudo systemctl start mongod
else
echo "βœ… MongoDB is already installed."
fi
# --- MongoDB Compass ---
if ! command -v mongodb-compass &> /dev/null; then
echo "πŸ“¦ Installing MongoDB Compass..."
wget https://downloads.mongodb.com/compass/mongodb-compass_1.45.4_amd64.deb
sudo apt install -y ./mongodb-compass_1.45.4_amd64.deb
rm mongodb-compass_1.45.4_amd64.deb
else
echo "βœ… MongoDB Compass is already installed."
fi
# --- .NET 9 SDK ---
if ! command -v dotnet &> /dev/null || [[ "$(dotnet --version)" != 9.* ]]; then
echo "πŸ“¦ Installing .NET SDK 9..."
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y dotnet-sdk-9.0
else
echo "βœ… .NET SDK 9 is already installed."
fi
# --- MongoDB C Driver ---
if ! ldconfig -p | grep -q "libmongoc-1.0"; then
echo "πŸ“¦ Installing MongoDB C Driver..."
cd /tmp
curl -LO https://github.com/mongodb/mongo-c-driver/releases/download/1.26.0/mongo-c-driver-1.26.0.tar.gz
tar -xzf mongo-c-driver-1.26.0.tar.gz
cd mongo-c-driver-1.26.0
mkdir build && cd build
cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF ..
cmake --build . --parallel
sudo cmake --install .
sudo ldconfig
else
echo "βœ… MongoDB C driver already installed."
fi
# --- MongoDB C++ Driver ---
if ! ldconfig -p | grep -q "libmongocxx"; then
echo "πŸ“¦ Installing MongoDB C++ Driver..."
cd /tmp
curl -LO https://github.com/mongodb/mongo-cxx-driver/releases/download/r3.10.1/mongo-cxx-driver-r3.10.1.tar.gz
tar -xzf mongo-cxx-driver-r3.10.1.tar.gz
cd mongo-cxx-driver-r3.10.1/build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
cmake --build . --parallel
sudo cmake --install .
sudo ldconfig
else
echo "βœ… MongoDB C++ driver already installed."
fi
# --- Open62541 (OPC UA Server) ---
OPEN62541_DIR="$HOME/open62541"
if [ ! -d "$OPEN62541_DIR" ]; then
echo "πŸ“¦ Installing Open62541 OPC UA Server in $OPEN62541_DIR..."
git clone https://github.com/open62541/open62541.git "$OPEN62541_DIR"
cd "$OPEN62541_DIR"
git checkout v1.4.6
mkdir build && cd build
cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DUA_ENABLE_ENCRYPTION=OPENSSL -DUA_NAMESPACE_ZERO=FULL \
-DUA_ENABLE_SUBSCRIPTIONS=ON ..
make -j$(nproc)
make install
ldconfig
else
echo "βœ… Open62541 already installed in $OPEN62541_DIR."
fi
echo "πŸŽ‰ All components installed and ready!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment