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

Commit c3388f1

Browse files
committed
Add more thorough instructions
1 parent 4f8e082 commit c3388f1

File tree

1 file changed

+137
-4
lines changed

1 file changed

+137
-4
lines changed

README.md

Lines changed: 137 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,144 @@
11
# PostgreSQL built for AWS Graviton2
22

3-
PostgreSQL rebuilt and optimized for AWS Graviton2 processors (`armv8.2` with LSE atomics):
3+
1. Launch a new ARM64 instance:
4+
* Ubuntu Server 20.04 LTS (HVM), SSD Volume Type
5+
* 64-bit (Arm)
6+
* t4g.2xlarge
7+
* 40 GB EBS volume
8+
* tags:
9+
* `Name: mediacloud-herewegoagain-build-arm64`
10+
* `project: mediacloud-herewegoagain`
11+
12+
2. SSH into the instance and run:
13+
14+
```bash
15+
sudo hostnamectl set-hostname build-arm64
16+
17+
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
18+
sudo apt-get update
19+
sudo apt-get -y install gcc-11 g++-11
20+
21+
sudo update-alternatives --remove-all gcc
22+
sudo update-alternatives --remove-all g++
23+
sudo update-alternatives --remove-all cc
24+
sudo update-alternatives --remove-all c++
25+
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 10
26+
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 10
27+
sudo update-alternatives --set cc /usr/bin/gcc
28+
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 10
29+
sudo update-alternatives --set cc /usr/bin/gcc
30+
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 10
31+
sudo update-alternatives --set c++ /usr/bin/g++
32+
33+
export CFLAGS="-march=armv8.2-a+fp16+rcpc+dotprod+crypto -mcpu=neoverse-n1 -fsigned-char"
34+
export CXXFLAGS="$CFLAGS"
35+
export CPPFLAGS="$CFLAGS"
36+
export DEB_CFLAGS_SET="$CFLAGS"
37+
export DEB_CPPFLAGS_SET="$CFLAGS"
38+
export DEB_CXXFLAGS_SET="$CFLAGS"
39+
40+
sudo apt install curl ca-certificates gnupg
41+
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null
42+
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
43+
sudo sh -c 'echo "deb-src http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
44+
sudo apt-get -y update
45+
46+
sudo apt-get -y install dpkg-dev
47+
```
48+
49+
3. Build PostgreSQL:
50+
51+
```bash
52+
sudo apt-get -y install autoconf bison clang debhelper-compat dh-exec docbook-xml docbook-xsl flex gdb gettext libicu-dev libio-pty-perl libipc-run-perl libkrb5-dev libldap2-dev liblz4-dev libpam0g-dev libpam-dev libperl-dev libreadline-dev libselinux1-dev libssl-dev libsystemd-dev libxml2-dev libxml2-utils libxslt1-dev llvm-dev pkg-config postgresql-common python3-dev systemtap-sdt-dev tcl-dev uuid-dev xsltproc zlib1g-dev libz-dev clang-11 llvm-11-dev
53+
54+
apt-get source postgresql-14
55+
56+
git clone https://salsa.debian.org/postgresql/postgresql.git -b 14
57+
cd postgresql/
58+
git checkout debian/14.1-1
59+
cp -R debian/ ../postgresql-14-14.1/debian/
60+
cd ../postgresql-14-14.1/
61+
62+
sed -i 's/debhelper-compat (= 13)/debhelper, dh-exec (>= 0.13~)/' debian/control
63+
sed -i 's/clang-9/clang-11/' debian/control
64+
sed -i 's/llvm-9/llvm-11/' debian/control
65+
sed -i 's/clang-9/clang-11/' debian/rules
66+
sed -i 's/llvm-config-9/llvm-config-11/' debian/rules
67+
echo 9 > debian/compat
68+
69+
dpkg-buildpackage -rfakeroot -b -uc -us
70+
71+
# Ensure that PostgreSQL got built with LSE (has to be non-zero)
72+
objdump -d ./build/src/backend/postgres | grep -i 'cas\|casp\|swp\|ldadd\|stadd\|ldclr\|stclr\|ldeor\|steor\|ldset\|stset\|ldsmax\|stsmax\|ldsmin\|stsmin\|ldumax\|stumax\|ldumin\|stumin' | wc -l
73+
74+
# Ensure that PostgreSQL didn't get built with load-store exclusives (has to be zero)
75+
objdump -d ./build/src/backend/postgres | grep -i 'ldxr\|ldaxr\|stxr\|stlxr' | wc -l
76+
```
77+
78+
4. Build PgBouncer:
79+
80+
```bash
81+
sudo apt-get -y install libevent-dev libc-ares-dev pandoc
82+
83+
# Install PostgreSQL packages that we've just built
84+
sudo dpkg -i ~/*.deb
85+
86+
apt-get source pgbouncer
87+
88+
cd pgbouncer-1.16.1/
89+
90+
dpkg-buildpackage -rfakeroot -b -uc -us -d
91+
92+
sudo dpkg -i pgbouncer_1.16.1-1.pgdg20.04+1_arm64.deb
93+
```
94+
95+
96+
5. Build Citus extension:
97+
98+
```bash
99+
sudo apt-get -y install autoconf flex git libcurl4-gnutls-dev libicu-dev \
100+
libkrb5-dev liblz4-dev libpam0g-dev libreadline-dev \
101+
libselinux1-dev libssl-dev libxslt1-dev libzstd-dev \
102+
make uuid-dev
103+
104+
git clone https://github.com/citusdata/citus.git
105+
cd citus/
106+
git checkout v10.2.3
107+
108+
./configure --with-security-flags
109+
make -j$(nproc)
110+
make install-all
111+
make install
112+
113+
cd src/tests/regression/
114+
sudo chmod 777 /var/run/postgresql/
115+
make check
116+
117+
# If upgrade / downgrade tests fail, that's probably fine
118+
119+
mkdir ~/citus-install/
120+
make DESTDIR=~/citus-install install-all
121+
make DESTDIR=~/citus-install install
122+
123+
cd ~/
124+
mkdir citus-install/DEBIAN/
125+
126+
dpkg-deb --build --root-owner-group citus-install/
127+
mv citus-install.deb postgresql-14-citus-10.2_10.2.3.citus-1_arm64.deb
128+
sudo dpkg -i postgresql-14-citus-10.2_10.2.3.citus-1_arm64.deb
129+
```
130+
131+
132+
6. Copy binaries to local machine:
4133

5134
```bash
6-
DEB_CFLAGS_SET="-march=armv8.2-a+fp16+rcpc+dotprod+crypto -mcpu=neoverse-n1 -fsigned-char" \
7-
dpkg-buildpackage -rfakeroot -b -uc -us
135+
scp mediacloud-herewegoagain-build-arm64:'*.deb' .
136+
scp mediacloud-herewegoagain-build-arm64:'*.ddeb' .
8137
```
9138

10-
Used `gcc-11-11.1.0-1ubuntu1~20.04` from [`ppa:ubuntu-toolchain-r/test`](https://launchpad.net/%7Eubuntu-toolchain-r/+archive/ubuntu/test).
139+
140+
7. Create a new GitHub release
141+
11142

12143

13144
## Links
@@ -17,3 +148,5 @@ Used `gcc-11-11.1.0-1ubuntu1~20.04` from [`ppa:ubuntu-toolchain-r/test`](https:/
17148
* https://www.postgresql.org/message-id/flat/099F69EE-51D3-4214-934A-1F28C0A1A7A7%40amazon.com
18149
* https://www.percona.com/blog/2021/01/28/how-to-create-postgresql-custom-builds-and-debian-packages/
19150
* https://github.com/aws/aws-graviton-getting-started/blob/main/c-c++.md
151+
* https://github.com/citusdata/citus/blob/master/CONTRIBUTING.md
152+
* https://www.internalpointers.com/post/build-binary-deb-package-practical-guide

0 commit comments

Comments
 (0)