5
5
usage ()
6
6
{
7
7
echo " Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir <directory>]"
8
- echo " BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86"
8
+ echo " BuildArch can be: arm(default), arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64, x86"
9
9
echo " CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine"
10
10
echo " for alpine can be specified with version: alpineX.YY or alpineedge"
11
11
echo " for FreeBSD can be: freebsd13, freebsd14"
@@ -15,6 +15,7 @@ usage()
15
15
echo " llvmx[.y] - optional, LLVM version for LLVM related packages."
16
16
echo " --skipunmount - optional, will skip the unmount of rootfs folder."
17
17
echo " --skipsigcheck - optional, will skip package signature checks (allowing untrusted packages)."
18
+ echo " --skipemulation - optional, will skip qemu and debootstrap requirement when building environment for debian based systems."
18
19
echo " --use-mirror - optional, use mirror URL to fetch resources, when available."
19
20
echo " --jobs N - optional, restrict to N jobs."
20
21
exit 1
@@ -32,6 +33,7 @@ __QEMUArch=arm
32
33
__UbuntuArch=armhf
33
34
__UbuntuRepo=
34
35
__UbuntuSuites=" updates security backports"
36
+ __DebianSuites=
35
37
__LLDB_Package=" liblldb-3.9-dev"
36
38
__SkipUnmount=0
37
39
@@ -127,10 +129,12 @@ __AlpineKeys='
127
129
616adfeb:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0BFD1D4lIxQcsqEpQzU\npNCYM3aP1V/fxxVdT4DWvSI53JHTwHQamKdMWtEXetWVbP5zSROniYKFXd/xrD9X\n0jiGHey3lEtylXRIPxe5s+wXoCmNLcJVnvTcDtwx/ne2NLHxp76lyc25At+6RgE6\nADjLVuoD7M4IFDkAsd8UQ8zM0Dww9SylIk/wgV3ZkifecvgUQRagrNUdUjR56EBZ\nraQrev4hhzOgwelT0kXCu3snbUuNY/lU53CoTzfBJ5UfEJ5pMw1ij6X0r5S9IVsy\nKLWH1hiO0NzU2c8ViUYCly4Fe9xMTFc6u2dy/dxf6FwERfGzETQxqZvSfrRX+GLj\n/QZAXiPg5178hT/m0Y3z5IGenIC/80Z9NCi+byF1WuJlzKjDcF/TU72zk0+PNM/H\nKuppf3JT4DyjiVzNC5YoWJT2QRMS9KLP5iKCSThwVceEEg5HfhQBRT9M6KIcFLSs\nmFjx9kNEEmc1E8hl5IR3+3Ry8G5/bTIIruz14jgeY9u5jhL8Vyyvo41jgt9sLHR1\n/J1TxKfkgksYev7PoX6/ZzJ1ksWKZY5NFoDXTNYUgzFUTOoEaOg3BAQKadb3Qbbq\nXIrxmPBdgrn9QI7NCgfnAY3Tb4EEjs3ON/BNyEhUENcXOH6I1NbcuBQ7g9P73kE4\nVORdoc8MdJ5eoKBpO8Ww8HECAwEAAQ==
128
130
616ae350:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyduVzi1mWm+lYo2Tqt/0\nXkCIWrDNP1QBMVPrE0/ZlU2bCGSoo2Z9FHQKz/mTyMRlhNqTfhJ5qU3U9XlyGOPJ\npiM+b91g26pnpXJ2Q2kOypSgOMOPA4cQ42PkHBEqhuzssfj9t7x47ppS94bboh46\nxLSDRff/NAbtwTpvhStV3URYkxFG++cKGGa5MPXBrxIp+iZf9GnuxVdST5PGiVGP\nODL/b69sPJQNbJHVquqUTOh5Ry8uuD2WZuXfKf7/C0jC/ie9m2+0CttNu9tMciGM\nEyKG1/Xhk5iIWO43m4SrrT2WkFlcZ1z2JSf9Pjm4C2+HovYpihwwdM/OdP8Xmsnr\nDzVB4YvQiW+IHBjStHVuyiZWc+JsgEPJzisNY0Wyc/kNyNtqVKpX6dRhMLanLmy+\nf53cCSI05KPQAcGj6tdL+D60uKDkt+FsDa0BTAobZ31OsFVid0vCXtsbplNhW1IF\nHwsGXBTVcfXg44RLyL8Lk/2dQxDHNHzAUslJXzPxaHBLmt++2COa2EI1iWlvtznk\nOk9WP8SOAIj+xdqoiHcC4j72BOVVgiITIJNHrbppZCq6qPR+fgXmXa+sDcGh30m6\n9Wpbr28kLMSHiENCWTdsFij+NQTd5S47H7XTROHnalYDuF1RpS+DpQidT5tUimaT\nJZDr++FjKrnnijbyNF8b98UCAwEAAQ==
129
131
616db30d:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnpUpyWDWjlUk3smlWeA0\nlIMW+oJ38t92CRLHH3IqRhyECBRW0d0aRGtq7TY8PmxjjvBZrxTNDpJT6KUk4LRm\na6A6IuAI7QnNK8SJqM0DLzlpygd7GJf8ZL9SoHSH+gFsYF67Cpooz/YDqWrlN7Vw\ntO00s0B+eXy+PCXYU7VSfuWFGK8TGEv6HfGMALLjhqMManyvfp8hz3ubN1rK3c8C\nUS/ilRh1qckdbtPvoDPhSbTDmfU1g/EfRSIEXBrIMLg9ka/XB9PvWRrekrppnQzP\nhP9YE3x/wbFc5QqQWiRCYyQl/rgIMOXvIxhkfe8H5n1Et4VAorkpEAXdsfN8KSVv\nLSMazVlLp9GYq5SUpqYX3KnxdWBgN7BJoZ4sltsTpHQ/34SXWfu3UmyUveWj7wp0\nx9hwsPirVI00EEea9AbP7NM2rAyu6ukcm4m6ATd2DZJIViq2es6m60AE6SMCmrQF\nwmk4H/kdQgeAELVfGOm2VyJ3z69fQuywz7xu27S6zTKi05Qlnohxol4wVb6OB7qG\nLPRtK9ObgzRo/OPumyXqlzAi/Yvyd1ZQk8labZps3e16bQp8+pVPiumWioMFJDWV\nGZjCmyMSU8V6MB6njbgLHoyg2LCukCAeSjbPGGGYhnKLm1AKSoJh3IpZuqcKCk5C\n8CM1S15HxV78s9dFntEqIokCAwEAAQ==
132
+ 66ba20fe:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtfB12w4ZgqsXWZDfUAV/\n6Y4aHUKIu3q4SXrNZ7CXF9nXoAVYrS7NAxJdAodsY3vPCN0g5O8DFXR+390LdOuQ\n+HsGKCc1k5tX5ZXld37EZNTNSbR0k+NKhd9h6X3u6wqPOx7SIKxwAQR8qeeFq4pP\nrt9GAGlxtuYgzIIcKJPwE0dZlcBCg+GnptCUZXp/38BP1eYC+xTXSL6Muq1etYfg\nodXdb7Yl+2h1IHuOwo5rjgY5kpY7GcAs8AjGk3lDD/av60OTYccknH0NCVSmPoXK\nvrxDBOn0LQRNBLcAfnTKgHrzy0Q5h4TNkkyTgxkoQw5ObDk9nnabTxql732yy9BY\ns+hM9+dSFO1HKeVXreYSA2n1ndF18YAvAumzgyqzB7I4pMHXq1kC/8bONMJxwSkS\nYm6CoXKyavp7RqGMyeVpRC7tV+blkrrUml0BwNkxE+XnwDRB3xDV6hqgWe0XrifD\nYTfvd9ScZQP83ip0r4IKlq4GMv/R5shcCRJSkSZ6QSGshH40JYSoiwJf5FHbj9ND\n7do0UAqebWo4yNx63j/wb2ULorW3AClv0BCFSdPsIrCStiGdpgJDBR2P2NZOCob3\nG9uMj+wJD6JJg2nWqNJxkANXX37Qf8plgzssrhrgOvB0fjjS7GYhfkfmZTJ0wPOw\nA8+KzFseBh4UFGgue78KwgkCAwEAAQ==
130
133
'
131
134
__Keyring=
132
135
__KeyringFile=" /usr/share/keyrings/ubuntu-archive-keyring.gpg"
133
136
__SkipSigCheck=0
137
+ __SkipEmulation=0
134
138
__UseMirror=0
135
139
136
140
__UnprocessedBuildArgs=
@@ -179,6 +183,19 @@ while :; do
179
183
__Keyring=" --keyring $__KeyringFile "
180
184
fi
181
185
;;
186
+ loongarch64)
187
+ __BuildArch=loongarch64
188
+ __AlpineArch=loongarch64
189
+ __QEMUArch=loongarch64
190
+ __UbuntuArch=loong64
191
+ __UbuntuSuites=
192
+ __DebianSuites=unreleased
193
+ __LLDB_Package=" liblldb-19-dev"
194
+
195
+ if [[ " $__CodeName " == " sid" ]]; then
196
+ __UbuntuRepo=" http://ftp.ports.debian.org/debian-ports/"
197
+ fi
198
+ ;;
182
199
riscv64)
183
200
__BuildArch=riscv64
184
201
__AlpineArch=riscv64
@@ -339,10 +356,28 @@ while :; do
339
356
;;
340
357
sid) # Debian sid
341
358
__CodeName=sid
342
- __KeyringFile= " /usr/share/keyrings/debian-archive-keyring.gpg "
359
+ __UbuntuSuites=
343
360
344
- if [[ -z " $__UbuntuRepo " ]]; then
345
- __UbuntuRepo=" http://ftp.debian.org/debian/"
361
+ # Debian-Ports architectures need different values
362
+ case " $__UbuntuArch " in
363
+ amd64|arm64|armel|armhf|i386|mips64el|ppc64el|riscv64|s390x)
364
+ __KeyringFile=" /usr/share/keyrings/debian-archive-keyring.gpg"
365
+
366
+ if [[ -z " $__UbuntuRepo " ]]; then
367
+ __UbuntuRepo=" http://ftp.debian.org/debian/"
368
+ fi
369
+ ;;
370
+ * )
371
+ __KeyringFile=" /usr/share/keyrings/debian-ports-archive-keyring.gpg"
372
+
373
+ if [[ -z " $__UbuntuRepo " ]]; then
374
+ __UbuntuRepo=" http://ftp.ports.debian.org/debian-ports/"
375
+ fi
376
+ ;;
377
+ esac
378
+
379
+ if [[ -e " $__KeyringFile " ]]; then
380
+ __Keyring=" --keyring $__KeyringFile "
346
381
fi
347
382
;;
348
383
tizen)
@@ -387,6 +422,9 @@ while :; do
387
422
--skipsigcheck)
388
423
__SkipSigCheck=1
389
424
;;
425
+ --skipemulation)
426
+ __SkipEmulation=1
427
+ ;;
390
428
--rootfsdir|-rootfsdir)
391
429
shift
392
430
__RootfsDir=" $1 "
@@ -419,9 +457,9 @@ case "$__AlpineVersion" in
419
457
elif [[ " $__AlpineArch " == " x86" ]]; then
420
458
__AlpineVersion=3.17 # minimum version that supports lldb-dev
421
459
__AlpinePackages+=" llvm15-libs"
422
- elif [[ " $__AlpineArch " == " riscv64" ]]; then
423
- __AlpineLlvmLibsLookup=1
424
- __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive)
460
+ elif [[ " $__AlpineArch " == " riscv64" || " $__AlpineArch " == " loongarch64 " ]]; then
461
+ __AlpineVersion=3.21 # minimum version that supports lldb-dev
462
+ __AlpinePackages+= " llvm19-libs "
425
463
elif [[ -n " $__AlpineMajorVersion " ]]; then
426
464
# use whichever alpine version is provided and select the latest toolchain libs
427
465
__AlpineLlvmLibsLookup=1
@@ -505,11 +543,6 @@ if [[ "$__CodeName" == "alpine" ]]; then
505
543
echo " $__ApkToolsSHA512SUM $__ApkToolsDir /apk.static" | sha512sum -c
506
544
chmod +x " $__ApkToolsDir /apk.static"
507
545
508
- if [[ -f " /usr/bin/qemu-$__QEMUArch -static" ]]; then
509
- mkdir -p " $__RootfsDir " /usr/bin
510
- cp -v " /usr/bin/qemu-$__QEMUArch -static" " $__RootfsDir /usr/bin"
511
- fi
512
-
513
546
if [[ " $__AlpineVersion " == " edge" ]]; then
514
547
version=edge
515
548
else
@@ -529,6 +562,10 @@ if [[ "$__CodeName" == "alpine" ]]; then
529
562
__ApkSignatureArg=" --keys-dir $__ApkKeysDir "
530
563
fi
531
564
565
+ if [[ " $__SkipEmulation " == " 1" ]]; then
566
+ __NoEmulationArg=" --no-scripts"
567
+ fi
568
+
532
569
# initialize DB
533
570
# shellcheck disable=SC2086
534
571
" $__ApkToolsDir /apk.static" \
@@ -550,7 +587,7 @@ if [[ "$__CodeName" == "alpine" ]]; then
550
587
" $__ApkToolsDir /apk.static" \
551
588
-X " http://dl-cdn.alpinelinux.org/alpine/$version /main" \
552
589
-X " http://dl-cdn.alpinelinux.org/alpine/$version /community" \
553
- -U $__ApkSignatureArg --root " $__RootfsDir " --arch " $__AlpineArch " \
590
+ -U $__ApkSignatureArg --root " $__RootfsDir " --arch " $__AlpineArch " $__NoEmulationArg \
554
591
add $__AlpinePackages
555
592
556
593
rm -r " $__ApkToolsDir "
@@ -745,25 +782,68 @@ elif [[ "$__CodeName" == "haiku" ]]; then
745
782
popd
746
783
rm -rf " $__RootfsDir /tmp"
747
784
elif [[ -n " $__CodeName " ]]; then
785
+ if [[ " $__SkipEmulation " == " 1" ]]; then
786
+ if [[ -z " $AR " ]]; then
787
+ if command -v ar & > /dev/null; then
788
+ AR=" $( command -v ar) "
789
+ elif command -v llvm-ar & > /dev/null; then
790
+ AR=" $( command -v llvm-ar) "
791
+ else
792
+ echo " Unable to find ar or llvm-ar on PATH, add them to PATH or set AR environment variable pointing to the available AR tool"
793
+ exit 1
794
+ fi
795
+ fi
796
+
797
+ # shellcheck disable=SC2086
798
+ suites=" $__CodeName $__DebianSuites $( echo $__UbuntuSuites | xargs -n 1 | xargs -I {} echo -n " $__CodeName -{} " ) "
799
+
800
+ PYTHON=${PYTHON_EXECUTABLE:- python3}
801
+
802
+ # shellcheck disable=SC2086,SC2046
803
+ echo running " $PYTHON " " $__CrossDir /install-debs.py" --arch " $__UbuntuArch " --mirror " $__UbuntuRepo " --rootfsdir " $__RootfsDir " --artool " $AR " \
804
+ $( echo $suites | xargs -n 1 | xargs -I {} echo -n " --suite {} " ) \
805
+ $__UbuntuPackages
806
+
807
+ # shellcheck disable=SC2086,SC2046
808
+ " $PYTHON " " $__CrossDir /install-debs.py" --arch " $__UbuntuArch " --mirror " $__UbuntuRepo " --rootfsdir " $__RootfsDir " --artool " $AR " \
809
+ $( echo $suites | xargs -n 1 | xargs -I {} echo -n " --suite {} " ) \
810
+ $__UbuntuPackages
811
+
812
+ exit 0
813
+ fi
748
814
815
+ __UpdateOptions=
749
816
if [[ " $__SkipSigCheck " == " 0" ]]; then
750
817
__Keyring=" $__Keyring --force-check-gpg"
818
+ else
819
+ __Keyring=
820
+ __UpdateOptions=" --allow-unauthenticated --allow-insecure-repositories"
751
821
fi
752
822
753
823
# shellcheck disable=SC2086
754
824
echo running debootstrap " --variant=minbase" $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo "
755
- debootstrap " --variant=minbase" $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo "
756
825
826
+ # shellcheck disable=SC2086
827
+ if ! debootstrap " --variant=minbase" $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo " ; then
828
+ echo " debootstrap failed! dumping debootstrap.log"
829
+ cat " $__RootfsDir /debootstrap/debootstrap.log"
830
+ exit 1
831
+ fi
832
+
833
+ rm -rf " $__RootfsDir " /etc/apt/* .{sources,list} " $__RootfsDir " /etc/apt/sources.list.d
757
834
mkdir -p " $__RootfsDir /etc/apt/sources.list.d/"
835
+
836
+ # shellcheck disable=SC2086
758
837
cat > " $__RootfsDir /etc/apt/sources.list.d/$__CodeName .sources" << EOF
759
838
Types: deb
760
839
URIs: $__UbuntuRepo
761
- Suites: $__CodeName $( echo $__UbuntuSuites | xargs -n 1 | xargs -I {} echo -n " $__CodeName -{} " )
840
+ Suites: $__CodeName $__DebianSuites $ ( echo $__UbuntuSuites | xargs -n 1 | xargs -I {} echo -n " $__CodeName -{} " )
762
841
Components: main universe
763
842
Signed-By: $__KeyringFile
764
843
EOF
765
844
766
- chroot " $__RootfsDir " apt-get update
845
+ # shellcheck disable=SC2086
846
+ chroot " $__RootfsDir " apt-get update $__UpdateOptions
767
847
chroot " $__RootfsDir " apt-get -f -y install
768
848
# shellcheck disable=SC2086
769
849
chroot " $__RootfsDir " apt-get -y install $__UbuntuPackages
0 commit comments