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
@@ -127,10 +128,12 @@ __AlpineKeys='
127
128
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
129
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
130
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==
131
+ 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
132
'
131
133
__Keyring=
132
134
__KeyringFile=" /usr/share/keyrings/ubuntu-archive-keyring.gpg"
133
135
__SkipSigCheck=0
136
+ __SkipEmulation=0
134
137
__UseMirror=0
135
138
136
139
__UnprocessedBuildArgs=
@@ -179,6 +182,18 @@ while :; do
179
182
__Keyring=" --keyring $__KeyringFile "
180
183
fi
181
184
;;
185
+ loongarch64)
186
+ __BuildArch=loongarch64
187
+ __AlpineArch=loongarch64
188
+ __QEMUArch=loongarch64
189
+ __UbuntuArch=loong64
190
+ __UbuntuSuites=unreleased
191
+ __LLDB_Package=" liblldb-19-dev"
192
+
193
+ if [[ " $__CodeName " == " sid" ]]; then
194
+ __UbuntuRepo=" http://ftp.ports.debian.org/debian-ports/"
195
+ fi
196
+ ;;
182
197
riscv64)
183
198
__BuildArch=riscv64
184
199
__AlpineArch=riscv64
@@ -339,10 +354,28 @@ while :; do
339
354
;;
340
355
sid) # Debian sid
341
356
__CodeName=sid
342
- __KeyringFile= " /usr/share/keyrings/debian-archive-keyring.gpg "
357
+ __UbuntuSuites=
343
358
344
- if [[ -z " $__UbuntuRepo " ]]; then
345
- __UbuntuRepo=" http://ftp.debian.org/debian/"
359
+ # Debian-Ports architectures need different values
360
+ case " $__UbuntuArch " in
361
+ amd64|arm64|armel|armhf|i386|mips64el|ppc64el|riscv64|s390x)
362
+ __KeyringFile=" /usr/share/keyrings/debian-archive-keyring.gpg"
363
+
364
+ if [[ -z " $__UbuntuRepo " ]]; then
365
+ __UbuntuRepo=" http://ftp.debian.org/debian/"
366
+ fi
367
+ ;;
368
+ * )
369
+ __KeyringFile=" /usr/share/keyrings/debian-ports-archive-keyring.gpg"
370
+
371
+ if [[ -z " $__UbuntuRepo " ]]; then
372
+ __UbuntuRepo=" http://ftp.ports.debian.org/debian-ports/"
373
+ fi
374
+ ;;
375
+ esac
376
+
377
+ if [[ -e " $__KeyringFile " ]]; then
378
+ __Keyring=" --keyring $__KeyringFile "
346
379
fi
347
380
;;
348
381
tizen)
@@ -387,6 +420,9 @@ while :; do
387
420
--skipsigcheck)
388
421
__SkipSigCheck=1
389
422
;;
423
+ --skipemulation)
424
+ __SkipEmulation=1
425
+ ;;
390
426
--rootfsdir|-rootfsdir)
391
427
shift
392
428
__RootfsDir=" $1 "
@@ -419,9 +455,9 @@ case "$__AlpineVersion" in
419
455
elif [[ " $__AlpineArch " == " x86" ]]; then
420
456
__AlpineVersion=3.17 # minimum version that supports lldb-dev
421
457
__AlpinePackages+=" llvm15-libs"
422
- elif [[ " $__AlpineArch " == " riscv64" ]]; then
423
- __AlpineLlvmLibsLookup=1
424
- __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive)
458
+ elif [[ " $__AlpineArch " == " riscv64" || " $__AlpineArch " == " loongarch64 " ]]; then
459
+ __AlpineVersion=3.21 # minimum version that supports lldb-dev
460
+ __AlpinePackages+= " llvm19-libs "
425
461
elif [[ -n " $__AlpineMajorVersion " ]]; then
426
462
# use whichever alpine version is provided and select the latest toolchain libs
427
463
__AlpineLlvmLibsLookup=1
@@ -505,11 +541,6 @@ if [[ "$__CodeName" == "alpine" ]]; then
505
541
echo " $__ApkToolsSHA512SUM $__ApkToolsDir /apk.static" | sha512sum -c
506
542
chmod +x " $__ApkToolsDir /apk.static"
507
543
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
544
if [[ " $__AlpineVersion " == " edge" ]]; then
514
545
version=edge
515
546
else
@@ -529,6 +560,10 @@ if [[ "$__CodeName" == "alpine" ]]; then
529
560
__ApkSignatureArg=" --keys-dir $__ApkKeysDir "
530
561
fi
531
562
563
+ if [[ " $__SkipEmulation " == " 1" ]]; then
564
+ __NoEmulationArg=" --no-scripts"
565
+ fi
566
+
532
567
# initialize DB
533
568
# shellcheck disable=SC2086
534
569
" $__ApkToolsDir /apk.static" \
@@ -550,7 +585,7 @@ if [[ "$__CodeName" == "alpine" ]]; then
550
585
" $__ApkToolsDir /apk.static" \
551
586
-X " http://dl-cdn.alpinelinux.org/alpine/$version /main" \
552
587
-X " http://dl-cdn.alpinelinux.org/alpine/$version /community" \
553
- -U $__ApkSignatureArg --root " $__RootfsDir " --arch " $__AlpineArch " \
588
+ -U $__ApkSignatureArg --root " $__RootfsDir " --arch " $__AlpineArch " $__NoEmulationArg \
554
589
add $__AlpinePackages
555
590
556
591
rm -r " $__ApkToolsDir "
@@ -745,25 +780,67 @@ elif [[ "$__CodeName" == "haiku" ]]; then
745
780
popd
746
781
rm -rf " $__RootfsDir /tmp"
747
782
elif [[ -n " $__CodeName " ]]; then
783
+ __Suites=" $__CodeName $( for suite in $__UbuntuSuites ; do echo -n " $__CodeName -$suite " ; done) "
784
+
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
+ PYTHON=${PYTHON_EXECUTABLE:- python3}
798
+
799
+ # shellcheck disable=SC2086,SC2046
800
+ echo running " $PYTHON " " $__CrossDir /install-debs.py" --arch " $__UbuntuArch " --mirror " $__UbuntuRepo " --rootfsdir " $__RootfsDir " --artool " $AR " \
801
+ $( for suite in $__Suites ; do echo -n " --suite $suite " ; done) \
802
+ $__UbuntuPackages
803
+
804
+ # shellcheck disable=SC2086,SC2046
805
+ " $PYTHON " " $__CrossDir /install-debs.py" --arch " $__UbuntuArch " --mirror " $__UbuntuRepo " --rootfsdir " $__RootfsDir " --artool " $AR " \
806
+ $( for suite in $__Suites ; do echo -n " --suite $suite " ; done) \
807
+ $__UbuntuPackages
808
+
809
+ exit 0
810
+ fi
748
811
812
+ __UpdateOptions=
749
813
if [[ " $__SkipSigCheck " == " 0" ]]; then
750
814
__Keyring=" $__Keyring --force-check-gpg"
815
+ else
816
+ __Keyring=
817
+ __UpdateOptions=" --allow-unauthenticated --allow-insecure-repositories"
751
818
fi
752
819
753
820
# shellcheck disable=SC2086
754
821
echo running debootstrap " --variant=minbase" $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo "
755
- debootstrap " --variant=minbase" $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo "
756
822
823
+ # shellcheck disable=SC2086
824
+ if ! debootstrap " --variant=minbase" $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo " ; then
825
+ echo " debootstrap failed! dumping debootstrap.log"
826
+ cat " $__RootfsDir /debootstrap/debootstrap.log"
827
+ exit 1
828
+ fi
829
+
830
+ rm -rf " $__RootfsDir " /etc/apt/* .{sources,list} " $__RootfsDir " /etc/apt/sources.list.d
757
831
mkdir -p " $__RootfsDir /etc/apt/sources.list.d/"
832
+
833
+ # shellcheck disable=SC2086
758
834
cat > " $__RootfsDir /etc/apt/sources.list.d/$__CodeName .sources" << EOF
759
835
Types: deb
760
836
URIs: $__UbuntuRepo
761
- Suites: $__CodeName $( echo $__UbuntuSuites | xargs -n 1 | xargs -I {} echo -n " $__CodeName -{} " )
837
+ Suites: $__Suites
762
838
Components: main universe
763
839
Signed-By: $__KeyringFile
764
840
EOF
765
841
766
- chroot " $__RootfsDir " apt-get update
842
+ # shellcheck disable=SC2086
843
+ chroot " $__RootfsDir " apt-get update $__UpdateOptions
767
844
chroot " $__RootfsDir " apt-get -f -y install
768
845
# shellcheck disable=SC2086
769
846
chroot " $__RootfsDir " apt-get -y install $__UbuntuPackages
0 commit comments