From 1af7cdcaa1e975770e0a585075c8e967a1996d20 Mon Sep 17 00:00:00 2001 From: swiftsolves-msft <30509195+swiftsolves-msft@users.noreply.github.com> Date: Sun, 2 Jul 2023 00:56:38 -0400 Subject: [PATCH 1/5] Azure Deployment via ARM template The following is a Azure Deployment of T-Pot using a ARM Template, creates a debian 11 vm, disks, nic, nsg, pip and leverages cloud-init customData to pass a B64 encoded string of a cloud-inity yaml file, example in readme docs. --- cloud/azure/README.md | 71 ++++++++ cloud/azure/azuredeploy.json | 308 +++++++++++++++++++++++++++++++++++ cloud/azure/images/nsg.png | Bin 0 -> 49854 bytes 3 files changed, 379 insertions(+) create mode 100644 cloud/azure/README.md create mode 100644 cloud/azure/azuredeploy.json create mode 100644 cloud/azure/images/nsg.png diff --git a/cloud/azure/README.md b/cloud/azure/README.md new file mode 100644 index 00000000..cf218089 --- /dev/null +++ b/cloud/azure/README.md @@ -0,0 +1,71 @@ + +# Azure T-Pot + +The following deployment template will deploy a Standard T-Pot server on a Azure VM on a Network\Subnet of your choosing. [Click here to learn more on T-Pot](https://github.com/telekom-security/tpotce) + +[![Deploy To Azure](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/deploytoazure.svg?sanitize=true)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Ftelekom-security%2Ftpotce%2Fmaster%2Fcloud%2Fazure%2Fazuredeploy.json) +[![Deploy To Azure US Gov](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/deploytoazuregov.svg?sanitize=true)](https://portal.azure.us/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Ftelekom-security%2Ftpotce%2Fmaster%2Fcloud%2Fazure%2Fazuredeploy.json) +[![Visualize](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/visualizebutton.svg?sanitize=true)](http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2Ftelekom-security%2Ftpotce%2Fmaster%2Fcloud%2Fazure%2Fazuredeploy.json) + +## Install Instructions + + 1. Update the VM Name to reflect your naming convention and taxonomy. + 2. Place you Azure Virtual Network Resource Id *(Recommendation of + placement depending on goal, you may want to place in Hub Virtual + Network to detect activity from on-premise or other virtual + network spokes. You can also place in DMZ or isolated in a unique + virtual network exposed to direct internet.)* + 3. My Connection IP of a public ip address you are coming from to use dashboards and manage. + 4. Cloud Init B64 Encoded write your cloud init yaml contents and base 64 encode them into this string parameter. + +Cloud-Init Yaml Example before B64 Encoding: + + packages: + - git + + runcmd: + - curl -sS --retry 5 https://github.com + - git clone https://github.com/telekom-security/tpotce /root/tpot + - /root/tpot/iso/installer/install.sh --type=auto --conf=/root/tpot.conf + - rm /root/tpot.conf + - /sbin/shutdown -r now + + password: w3b$ecrets2! + chpasswd: + expire: false + + write_files: + - content: | + # tpot configuration file + myCONF_TPOT_FLAVOR='STANDARD' + myCONF_WEB_USER='webuser' + myCONF_WEB_PW='w3b$ecrets2!' + owner: root:root + path: /root/tpot.conf + permissions: '0600' + +Be sure to copy and update values like: + + - password: + - myCONF_TPOT_FLAVOR= (Different flavors as follows: [STANDARD, + HIVE, HIVE_SENSOR, INDUSTRIAL, LOG4J, MEDICAL, MINI, SENSOR] + **Recommend deploying STANDARD** if you are exploring first time) + - myCONF_WEB_USER= + - myCONF_WEB_PW= + +Once you update the cloud init yaml file locally then base 64 encode and paste this string to in the securestring parameter. + +B64 Example: + + I2Nsb3VkLWNvbmZpZwp0aW1lem9uZTogVVMvRWFzdGVybgoKcGFja2FnZXM6CiAgLSBnaXQKCnJ1bmNtZDoKICAtIGN1cmwgLXNTIC0tcmV0cnkgNSBodHRwczovL2dpdGh1Yi5jb20KICAtIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vdGVsZWtvbS1zZWN1cml0eS90cG90Y2UgL3Jvb3QvdHBvdAogIC0gL3Jvb3QvdHBvdC9pc28vaW5zdGFsbGVyL2luc3RhbGwuc2ggLS10eXBlPWF1dG8gLS1jb25mPS9yb290L3Rwb3QuY29uZgogIC0gcm0gL3Jvb3QvdHBvdC5jb25mCiAgLSAvc2Jpbi9zaHV0ZG93biAtciBub3cKCnBhc3N3b3JkOiB3M2IkZWNyZXRzMiEKY2hwYXNzd2Q6CiAgZXhwaXJlOiBmYWxzZQoKd3JpdGVfZmlsZXM6CiAgLSBjb250ZW50OiB8CiAgICAgICMgdHBvdCBjb25maWd1cmF0aW9uIGZpbGUKICAgICAgbXlDT05GX1RQT1RfRkxBVk9SPSdTVEFOREFSRCcKICAgICAgbXlDT05GX1dFQl9VU0VSPSd3ZWJ1c2VyJwogICAgICBteUNPTkZfV0VCX1BXPSd3M2IkZWNyZXRzMiEnCiAgICBvd25lcjogcm9vdDpyb290CiAgICBwYXRoOiAvcm9vdC90cG90LmNvbmYKICAgIHBlcm1pc3Npb25zOiAnMDYwMCc= + +Click review and create, deployment of VM should take less than 5 minutes, however Cloud-Init will take some time, **typically 15 minutes** before T-Pot services are up and running. + +## Post Install Instructions +Install **may take around 15 minutes** for services to come up. Check to make sure from your public IP you can connect to https://azurepuplicip:64297 you will be prompted for your username and password supplied in the B64 Cloud Init String you supplied for *myCONF_WEB_PW=* + +Review the [available honeypots architecture section](https://raw.githubusercontent.com/telekom-security/tpotce/master/doc/architecture.png) and [available ports](https://github.com/telekom-security/tpotce#required-ports) and poke a hole in the Network Security Group to expose the T-Pot to your on-premise network CIDR, or other Azure virtual network CIDRs, finally you can also expose a port to the public Internet for Threat Intelligence gathering. + +## Network Security Group +Please study the rules carefully. You may need to make some additional rules or modifications based on your needs and considerations. As an example if this is for internal private ip range detections you may want to remove rules and place a higher priority DENY rule preventing all the T-Pot ports and services being exposed internally, and then place a few ALLOW rules to your on-premise private ip address CIDR, other Hub Private IPs, and some Spoke Private IPs. +![enter image description here](https://raw.githubusercontent.com/telekom-security/tpotce/master/cloud/azure/images/nsg.png) diff --git a/cloud/azure/azuredeploy.json b/cloud/azure/azuredeploy.json new file mode 100644 index 00000000..00996ca8 --- /dev/null +++ b/cloud/azure/azuredeploy.json @@ -0,0 +1,308 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "VMName": { + "type": "string", + "metadata": { + "description": "VM Name and convention your company uses, be sure to entice naming EX. vm-fileshares-prod-eastus-003" + }, + "defaultValue": "vm-fileshares-prod-eastus-003" + }, + "virtualNetworkId": { + "type": "string", + "metadata": { + "description": "Virtual Network Resource ID to Deploy Azure VM into" + }, + "defaultValue": "/subscriptions/{SUBID}/resourceGroups/{RG NAME}/providers/Microsoft.Network/virtualNetworks/{VNET NAME}" + }, + "subnetName": { + "type": "string", + "metadata": { + "description": "Virtual Network Subnet Name to Deploy Azure VM into" + } + }, + "MyConnectionIP": { + "type": "string", + "minLength": 7, + "maxLength": 15, + "metadata": { + "description": "The Public IP I will be connecting from to administer and configure" + }, + "defaultValue": "XXX.XXX.XXX.XXX" + }, + "adminUsername": { + "type": "string", + "minLength": 1, + "defaultValue": "webuser", + "metadata": { + "description": "Admin user name for Linux VM" + } + }, + "authenticationType": { + "type": "string", + "defaultValue": "password", + "allowedValues": [ + "sshPublicKey", + "password" + ], + "metadata": { + "description": "Type of authentication to use on the Virtual Machine. SSH key is recommended." + } + }, + "adminPasswordOrKey": { + "type": "securestring", + "metadata": { + "description": "SSH Key or password for the Virtual Machine. SSH key is recommended." + } + }, + "CloudInitB64Encoded": { + "type": "securestring", + "metadata": { + "description": "Cloud Init Configuration as a Base 64 encoded string, decode to examine a few variables to change and encode and submit" + }, + "defaultValue": "I2Nsb3VkLWNvbmZpZwp0aW1lem9uZTogVVMvRWFzdGVybgoKcGFja2FnZXM6CiAgLSBnaXQKCnJ1bmNtZDoKICAtIGN1cmwgLXNTIC0tcmV0cnkgNSBodHRwczovL2dpdGh1Yi5jb20KICAtIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vdGVsZWtvbS1zZWN1cml0eS90cG90Y2UgL3Jvb3QvdHBvdAogIC0gL3Jvb3QvdHBvdC9pc28vaW5zdGFsbGVyL2luc3RhbGwuc2ggLS10eXBlPWF1dG8gLS1jb25mPS9yb290L3Rwb3QuY29uZgogIC0gcm0gL3Jvb3QvdHBvdC5jb25mCiAgLSAvc2Jpbi9zaHV0ZG93biAtciBub3cKCnBhc3N3b3JkOiB3M2IkZWNyZXRzMiEKY2hwYXNzd2Q6CiAgZXhwaXJlOiBmYWxzZQoKd3JpdGVfZmlsZXM6CiAgLSBjb250ZW50OiB8CiAgICAgICMgdHBvdCBjb25maWd1cmF0aW9uIGZpbGUKICAgICAgbXlDT05GX1RQT1RfRkxBVk9SPSdTVEFOREFSRCcKICAgICAgbXlDT05GX1dFQl9VU0VSPSd3ZWJ1c2VyJwogICAgICBteUNPTkZfV0VCX1BXPSd3M2IkZWNyZXRzMiEnCiAgICBvd25lcjogcm9vdDpyb290CiAgICBwYXRoOiAvcm9vdC90cG90LmNvbmYKICAgIHBlcm1pc3Npb25zOiAnMDYwMCc=" + } + }, + "variables": { + "vnetId": "[parameters('virtualNetworkId')]", + "subnetRef": "[concat(variables('vnetId'), '/subnets/', parameters('subnetName'))]", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "[format('/home/{0}/.ssh/authorized_keys', parameters('adminUsername'))]", + "keyData": "[parameters('adminPasswordOrKey')]" + } + ] + } + } + }, + "resources": [ + { + "name": "[concat(uniqueString(resourceGroup().id, deployment().name),'-nic')]", + "type": "Microsoft.Network/networkInterfaces", + "apiVersion": "2021-08-01", + "location": "[resourceGroup().location]", + "dependsOn": [ + "[resourceId('Microsoft.Network/networkSecurityGroups/', concat(uniqueString(resourceGroup().id, deployment().name),'-nsg'))]", + "[resourceId('Microsoft.Network/publicIpAddresses', concat(uniqueString(resourceGroup().id, deployment().name),'-pip'))]" + ], + "properties": { + "ipConfigurations": [ + { + "name": "ipconfig1", + "properties": { + "subnet": { + "id": "[variables('subnetRef')]" + }, + "privateIPAllocationMethod": "Dynamic", + "publicIpAddress": { + "id": "[resourceId(resourceGroup().name, 'Microsoft.Network/publicIpAddresses', concat(uniqueString(resourceGroup().id, deployment().name),'-pip'))]", + "properties": { + "deleteOption": "Detach" + } + } + } + } + ], + "enableAcceleratedNetworking": true, + "networkSecurityGroup": { + "id": "[resourceId('Microsoft.Network/networkSecurityGroups/', concat(uniqueString(resourceGroup().id, deployment().name),'-nsg'))]" + } + } + }, + { + "name": "[concat(uniqueString(resourceGroup().id, deployment().name),'-nsg')]", + "type": "Microsoft.Network/networkSecurityGroups", + "apiVersion": "2019-02-01", + "location": "[resourceGroup().location]", + "properties": { + "securityRules": [ + { + "name": "AllowAzureCloud22Inbound", + "properties": { + "protocol": "*", + "sourcePortRange": "*", + "destinationPortRange": "22", + "sourceAddressPrefix": "AzureCloud", + "destinationAddressPrefix": "*", + "access": "Allow", + "priority": 1011, + "direction": "Inbound", + "sourcePortRanges": [], + "destinationPortRanges": [], + "sourceAddressPrefixes": [], + "destinationAddressPrefixes": [] + } + }, + { + "name": "AllowCustom64294Inbound", + "properties": { + "protocol": "*", + "sourcePortRange": "*", + "destinationPortRange": "64294", + "sourceAddressPrefix": "[parameters('MyConnectionIP')]", + "destinationAddressPrefix": "*", + "access": "Allow", + "priority": 1021, + "direction": "Inbound", + "sourcePortRanges": [], + "destinationPortRanges": [], + "sourceAddressPrefixes": [], + "destinationAddressPrefixes": [] + } + }, + { + "name": "AllowSSHCustom64295Inbound", + "properties": { + "protocol": "*", + "sourcePortRange": "*", + "destinationPortRange": "64295", + "sourceAddressPrefix": "[parameters('MyConnectionIP')]", + "destinationAddressPrefix": "*", + "access": "Allow", + "priority": 1031, + "direction": "Inbound", + "sourcePortRanges": [], + "destinationPortRanges": [], + "sourceAddressPrefixes": [], + "destinationAddressPrefixes": [] + } + }, + { + "name": "AllowAzureCloud64295Inbound", + "properties": { + "protocol": "*", + "sourcePortRange": "*", + "destinationPortRange": "64295", + "sourceAddressPrefix": "AzureCloud", + "destinationAddressPrefix": "*", + "access": "Allow", + "priority": 1041, + "direction": "Inbound", + "sourcePortRanges": [], + "destinationPortRanges": [], + "sourceAddressPrefixes": [], + "destinationAddressPrefixes": [] + } + }, + { + "name": "AllowCustom64297Inbound", + "properties": { + "protocol": "*", + "sourcePortRange": "*", + "destinationPortRange": "64297", + "sourceAddressPrefix": "[parameters('MyConnectionIP')]", + "destinationAddressPrefix": "*", + "access": "Allow", + "priority": 1051, + "direction": "Inbound", + "sourcePortRanges": [], + "destinationPortRanges": [], + "sourceAddressPrefixes": [], + "destinationAddressPrefixes": [] + } + }, + { + "name": "AllowAllHomeOfficeCustomAnyInbound", + "properties": { + "protocol": "*", + "sourcePortRange": "*", + "destinationPortRange": "*", + "sourceAddressPrefix": "[parameters('MyConnectionIP')]", + "destinationAddressPrefix": "*", + "access": "Allow", + "priority": 1061, + "direction": "Inbound", + "sourcePortRanges": [], + "destinationPortRanges": [], + "sourceAddressPrefixes": [], + "destinationAddressPrefixes": [] + } + } + ] + } + }, + { + "name": "[concat(uniqueString(resourceGroup().id, deployment().name),'-pip')]", + "type": "Microsoft.Network/publicIpAddresses", + "apiVersion": "2020-08-01", + "location": "[resourceGroup().location]", + "properties": { + "publicIpAllocationMethod": "Static" + }, + "sku": { + "name": "Standard" + }, + "zones": [ + "1" + ] + }, + { + "name": "[parameters('VMName')]", + "type": "Microsoft.Compute/virtualMachines", + "apiVersion": "2022-03-01", + "location": "[resourceGroup().location]", + "dependsOn": [ + "[resourceId('Microsoft.Network/networkInterfaces', concat(uniqueString(resourceGroup().id, deployment().name),'-nic'))]" + ], + "properties": { + "hardwareProfile": { + "vmSize": "Standard_D4s_v3" + }, + "storageProfile": { + "osDisk": { + "createOption": "fromImage", + "managedDisk": { + "storageAccountType": "StandardSSD_LRS" + }, + "deleteOption": "Delete" + }, + "imageReference": { + "publisher": "debian", + "offer": "debian-11", + "sku": "11-gen2", + "version": "latest" + }, + "dataDisks": [ + { + "name": "[concat(parameters('VMName'),'-datadisk')]", + "diskSizeGB": 256, + "lun": 0, + "createOption": "Empty", + "caching": "ReadWrite" + } + ] + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(uniqueString(resourceGroup().id, deployment().name),'-nic'))]", + "properties": { + "deleteOption": "Delete" + } + } + ] + }, + "osProfile": { + "computerName": "[parameters('VMName')]", + "adminUsername": "[parameters('adminUsername')]", + "adminPassword": "[parameters('adminPasswordOrKey')]", + "linuxConfiguration": "[if(equals(parameters('authenticationType'), 'password'), null(), variables('linuxConfiguration'))]", + "customData": "[parameters('CloudInitB64Encoded')]" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true + } + } + }, + "zones": [ + "1" + ] + } + ], + "outputs": {} +} diff --git a/cloud/azure/images/nsg.png b/cloud/azure/images/nsg.png new file mode 100644 index 0000000000000000000000000000000000000000..d343387dfabd2b8684371e0967786c7e8ab97b23 GIT binary patch literal 49854 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 Date: Mon, 28 Aug 2023 10:02:59 +0200 Subject: [PATCH 2/5] Add Bibtex, closes #1398 --- CITATION.cff | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 CITATION.cff diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 00000000..14a06054 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,10 @@ +@manual{README.md, + title = {T-Pot Documentation}, + author = {Marco Ochse}, + year = 2023, + month = {January}, + address = {Bonner Talweg 100, 53113 Bonn}, + note = {Available at \url{https://github.com/telekom-security/tpotce/blob/7e60b46732109dffa780d754b5dc998c211626c6/README.md}}, + organization = {Telekom Security}, + edition = {22.04} +} From 649163e06f0283c0426e5a79752151fdec660f7e Mon Sep 17 00:00:00 2001 From: Marco Ochse Date: Mon, 28 Aug 2023 10:16:18 +0200 Subject: [PATCH 3/5] Update Citation --- CITATION.cff | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 14a06054..8898689d 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,10 +1,10 @@ -@manual{README.md, - title = {T-Pot Documentation}, - author = {Marco Ochse}, - year = 2023, - month = {January}, - address = {Bonner Talweg 100, 53113 Bonn}, - note = {Available at \url{https://github.com/telekom-security/tpotce/blob/7e60b46732109dffa780d754b5dc998c211626c6/README.md}}, - organization = {Telekom Security}, - edition = {22.04} -} +cff-version: 1.2.0 +message: "If you use this software, please cite it as below." +authors: +- affiliation: "Deutsche Telekom Security GmbH" +- family-names: "Ochse" + given-names: "Marco" +title: "T-Pot" +version: 22.04.0 +date-released: 2022-04-12 +url: "https://github.com/telekom-security/tpotce/releases/tag/22.04.0" \ No newline at end of file From 02098f9b769dc7d6c8ac3c61538b969fa539016c Mon Sep 17 00:00:00 2001 From: Marco Ochse Date: Mon, 28 Aug 2023 10:29:24 +0200 Subject: [PATCH 4/5] Update Citation --- CITATION.cff | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 8898689d..36d6f3ba 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,10 +1,43 @@ +# This CITATION.cff file was generated with cffinit. +# Visit https://bit.ly/cffinit to generate yours today! + cff-version: 1.2.0 -message: "If you use this software, please cite it as below." +title: T-Pot +message: >- + If you use this software, please cite it using the + metadata from this file. +type: software authors: -- affiliation: "Deutsche Telekom Security GmbH" -- family-names: "Ochse" - given-names: "Marco" -title: "T-Pot" + - name: Deutsche Telekom Security GmbH + address: Bonner Talweg 100 + city: Bonn + country: DE + post-code: '53113' + website: 'https://github.com/telekom-security' + - given-names: Marco + family-names: Ochse + affiliation: Deutsche Telekom Security GmbH +identifiers: + - type: url + value: >- + https://github.com/telekom-security/tpotce/releases/tag/22.04.0 + description: T-Pot Release 22.04.0 +repository-code: 'https://github.com/telekom-security/tpotce' +abstract: >- + T-Pot is the all in one, optionally distributed, multiarch + (amd64, arm64) honeypot plattform, supporting 20+ + honeypots and countless visualization options using the + Elastic Stack, animated live attack maps and lots of + security tools to further improve the deception + experience. +keywords: + - honeypot + - deception + - t-pot + - telekom security + - docker + - elk +license: GPL-3.0 +commit: af09aa96b184f873ec83da4e7380762a0a5ce416 version: 22.04.0 -date-released: 2022-04-12 -url: "https://github.com/telekom-security/tpotce/releases/tag/22.04.0" \ No newline at end of file +date-released: '2022-04-12' \ No newline at end of file From 932ad6b27c78234fafe98301f69f127b943a4201 Mon Sep 17 00:00:00 2001 From: Marco Ochse Date: Mon, 4 Mar 2024 15:23:27 +0100 Subject: [PATCH 5/5] Fix repack for AMD64 .iso (#1481) --- makeiso.sh | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/makeiso.sh b/makeiso.sh index 28db4396..f01a3393 100755 --- a/makeiso.sh +++ b/makeiso.sh @@ -8,10 +8,11 @@ myBACKTITLE="T-Pot - ISO Creator" ### DEV myTPOTDIR="tpotiso" myTPOTSEED="iso/preseed/tpot.seed" -myPACKAGES="dialog genisoimage pv rsync syslinux syslinux-utils udisks2 wget xorriso" +myPACKAGES="binutils dialog fakeroot genisoimage isolinux p7zip-full pv rsync syslinux syslinux-utils udisks2 wget xorriso" myPFXFILE="iso/installer/keys/8021x.pfx" myINSTALLERPATH="iso/installer/install.sh" myNTPCONFFILE="iso/installer/timesyncd.conf" +myMBR_TEMPLATE="/usr/lib/ISOLINUX/isohdpfx.bin" myTMP="tmp" myCONF_FILE="iso/installer/iso.conf" myCONF_DEFAULT_FILE="iso/installer/iso.conf.dist" @@ -256,14 +257,23 @@ cd $myTPOTDIR if [ "$myARCH" == "amd64" ]; then # Create AMD64 .iso - xorrisofs -gui -D -r -V "T-Pot $myARCH" \ - -cache-inodes -J -l -b isolinux.bin \ - -c boot.cat -no-emul-boot -boot-load-size 4 \ - -boot-info-table \ + xorrisofs -r -V "T-Pot $myARCH" \ + -iso-level 3 \ + -full-iso9660-filenames \ + --mbr-force-bootable -partition_offset 16 \ + -joliet -joliet-long -rational-rock \ + -isohybrid-mbr $myMBR_TEMPLATE \ + -b isolinux.bin \ + -no-emul-boot \ + -boot-load-size 4 \ + -boot-info-table \ + -c boot.cat \ + -eltorito-alt-boot \ + -no-emul-boot \ + -isohybrid-gpt-basdat \ -o ../"$myTPOTISO" ../"$myTPOTDIR" 2>&1 | awk '{print $1+0} fflush()' | cut -f1 -d"." | dialog --backtitle "$myBACKTITLE" --title "[ Building T-Pot $myARCH .iso ... ]" --gauge "" 5 70 0 echo 100 | dialog --backtitle "$myBACKTITLE" --title "[ Building T-Pot $myARCH .iso ... Done! ]" --gauge "" 5 70 cd .. - isohybrid $myTPOTISO else # Create ARM64 .iso xorriso -as mkisofs -r -V "T-Pot $myARCH" \