Skip to content
This repository was archived by the owner on Nov 30, 2023. It is now read-only.

Commit 5c91b9c

Browse files
authored
Add arm64 support to cpp-mariadb container (#1328)
1 parent 55a1eee commit 5c91b9c

File tree

4 files changed

+57
-16
lines changed

4 files changed

+57
-16
lines changed

containers/cpp-mariadb/.devcontainer/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none"
1717
# Optionally install the cmake for vcpkg
1818
COPY ./reinstall-cmake.sh /tmp/
1919
RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \
20-
/tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \
20+
chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \
2121
fi \
2222
&& rm -f /tmp/reinstall-cmake.sh
2323

containers/cpp-mariadb/.devcontainer/install-mariadb.sh

Lines changed: 54 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,29 @@ find_os_props() {
4242
esac
4343
}
4444

45+
# Run apt-get if needed.
46+
apt_get_update_if_needed() {
47+
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then
48+
echo "Running apt-get update..."
49+
apt-get update
50+
else
51+
echo "Skipping apt-get update."
52+
fi
53+
}
54+
55+
# Check if packages are installed and installs them if not.
56+
check_packages() {
57+
if ! dpkg -s "$@" > /dev/null 2>&1; then
58+
apt_get_update_if_needed
59+
apt-get -y install --no-install-recommends "$@"
60+
fi
61+
}
62+
4563
TMP_DIR=$(mktemp -d -t maria-XXXXXXXXXX)
4664
MARIADB_CONNECTOR=""
65+
SOURCE_INCLUDE_DIR=""
66+
SOURCE_LIB_DIR=""
67+
SOURCE_PLUGIN_DIR=""
4768

4869
cleanup() {
4970
EXIT_CODE=$?
@@ -57,25 +78,45 @@ cleanup() {
5778
trap cleanup EXIT
5879

5980
#Set up external repository and install C Connector
60-
apt install -y libmariadb3 libmariadb-dev
81+
check_packages libmariadb3 libmariadb-dev
6182

6283
#Depending on the OS, install different C++ connectors
6384
find_os_props
64-
# Instructions are copied and modified from: https://mariadb.com/docs/clients/mariadb-connectors/connector-cpp/install/
65-
MARIADB_CONNECTOR=mariadb-connector-cpp-1.0.1-$OSURL
85+
6686
cd ${TMP_DIR}
67-
curl -Ls https://dlm.mariadb.com/$OSTAG/connectors/cpp/connector-cpp-1.0.1/${MARIADB_CONNECTOR}.tar.gz -o ${MARIADB_CONNECTOR}.tar.gz
68-
tar -xvzf ${MARIADB_CONNECTOR}.tar.gz && cd ${MARIADB_CONNECTOR}
69-
install -d /usr/include/mariadb/conncpp
7087

71-
#Header Files being copied into the necessary directories
72-
cp -R ./include/mariadb/* /usr/include/mariadb/
73-
cp -R ./include/mariadb/conncpp/* /usr/include/mariadb/conncpp
74-
cp -R ./include/mariadb/conncpp/compat/* /usr/include/mariadb/conncpp/compat
88+
if [ "$(dpkg --print-architecture)" = "arm64" ] ; then
89+
# Instructions are copied and modified from: https://github.com/mariadb-corporation/mariadb-connector-cpp/blob/master/BUILD.md
90+
# and from: https://mariadb.com/docs/clients/mariadb-connectors/connector-cpp/install/
91+
check_packages git cmake make gcc libssl-dev
92+
git clone https://github.com/MariaDB-Corporation/mariadb-connector-cpp.git
93+
mkdir build && cd build
94+
cmake ../mariadb-connector-cpp/ -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCONC_WITH_UNIT_TESTS=Off -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_SSL=OPENSSL
95+
cmake --build . --config RelWithDebInfo
96+
make install
97+
98+
SOURCE_INCLUDE_DIR="../mariadb-connector-cpp/include"
99+
SOURCE_LIB_DIR="."
100+
SOURCE_PLUGIN_DIR="./libmariadb"
101+
else
102+
# Instructions are copied and modified from: https://mariadb.com/docs/clients/mariadb-connectors/connector-cpp/install/
103+
MARIADB_CONNECTOR=mariadb-connector-cpp-1.0.1-$OSURL
104+
curl -Ls https://dlm.mariadb.com/$OSTAG/connectors/cpp/connector-cpp-1.0.1/${MARIADB_CONNECTOR}.tar.gz -o ${MARIADB_CONNECTOR}.tar.gz
105+
tar -xvzf ${MARIADB_CONNECTOR}.tar.gz && cd ${MARIADB_CONNECTOR}
75106

76-
install -d /usr/lib/mariadb
107+
SOURCE_INCLUDE_DIR="./include/mariadb"
108+
SOURCE_LIB_DIR="lib/mariadb"
109+
SOURCE_PLUGIN_DIR="lib/mariadb/plugin"
110+
fi
111+
112+
install -d /usr/include/mariadb/conncpp/compat
77113
install -d /usr/lib/mariadb/plugin
78114

115+
#Header Files being copied into the necessary directories
116+
cp -R ${SOURCE_INCLUDE_DIR}/* /usr/include/mariadb/
117+
cp -R ${SOURCE_INCLUDE_DIR}/conncpp/* /usr/include/mariadb/conncpp
118+
cp -R ${SOURCE_INCLUDE_DIR}/conncpp/compat/* /usr/include/mariadb/conncpp/compat
119+
79120
#Shared libraries copied into usr/lib
80-
cp lib/mariadb/libmariadbcpp.so /usr/lib
81-
cp -R lib/mariadb/plugin/* /usr/lib/mariadb/plugin
121+
cp ${SOURCE_LIB_DIR}/libmariadbcpp.so /usr/lib
122+
cp ${SOURCE_PLUGIN_DIR}/*.so /usr/lib/mariadb/plugin

containers/cpp-mariadb/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
| *Categories* | Core, Languages |
1111
| *Definition type* | Docker Compose |
1212
| *Available image variants* | [See cpp definition](../cpp). |
13-
| *Supported architecture(s)* | x86-64 for `bullseye`, `stretch`, `bionic`, and `hirsute` variants |
13+
| *Supported architecture(s)* | x86-64, aarch64/arm64 for `bullseye`, `stretch`, `bionic`, and `hirsute` variants |
1414
| *Works in Codespaces* | Yes |
1515
| *Container host OS support* | Linux, macOS, Windows |
1616
| *Container OS* | Debian, Ubuntu |

containers/cpp/.devcontainer/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none"
99
# Optionally install the cmake for vcpkg
1010
COPY ./reinstall-cmake.sh /tmp/
1111
RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \
12-
/tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \
12+
chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \
1313
fi \
1414
&& rm -f /tmp/reinstall-cmake.sh
1515

0 commit comments

Comments
 (0)