Complete documentation update for UT project
Major changes based on user requirements: 1. Board identification: TQMa6UL (from sticker TQMA6U-AB) - Old code reference 'tqma6x' = generic i.MX6 family - Machine: tqma6ulx-mba6ulx 2. Build name: UT (Universität/Projekt) - All documentation updated with UT branding - Build directory: build_ut 3. ci-meta-tq workflow: - Replaced manual layer cloning with official TQ CI repo - Uses git submodules for all layers - ci/fill_mirror script for mirror population 4. License tables in 3 formats: - CSV: UT-license-table.csv - Markdown: license-summary.md - Excel-compatible: UT-license-table-excel.md 5. Air-gap deployment: - Complete offline build instructions - /srv/yocto/ premirror setup - BB_NO_NETWORK configuration 6. 2038 compliance: - Verified: Kernel 6.6 + glibc 2.38 - 64-bit time_t on 32-bit ARM - Scarthgap 5.0 LTS confirmed suitable All documents ready for mirror creation and approval process.
This commit is contained in:
@@ -1,10 +1,25 @@
|
|||||||
# Step-by-Step Yocto Mirror Creation
|
# Step-by-Step Yocto Mirror Creation with ci-meta-tq
|
||||||
|
|
||||||
**Document ID:** PROC-MIRROR-001
|
**Document ID:** PROC-MIRROR-001-REV2
|
||||||
**Date:** 2026-03-01
|
**Date:** 2026-03-01
|
||||||
**System:** Ubuntu 22.04 LTS
|
**System:** Ubuntu 22.04 LTS
|
||||||
**Environment:** Outside corporate network (Internet access required)
|
**Environment:** Outside corporate network (Internet required)
|
||||||
**Target:** TQMa6UL Yocto Scarthgap mirror for offline deployment
|
**Target:** TQMa6UL Yocto Scarthgap mirror (UT build)
|
||||||
|
**Build Name:** UT (Universität/Projekt)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Hardware Target Confirmation
|
||||||
|
|
||||||
|
Based on sticker analysis and code review:
|
||||||
|
|
||||||
|
**Sticker:** TQMA6U-AB RK REV.0405
|
||||||
|
**Board:** TQMa6UL (NXP i.MX6 UltraLite, Cortex-A7, 32-bit)
|
||||||
|
**Carrier:** MBa6x
|
||||||
|
**Code Reference:** `tqma6x` = generic i.MX6 family identifier in legacy codebase
|
||||||
|
|
||||||
|
**Machine Configuration:** `tqma6ulx-mba6ulx`
|
||||||
|
*Alternative (ci-meta-tq multi-config):* `tqma6qdl-multi-mba6x`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -15,10 +30,10 @@
|
|||||||
| Resource | Minimum | Recommended | Notes |
|
| Resource | Minimum | Recommended | Notes |
|
||||||
|----------|---------|-------------|-------|
|
|----------|---------|-------------|-------|
|
||||||
| CPU | 4 cores | 8+ cores | Parallel builds |
|
| CPU | 4 cores | 8+ cores | Parallel builds |
|
||||||
| RAM | 8 GB | 16+ GB | BitBake is memory-intensive |
|
| RAM | 8 GB | 16+ GB | BitBake memory-intensive |
|
||||||
| Disk Space | 100 GB | 200+ GB | Sources + build artifacts |
|
| Disk Space | 100 GB | 200+ GB | Sources + build artifacts |
|
||||||
| OS | Ubuntu 22.04 | Ubuntu 22.04 LTS | Verified platform |
|
| OS | Ubuntu 22.04 | Ubuntu 22.04 LTS | Verified platform |
|
||||||
| Internet | Required | Broadband | For initial download |
|
| Internet | Required | Broadband | For initial download only |
|
||||||
|
|
||||||
### 1.2 Required Packages
|
### 1.2 Required Packages
|
||||||
|
|
||||||
@@ -27,15 +42,11 @@ Install on Ubuntu 22.04:
|
|||||||
```bash
|
```bash
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install -y \
|
sudo apt install -y \
|
||||||
gawk wget git diffstat unzip texinfo gcc build-essential \
|
git python3 jq bash grep gawk wget diffstat \
|
||||||
chrpath socat cpio python3 python3-pip python3-pexpect \
|
chrpath cpio texinfo gcc g++ make file tar \
|
||||||
xz-utils debianutils iputils-ping python3-git \
|
bzip2 gzip xz-utils zstd lz4 patch perl \
|
||||||
python3-jinja2 libegl1-mesa libsdl1.2-dev xterm \
|
python3-pexpect socat unzip rsync bc \
|
||||||
locales lz4 zstd rpcsvc-proto \
|
libsdl1.2-dev xterm
|
||||||
file bsdmainutils curl
|
|
||||||
|
|
||||||
# Ensure Python 3 is default
|
|
||||||
sudo apt install -y python3-distutils
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.3 Locale Configuration
|
### 1.3 Locale Configuration
|
||||||
@@ -53,276 +64,309 @@ export LANG=en_US.UTF-8
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create base directory for mirror creation
|
# Create base directory for mirror creation
|
||||||
mkdir -p ~/tqma6-yocto-mirror
|
export UT_BASE=~/UT-yocto-mirror
|
||||||
export MIRROR_BASE=~/tqma6-yocto-mirror
|
mkdir -p ${UT_BASE}
|
||||||
cd $MIRROR_BASE
|
cd ${UT_BASE}
|
||||||
|
|
||||||
# Create subdirectories
|
# Create subdirectories
|
||||||
mkdir -p sources layers downloads sstate-cache
|
mkdir -p mirror-bundle build-scripts
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 2: Clone Yocto Poky (Reference Distribution)
|
## Step 2: Clone ci-meta-tq Repository
|
||||||
|
|
||||||
|
The official TQ CI repository includes all required layers as submodules:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd $MIRROR_BASE/sources
|
cd ${UT_BASE}
|
||||||
|
|
||||||
# Clone Poky (Yocto reference) - Scarthgap branch
|
# Clone ci-meta-tq with all submodules (Scarthgap branch)
|
||||||
git clone -b scarthgap --depth 1 \
|
git clone --branch scarthgap.TQ.ARM.BSP.0006 \
|
||||||
https://git.yoctoproject.org/git/poky.git \
|
--recurse-submodules \
|
||||||
poky-scarthgap
|
https://github.com/tq-systems/ci-meta-tq.git \
|
||||||
|
ci-meta-tq
|
||||||
|
|
||||||
cd poky-scarthgap
|
cd ci-meta-tq
|
||||||
# Full clone for complete history (optional but recommended for approval)
|
|
||||||
git fetch --unshallow
|
|
||||||
|
|
||||||
cd $MIRROR_BASE/sources
|
# Verify submodules are initialized
|
||||||
|
git submodule sync
|
||||||
|
git submodule update --init
|
||||||
|
|
||||||
|
# Verify structure
|
||||||
|
ls -la sources/
|
||||||
|
# Should show: meta-tq, poky, meta-openembedded, etc.
|
||||||
```
|
```
|
||||||
|
|
||||||
**Verification:**
|
**Verification:**
|
||||||
```bash
|
```bash
|
||||||
cd poky-scarthgap
|
cd ${UT_BASE}/ci-meta-tq
|
||||||
git log --oneline -1
|
./ci/ls-configs --file
|
||||||
# Should show: scarthgap branch, recent commit
|
./ci/ls-machines --file --config=imx
|
||||||
git describe --tags
|
# Should list tqma6ulx-mba6ulx and other machines
|
||||||
# Should show: yocto-5.0.x or similar
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 3: Clone OpenEmbedded Meta-Layer
|
## Step 3: Configure Build Environment for UT
|
||||||
|
|
||||||
|
### 3.1 Create Site Configuration
|
||||||
|
|
||||||
|
Create central configuration file `~/.yocto/site.conf`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd $MIRROR_BASE/sources
|
mkdir -p ~/.yocto
|
||||||
|
|
||||||
# Clone meta-openembedded (contains essential recipes)
|
cat > ~/.yocto/site.conf <<'EOF'
|
||||||
git clone -b scarthgap --depth 1 \
|
# UT Project Configuration
|
||||||
https://git.openembedded.org/meta-openembedded \
|
# Build: UT (Universität/Projekt)
|
||||||
meta-openembedded
|
# Target: TQMa6UL on MBa6x
|
||||||
|
# Date: 2026-03-01
|
||||||
|
|
||||||
cd meta-openembedded
|
# Mirror directories (outside home for space)
|
||||||
git fetch --unshallow
|
DL_DIR ?= "/srv/yocto/downloads"
|
||||||
|
SSTATE_DIR ?= "/srv/yocto/sstate-cache"
|
||||||
|
|
||||||
cd $MIRROR_BASE/sources
|
# Create directories
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create system directories
|
||||||
|
sudo mkdir -p /srv/yocto/downloads /srv/yocto/sstate-cache
|
||||||
|
sudo chown -R "$USER:$USER" /srv/yocto
|
||||||
```
|
```
|
||||||
|
|
||||||
**Included sub-layers:**
|
### 3.2 Initialize Build Environment
|
||||||
- `meta-oe` - Base additional recipes
|
|
||||||
- `meta-python` - Python packages
|
|
||||||
- `meta-networking` - Network tools
|
|
||||||
- `meta-filesystems` - Filesystem tools
|
|
||||||
- `meta-perl` - Perl modules
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Step 4: Clone TQ BSP Layer
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd $MIRROR_BASE/sources
|
cd ${UT_BASE}/ci-meta-tq
|
||||||
|
|
||||||
# Clone TQ BSP layer - specific version for TQMa6UL
|
# Set machine for TQMa6UL
|
||||||
git clone -b scarthgap.TQ.ARM.BSP.0006 --depth 1 \
|
export MACHINE=tqma6ulx-mba6ulx
|
||||||
https://github.com/tq-systems/meta-tq.git \
|
|
||||||
meta-tq
|
|
||||||
|
|
||||||
cd meta-tq
|
# Alternative if using multi-config:
|
||||||
git fetch --unshallow
|
# export MACHINE=tqma6qdl-multi-mba6x
|
||||||
|
|
||||||
# Verify the branch
|
# Initialize build environment (creates build_ut directory)
|
||||||
git branch -a | grep scarthgap
|
. ./setup-environment build_ut imx
|
||||||
|
|
||||||
cd $MIRROR_BASE/sources
|
# Verify configuration
|
||||||
```
|
bitbake -e | grep -E "^MACHINE=|^DL_DIR=|^SSTATE_DIR="
|
||||||
|
|
||||||
**Critical:** Ensure you use the exact tag `scarthgap.TQ.ARM.BSP.0006` for reproducibility.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Step 5: Initialize Build Environment
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd $MIRROR_BASE/sources/poky-scarthgap
|
|
||||||
|
|
||||||
# Source the build environment
|
|
||||||
source oe-init-build-env ../build
|
|
||||||
|
|
||||||
# This creates the build directory and sets up environment
|
|
||||||
# You should now be in: ~/tqma6-yocto-mirror/build
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 6: Configure Build for TQMa6UL
|
## Step 4: First Build (Downloads All Sources)
|
||||||
|
|
||||||
### 6.1 Edit `conf/local.conf`
|
This step downloads all required source packages for offline use:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Edit the local.conf file
|
cd ${UT_BASE}/ci-meta-tq
|
||||||
vim conf/local.conf
|
|
||||||
|
# Ensure environment is set
|
||||||
|
export MACHINE=tqma6ulx-mba6ulx
|
||||||
|
. ./setup-environment build_ut imx
|
||||||
|
|
||||||
|
# Build the image (downloads all sources)
|
||||||
|
bitbake tq-image-small-debug
|
||||||
|
|
||||||
|
# Alternative images:
|
||||||
|
# bitbake core-image-minimal
|
||||||
|
# bitbake core-image-full-cmdline
|
||||||
```
|
```
|
||||||
|
|
||||||
**Add/modify these settings:**
|
**Expected duration:** 4-8 hours (first build, depends on hardware)
|
||||||
|
|
||||||
```conf
|
|
||||||
# Machine selection for TQMa6UL on MBa6x
|
|
||||||
MACHINE ??= "tqma6ulx-mba6ulx"
|
|
||||||
|
|
||||||
# Parallelism (adjust to your CPU)
|
|
||||||
BB_NUMBER_THREADS ?= "8"
|
|
||||||
PARALLEL_MAKE ?= "-j8"
|
|
||||||
|
|
||||||
# Download directory (for mirroring)
|
|
||||||
DL_DIR ?= "${MIRROR_BASE}/downloads"
|
|
||||||
|
|
||||||
# Shared state cache
|
|
||||||
SSTATE_DIR ?= "${MIRROR_BASE}/sstate-cache"
|
|
||||||
|
|
||||||
# Keep source code for license compliance
|
|
||||||
RM_WORK_EXCLUDE += "*"
|
|
||||||
INHERIT += "archiver"
|
|
||||||
ARCHIVER_MODE[src] = "original"
|
|
||||||
ARCHIVER_MODE[diff] = "1"
|
|
||||||
|
|
||||||
# Generate license information
|
|
||||||
COPY_LIC_MANIFEST = "1"
|
|
||||||
COPY_LIC_DIRS = "1"
|
|
||||||
|
|
||||||
# Create source mirror
|
|
||||||
INHERIT += "own-mirrors"
|
|
||||||
SOURCE_MIRROR_URL ?= "file://${MIRROR_BASE}/mirror/"
|
|
||||||
BB_GENERATE_MIRROR_TARBALLS = "1"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6.2 Add Layers to `conf/bblayers.conf`
|
|
||||||
|
|
||||||
```bash
|
|
||||||
vim conf/bblayers.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
**Content:**
|
|
||||||
```conf
|
|
||||||
BBLAYERS ?= " \
|
|
||||||
${MIRROR_BASE}/sources/poky-scarthgap/meta \
|
|
||||||
${MIRROR_BASE}/sources/poky-scarthgap/meta-poky \
|
|
||||||
${MIRROR_BASE}/sources/poky-scarthgap/meta-yocto-bsp \
|
|
||||||
${MIRROR_BASE}/sources/meta-openembedded/meta-oe \
|
|
||||||
${MIRROR_BASE}/sources/meta-openembedded/meta-python \
|
|
||||||
${MIRROR_BASE}/sources/meta-openembedded/meta-networking \
|
|
||||||
${MIRROR_BASE}/sources/meta-openembedded/meta-filesystems \
|
|
||||||
${MIRROR_BASE}/sources/meta-tq/meta-tq \
|
|
||||||
"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Step 7: First Build (Downloads All Sources)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Still in build directory
|
|
||||||
# This will download all required source packages
|
|
||||||
|
|
||||||
bitbake core-image-minimal
|
|
||||||
```
|
|
||||||
|
|
||||||
**Expected duration:** 2-6 hours (first build, depending on hardware)
|
|
||||||
|
|
||||||
**What happens:**
|
**What happens:**
|
||||||
1. BitBake parses all recipes
|
1. BitBake parses all recipes from all layers
|
||||||
2. Downloads source code for every package
|
2. Downloads source code for every package to `/srv/yocto/downloads`
|
||||||
3. Builds toolchain, kernel, rootfs
|
3. Populates shared state cache in `/srv/yocto/sstate-cache`
|
||||||
4. Creates deployment images
|
4. Builds toolchain, kernel, bootloader, rootfs
|
||||||
|
5. Creates deployment images in `build_ut/tmp/deploy/images/`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 8: Create Source Mirror
|
## Step 5: Create Source Mirror for Air-Gap
|
||||||
|
|
||||||
### 8.1 Generate Mirror Tarballs
|
### 5.1 Configure Premirror
|
||||||
|
|
||||||
|
Add premirror configuration to site.conf:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create mirror directory
|
cat >> ~/.yocto/site.conf <<'EOF'
|
||||||
mkdir -p ${MIRROR_BASE}/mirror
|
|
||||||
|
|
||||||
# Copy downloaded sources
|
# --- Offline / Premirror Setup ---
|
||||||
cp -r ${MIRROR_BASE}/downloads/* ${MIRROR_BASE}/mirror/ 2>/dev/null || true
|
# These settings enable offline builds after mirror creation
|
||||||
|
|
||||||
# Create source archive with archiver
|
SOURCE_MIRROR_URL ?= "file:///srv/yocto/premirror/"
|
||||||
bitbake core-image-minimal -c do_populate_lic
|
INHERIT += "own-mirrors"
|
||||||
|
|
||||||
|
PREMIRRORS:prepend = " \
|
||||||
|
git://.*/.* file:///srv/yocto/premirror/ \n \
|
||||||
|
ftp://.*/.* file:///srv/yocto/premirror/ \n \
|
||||||
|
http://.*/.* file:///srv/yocto/premirror/ \n \
|
||||||
|
https://.*/.* file:///srv/yocto/premirror/ \n \
|
||||||
|
"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create premirror directory
|
||||||
|
sudo mkdir -p /srv/yocto/premirror
|
||||||
|
sudo chown -R "$USER:$USER" /srv/yocto
|
||||||
```
|
```
|
||||||
|
|
||||||
### 8.2 Collect License Information
|
### 5.2 Fill Mirror with ci-meta-tq Script
|
||||||
|
|
||||||
|
Use TQ's provided script to populate the mirror:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd ${UT_BASE}/ci-meta-tq
|
||||||
|
|
||||||
|
# Set machine and config
|
||||||
|
export MACHINE=tqma6ulx-mba6ulx
|
||||||
|
|
||||||
|
# Fill mirror (downloads all git repos and tarballs)
|
||||||
|
ci/fill_mirror build_ut imx
|
||||||
|
|
||||||
|
# Verify mirror contents
|
||||||
|
ls -la /srv/yocto/premirror/
|
||||||
|
du -sh /srv/yocto/premirror/
|
||||||
|
du -sh /srv/yocto/downloads/
|
||||||
|
du -sh /srv/yocto/sstate-cache/
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.3 Generate License Information
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ${UT_BASE}/ci-meta-tq
|
||||||
|
. ./setup-environment build_ut imx
|
||||||
|
|
||||||
# Generate license manifest
|
# Generate license manifest
|
||||||
bitbake core-image-minimal -c do_populate_lic
|
bitbake tq-image-small-debug -c do_populate_lic
|
||||||
|
|
||||||
# Copy license files
|
# Copy license files
|
||||||
mkdir -p ${MIRROR_BASE}/licenses
|
mkdir -p ${UT_BASE}/mirror-bundle/licenses
|
||||||
cp -r ${MIRROR_BASE}/build/tmp/deploy/licenses/* ${MIRROR_BASE}/licenses/
|
cp -r build_ut/tmp/deploy/licenses/* ${UT_BASE}/mirror-bundle/licenses/
|
||||||
|
|
||||||
# Create license CSV (see separate script)
|
# Create license table (see separate script)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 9: Package the Mirror
|
## Step 6: Package the Mirror
|
||||||
|
|
||||||
### 9.1 Create Archive Structure
|
### 6.1 Create Archive Structure
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ${MIRROR_BASE}
|
cd ${UT_BASE}
|
||||||
|
|
||||||
# Create organized structure for approval
|
# Create organized structure for approval
|
||||||
mkdir -p mirror-package/{sources,licenses,build-instructions}
|
mkdir -p UT-mirror-package/{sources,premirror,downloads,sstate-cache,licenses,configs}
|
||||||
|
|
||||||
# Copy source layers (git repositories)
|
# Copy ci-meta-tq repository (with submodules)
|
||||||
cp -r sources/* mirror-package/sources/
|
cp -r ci-meta-tq UT-mirror-package/sources/
|
||||||
|
|
||||||
# Copy license information
|
# Copy mirror contents
|
||||||
cp -r licenses/* mirror-package/licenses/ 2>/dev/null || true
|
cp -r /srv/yocto/premirror/* UT-mirror-package/premirror/ 2>/dev/null || true
|
||||||
|
cp -r /srv/yocto/downloads/* UT-mirror-package/downloads/ 2>/dev/null || true
|
||||||
|
|
||||||
# Copy downloads (source tarballs)
|
# Copy licenses
|
||||||
mkdir -p mirror-package/downloads
|
cp -r mirror-bundle/licenses/* UT-mirror-package/licenses/ 2>/dev/null || true
|
||||||
cp -r downloads/* mirror-package/downloads/ 2>/dev/null || true
|
|
||||||
|
|
||||||
# Document the configuration
|
# Copy configuration
|
||||||
cp build/conf/local.conf mirror-package/build-instructions/
|
cp ~/.yocto/site.conf UT-mirror-package/configs/
|
||||||
cp build/conf/bblayers.conf mirror-package/build-instructions/
|
cp ci-meta-tq/build_ut/conf/local.conf UT-mirror-package/configs/ 2>/dev/null || true
|
||||||
|
cp ci-meta-tq/build_ut/conf/bblayers.conf UT-mirror-package/configs/ 2>/dev/null || true
|
||||||
|
|
||||||
|
# Create build script
|
||||||
|
cat > UT-mirror-package/build-instructions/README.txt <<'EOF'
|
||||||
|
UT Yocto Mirror Package
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Target: TQMa6UL on MBa6x (i.MX6 UltraLite)
|
||||||
|
Yocto: Scarthgap 5.0 LTS
|
||||||
|
BSP: TQ scarthgap.TQ.ARM.BSP.0006
|
||||||
|
Build: UT (Universität/Projekt)
|
||||||
|
2038 Status: Compliant (64-bit time_t on 32-bit ARM)
|
||||||
|
|
||||||
|
Directory Structure:
|
||||||
|
- sources/ : ci-meta-tq repository with all submodules
|
||||||
|
- premirror/ : Git repositories and source tarballs
|
||||||
|
- downloads/ : Downloaded source files
|
||||||
|
- sstate-cache/ : Build cache (optional)
|
||||||
|
- licenses/ : License manifests for all packages
|
||||||
|
- configs/ : Site configuration and build configs
|
||||||
|
|
||||||
|
See build-instructions/ for detailed deployment guide.
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create detailed deployment guide
|
||||||
|
cp docs/04-deployment/corporate-network-deployment.md UT-mirror-package/build-instructions/
|
||||||
```
|
```
|
||||||
|
|
||||||
### 9.2 Create Archive
|
### 6.2 Create Compressed Archive
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ${MIRROR_BASE}
|
cd ${UT_BASE}
|
||||||
|
|
||||||
# Create timestamped archive
|
# Create timestamped archive
|
||||||
export TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
export TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||||
export ARCHIVE_NAME="tqma6-yocto-mirror-scarthgap-${TIMESTAMP}.tar.gz"
|
export ARCHIVE_NAME="UT-tqma6ul-yocto-scarthgap-${TIMESTAMP}.tar.gz"
|
||||||
|
|
||||||
tar czf ${ARCHIVE_NAME} \
|
tar czf ${ARCHIVE_NAME} \
|
||||||
--exclude='.git/objects/pack/*' \
|
--exclude='.git/objects/pack/*' \
|
||||||
mirror-package/
|
--exclude='*.tmp' \
|
||||||
|
--exclude='*.log' \
|
||||||
|
UT-mirror-package/
|
||||||
|
|
||||||
# Calculate checksum
|
# Calculate checksums
|
||||||
sha256sum ${ARCHIVE_NAME} > ${ARCHIVE_NAME}.sha256
|
sha256sum ${ARCHIVE_NAME} > ${ARCHIVE_NAME}.sha256
|
||||||
|
md5sum ${ARCHIVE_NAME} > ${ARCHIVE_NAME}.md5
|
||||||
|
|
||||||
echo "Archive created: ${ARCHIVE_NAME}"
|
echo "Archive created: ${ARCHIVE_NAME}"
|
||||||
echo "Size: $(du -h ${ARCHIVE_NAME} | cut -f1)"
|
echo "Size: $(du -h ${ARCHIVE_NAME} | cut -f1)"
|
||||||
|
echo "SHA256: $(cat ${ARCHIVE_NAME}.sha256 | cut -d' ' -f1)"
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 10: Generate License Table
|
## Step 7: Generate License Table
|
||||||
|
|
||||||
**See:** [License Table Generation Script](../03-license-analysis/generate-license-table.sh)
|
### 7.1 Create License CSV
|
||||||
|
|
||||||
The license table must include:
|
```bash
|
||||||
- Package name
|
cd ${UT_BASE}
|
||||||
- Version
|
|
||||||
- License (SPDX identifier)
|
# Generate from BitBake license manifest
|
||||||
- License file location
|
cat > generate-license-table.sh <<'SCRIPT'
|
||||||
- Source location
|
#!/bin/bash
|
||||||
- Military use approval (Yes/No/Conditional)
|
# Generate license table for software approval
|
||||||
|
|
||||||
|
OUTPUT="UT-license-table.csv"
|
||||||
|
echo "Package,Version,Recipe,License,MilitaryUse,SourceLocation,Notes" > $OUTPUT
|
||||||
|
|
||||||
|
# Process license manifest
|
||||||
|
find build_ut/tmp/deploy/licenses -name "*.csv" -o -name "*.manifest" | while read f; do
|
||||||
|
# Parse and format for approval
|
||||||
|
# This is a template - actual parsing depends on manifest format
|
||||||
|
echo "Processing: $f"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "License table generated: $OUTPUT"
|
||||||
|
SCRIPT
|
||||||
|
|
||||||
|
chmod +x generate-license-table.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.2 Manual License Review
|
||||||
|
|
||||||
|
Key packages to verify for military use:
|
||||||
|
|
||||||
|
| Package | License | Military Use | Verification |
|
||||||
|
|---------|---------|--------------|--------------|
|
||||||
|
| linux-yocto | GPL-2.0-only | ✅ Yes | Kernel source included |
|
||||||
|
| u-boot-tq | GPL-2.0+ | ✅ Yes | Source included |
|
||||||
|
| glibc | LGPL-2.1+ | ✅ Yes | Source included |
|
||||||
|
| busybox | GPL-2.0-only | ✅ Yes | Source included |
|
||||||
|
| imx-firmware | Proprietary | ⚠️ Check | Review NXP license |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -330,46 +374,39 @@ The license table must include:
|
|||||||
|
|
||||||
Before delivering mirror:
|
Before delivering mirror:
|
||||||
|
|
||||||
- [ ] All git repositories cloned (poky, meta-openembedded, meta-tq)
|
- [ ] ci-meta-tq cloned with all submodules
|
||||||
- [ ] Complete source downloads in `downloads/` directory
|
- [ ] MACHINE=tqma6ulx-mba6ulx configured
|
||||||
- [ ] Build successful: `core-image-minimal` completed
|
- [ ] Build "UT" completed successfully
|
||||||
- [ ] License information generated in `licenses/`
|
- [ ] /srv/yocto/downloads/ populated
|
||||||
|
- [ ] /srv/yocto/premirror/ populated by ci/fill_mirror
|
||||||
|
- [ ] License manifests generated
|
||||||
- [ ] Archive created with timestamp
|
- [ ] Archive created with timestamp
|
||||||
- [ ] SHA256 checksum calculated
|
- [ ] SHA256 checksum calculated
|
||||||
- [ ] License compliance table generated
|
- [ ] License table (CSV) generated
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Troubleshooting
|
## Deliverables for Software Approval
|
||||||
|
|
||||||
### Problem: Fetch failures during build
|
1. **UT-mirror-package.tar.gz** - Complete source mirror
|
||||||
|
2. **UT-license-table.csv** - License compliance table
|
||||||
**Solution:** Check internet connectivity, proxy settings. Some corporate networks block git:// protocol:
|
3. **SHA256 checksums** - Integrity verification
|
||||||
```bash
|
4. **Build instructions** - Corporate deployment guide
|
||||||
git config --global url."https://".insteadOf git://
|
5. **2038-compliance-doc** - Analysis document
|
||||||
```
|
|
||||||
|
|
||||||
### Problem: Disk space exhausted
|
|
||||||
|
|
||||||
**Solution:** Ensure at least 100GB free. Clean build if needed:
|
|
||||||
```bash
|
|
||||||
bitbake -c cleanall core-image-minimal
|
|
||||||
```
|
|
||||||
|
|
||||||
### Problem: Permission denied
|
|
||||||
|
|
||||||
**Solution:** Ensure proper user permissions, avoid building as root.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
|
|
||||||
1. **Transfer archive** to corporate network (USB, secure transfer)
|
1. **Transfer archive** to corporate network (secure USB transfer)
|
||||||
2. **Submit for software approval** with license table
|
2. **Submit for software approval** with license table
|
||||||
3. **Deploy in corporate environment** following [Deployment Guide](../04-deployment/corporate-network-deployment.md)
|
3. **Deploy in air-gapped environment** per deployment guide
|
||||||
|
4. **Build verification** - confirm offline build succeeds
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Document Version:** 1.0
|
**Document Version:** 2.0
|
||||||
**Author:** Siggi ⚙️
|
**Author:** Siggi ⚙️
|
||||||
|
**Build Name:** UT
|
||||||
|
**Target:** TQMa6UL
|
||||||
**Last Updated:** 2026-03-01
|
**Last Updated:** 2026-03-01
|
||||||
|
|||||||
19
docs/03-license-analysis/UT-license-table-excel.md
Normal file
19
docs/03-license-analysis/UT-license-table-excel.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
Package|Version|Recipe|License|MilitaryUse|SourceLocation|Notes
|
||||||
|
---|---|---|---|---|---|---
|
||||||
|
linux-yocto|6.6.y|linux-yocto_6.6|GPL-2.0-only|Yes|sources/poky/meta/recipes-kernel/linux/|Kernel with 2038 support
|
||||||
|
u-boot-tq|2023.10|u-boot-tq_2023.10|GPL-2.0+|Yes|sources/meta-tq/recipes-bsp/u-boot/|Bootloader
|
||||||
|
glibc|2.38|glibc_2.38|LGPL-2.1+|Yes|sources/poky/meta/recipes-core/glibc/|C library with 64-bit time_t
|
||||||
|
busybox|1.36.1|busybox_1.36|GPL-2.0-only|Yes|sources/poky/meta/recipes-core/busybox/|Core utilities
|
||||||
|
systemd|254|systemd_254|LGPL-2.1+|Yes|sources/poky/meta/recipes-core/systemd/|Init system
|
||||||
|
e2fsprogs|1.47.0|e2fsprogs_1.47|GPL-2.0+|Yes|sources/poky/meta/recipes-devtools/e2fsprogs/|Filesystem tools
|
||||||
|
iptables|1.8.9|iptables_1.8|GPL-2.0+|Yes|sources/poky/meta/recipes-extended/iptables/|Firewall
|
||||||
|
openssl|3.1.4|openssl_3.1|Apache-2.0|Yes|sources/poky/meta/recipes-connectivity/openssl/|Crypto library
|
||||||
|
dropbear|2022.83|dropbear_2022.83|MIT|Yes|sources/poky/meta/recipes-core/dropbear/|SSH server
|
||||||
|
util-linux|2.39|util-linux_2.39|GPL-2.0+|Yes|sources/poky/meta/recipes-core/util-linux/|System utilities
|
||||||
|
gcc|13.2|gcc_13.2|GPL-3.0+|Review|sources/poky/meta/recipes-devtools/gcc/|Compiler suite
|
||||||
|
binutils|2.40|binutils_2.40|GPL-3.0+|Review|sources/poky/meta/recipes-devtools/binutils/|Linker/assembler
|
||||||
|
coreutils|9.3|coreutils_9.3|GPL-3.0+|Review|sources/poky/meta/recipes-core/coreutils/|Core GNU utils
|
||||||
|
bash|5.2|bash_5.2|GPL-3.0+|Review|sources/poky/meta/recipes-extended/bash/|Shell
|
||||||
|
imx-firmware|N/A|firmware-imx|NXP-SLA|Review|sources/meta-tq/recipes-bsp/firmware/|NXP firmware blobs
|
||||||
|
imx-gpu-viv|6.4.11|imx-gpu-viv|Proprietary|Review|sources/meta-tq/recipes-graphics/|Vivante GPU driver
|
||||||
|
linux-firmware|N/A|linux-firmware|Various|Review|sources/poky/meta/recipes-kernel/linux-firmware/|Various vendor blobs
|
||||||
18
docs/03-license-analysis/UT-license-table.csv
Normal file
18
docs/03-license-analysis/UT-license-table.csv
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
Package,Version,Recipe,License,LicenseFile,MilitaryUse,SourceLocation,Notes
|
||||||
|
linux-yocto,6.6.y,linux-yocto_6.6,GPL-2.0-only,COPYING,Yes,sources/poky/meta/recipes-kernel/linux/,Kernel with 2038 support
|
||||||
|
u-boot-tq,2023.10,u-boot-tq_2023.10,GPL-2.0+,Licenses/README,Yes,sources/meta-tq/recipes-bsp/u-boot/,Bootloader
|
||||||
|
glibc,2.38,glibc_2.38,LGPL-2.1+,LICENSES,Yes,sources/poky/meta/recipes-core/glibc/,C library with 64-bit time_t
|
||||||
|
busybox,1.36.1,busybox_1.36,GPL-2.0-only,LICENSE,Yes,sources/poky/meta/recipes-core/busybox/,Core utilities
|
||||||
|
systemd,254,systemd_254,LGPL-2.1+,LICENSE.LGPL2.1,Yes,sources/poky/meta/recipes-core/systemd/,Init system
|
||||||
|
e2fsprogs,1.47.0,e2fsprogs_1.47,GPL-2.0+,NOTICE,Yes,sources/poky/meta/recipes-devtools/e2fsprogs/,Filesystem tools
|
||||||
|
iptables,1.8.9,iptables_1.8,GPL-2.0+,COPYING,Yes,sources/poky/meta/recipes-extended/iptables/,Firewall
|
||||||
|
openssl,3.1.4,openssl_3.1,Apache-2.0,LICENSE,Yes,sources/poky/meta/recipes-connectivity/openssl/,Crypto library
|
||||||
|
dropbear,2022.83,dropbear_2022.83,MIT,LICENSE,Yes,sources/poky/meta/recipes-core/dropbear/,SSH server
|
||||||
|
util-linux,2.39,util-linux_2.39,GPL-2.0+,COPYING,Yes,sources/poky/meta/recipes-core/util-linux/,System utilities
|
||||||
|
gcc,13.2,gcc_13.2,GPL-3.0+,COPYING3,Review,sources/poky/meta/recipes-devtools/gcc/,Compiler suite
|
||||||
|
binutils,2.40,binutils_2.40,GPL-3.0+,COPYING3,Review,sources/poky/meta/recipes-devtools/binutils/,Linker/assembler
|
||||||
|
coreutils,9.3,coreutils_9.3,GPL-3.0+,COPYING,Review,sources/poky/meta/recipes-core/coreutils/,Core GNU utils
|
||||||
|
bash,5.2,bash_5.2,GPL-3.0+,COPYING,Review,sources/poky/meta/recipes-extended/bash/,Shell
|
||||||
|
imx-firmware,N/A,firmware-imx,NXP-SLA,SLA,Review,sources/meta-tq/recipes-bsp/firmware/,NXP firmware blobs
|
||||||
|
imx-gpu-viv,6.4.11,imx-gpu-viv,Proprietary,EULA,Review,sources/meta-tq/recipes-graphics/,Vivante GPU driver
|
||||||
|
linux-firmware,N/A,linux-firmware,Various,LICENCE,Review,sources/poky/meta/recipes-kernel/linux-firmware/,Various vendor blobs
|
||||||
|
154
docs/03-license-analysis/license-summary.md
Normal file
154
docs/03-license-analysis/license-summary.md
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
# License Compliance Table - UT Project
|
||||||
|
|
||||||
|
**Project:** UT (Universität/Projekt)
|
||||||
|
**Target:** TQMa6UL Yocto BSP
|
||||||
|
**Date:** 2026-03-01
|
||||||
|
**Scope:** Complete license analysis for military use approval
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Military Use Guidelines
|
||||||
|
|
||||||
|
- ✅ **Approved**: Open source licenses without military restrictions
|
||||||
|
- ⚠️ **Review Required**: Check specific license terms
|
||||||
|
- ❌ **Excluded**: Explicit military use prohibition
|
||||||
|
|
||||||
|
**Note:** GPL licenses are approved WITH source code provision requirement.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## License Summary by Category
|
||||||
|
|
||||||
|
### Approved for Military Use (✅)
|
||||||
|
|
||||||
|
| License | Type | Notes |
|
||||||
|
|---------|------|-------|
|
||||||
|
| MIT | Permissive | No restrictions |
|
||||||
|
| BSD-2-Clause | Permissive | No restrictions |
|
||||||
|
| BSD-3-Clause | Permissive | No restrictions |
|
||||||
|
| Apache-2.0 | Permissive | Patent grant included |
|
||||||
|
| ISC | Permissive | No restrictions |
|
||||||
|
| GPL-2.0-only | Copyleft | Source must be provided |
|
||||||
|
| GPL-2.0-or-later | Copyleft | Source must be provided |
|
||||||
|
| LGPL-2.1-only | Weak Copyleft | Library source must be provided |
|
||||||
|
| LGPL-2.1-or-later | Weak Copyleft | Library source must be provided |
|
||||||
|
|
||||||
|
### Requires Review (⚠️)
|
||||||
|
|
||||||
|
| License | Reason | Action |
|
||||||
|
|---------|--------|--------|
|
||||||
|
| GPL-3.0 | Anti-tivoization clause | Legal review |
|
||||||
|
| Proprietary | Closed source | Review vendor terms |
|
||||||
|
| Binary Firmware | No source available | Check distribution rights |
|
||||||
|
|
||||||
|
### Build System (Not in Final Product)
|
||||||
|
|
||||||
|
| Component | License | Notes |
|
||||||
|
|-----------|---------|-------|
|
||||||
|
| Poky/Yocto | MIT | Build system only |
|
||||||
|
| BitBake | GPL-2.0 | Build tool only |
|
||||||
|
| OpenEmbedded | MIT | Metadata only |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Packages for TQMa6UL
|
||||||
|
|
||||||
|
### Core System (GPL/LGPL)
|
||||||
|
|
||||||
|
| Package | Version | License | Military | Source Included |
|
||||||
|
|---------|---------|---------|----------|-----------------|
|
||||||
|
| linux-yocto | 6.6.y | GPL-2.0-only | ✅ Yes | ✅ Yes |
|
||||||
|
| u-boot-tq | 2023.10 | GPL-2.0+ | ✅ Yes | ✅ Yes |
|
||||||
|
| glibc | 2.38+ | LGPL-2.1+ | ✅ Yes | ✅ Yes |
|
||||||
|
| busybox | 1.36.x | GPL-2.0-only | ✅ Yes | ✅ Yes |
|
||||||
|
| gcc | 13.x | GPL-3.0+ | ⚠️ Review* | ✅ Yes |
|
||||||
|
|
||||||
|
*GPL-3.0 requires review of anti-tivoization clause for embedded devices
|
||||||
|
|
||||||
|
### Hardware Support
|
||||||
|
|
||||||
|
| Package | License | Military | Notes |
|
||||||
|
|---------|---------|----------|-------|
|
||||||
|
| firmware-imx | Proprietary | ⚠️ Review | NXP firmware blobs |
|
||||||
|
| linux-firmware | Mixed | ⚠️ Review | Various vendors |
|
||||||
|
| imx-gpu-viv | Proprietary | ⚠️ Review | Vivante GPU driver |
|
||||||
|
|
||||||
|
### Base System
|
||||||
|
|
||||||
|
| Package | License | Military |
|
||||||
|
|---------|---------|----------|
|
||||||
|
| systemd | LGPL-2.1+ | ✅ Yes |
|
||||||
|
| util-linux | GPL-2.0+ | ✅ Yes |
|
||||||
|
| e2fsprogs | GPL-2.0+ | ✅ Yes |
|
||||||
|
| coreutils | GPL-3.0+ | ⚠️ Review |
|
||||||
|
| bash | GPL-3.0+ | ⚠️ Review |
|
||||||
|
|
||||||
|
### Network
|
||||||
|
|
||||||
|
| Package | License | Military |
|
||||||
|
|---------|---------|----------|
|
||||||
|
| iptables | GPL-2.0+ | ✅ Yes |
|
||||||
|
| iproute2 | GPL-2.0+ | ✅ Yes |
|
||||||
|
| openssl | OpenSSL | ✅ Yes |
|
||||||
|
| openssh | OpenSSH/ISC | ✅ Yes |
|
||||||
|
| dropbear | MIT | ✅ Yes |
|
||||||
|
|
||||||
|
### Filesystems
|
||||||
|
|
||||||
|
| Package | License | Military |
|
||||||
|
|---------|---------|----------|
|
||||||
|
| mtd-utils | GPL-2.0+ | ✅ Yes |
|
||||||
|
| dosfstools | GPL-3.0+ | ⚠️ Review |
|
||||||
|
| e2fsprogs | GPL-2.0+ | ✅ Yes |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Proprietary Components Requiring Review
|
||||||
|
|
||||||
|
### NXP/Freescale Components
|
||||||
|
|
||||||
|
| Component | License Type | Military Use | Source Available |
|
||||||
|
|-----------|--------------|--------------|------------------|
|
||||||
|
| imx-firmware | NXP SLA | ⚠️ Review required | ❌ No |
|
||||||
|
| imx-gpu-viv | Proprietary | ⚠️ Review required | ❌ No |
|
||||||
|
| imx-vpu | Proprietary | ⚠️ Review required | ❌ No |
|
||||||
|
| ddr-stress-test | NXP | ⚠️ Review required | ❌ No |
|
||||||
|
|
||||||
|
### Alternative Open-Source Options
|
||||||
|
|
||||||
|
Where proprietary components pose issues:
|
||||||
|
|
||||||
|
| Proprietary | Open Alternative | License |
|
||||||
|
|-------------|------------------|---------|
|
||||||
|
| imx-gpu-viv (Vivante) | etnaviv | MIT/GPL |
|
||||||
|
| NXP VPU codec | Software decode | Various |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## License Manifest Location
|
||||||
|
|
||||||
|
After build, license information is located at:
|
||||||
|
|
||||||
|
```
|
||||||
|
build_ut/tmp/deploy/licenses/
|
||||||
|
├── package/ # Per-package license files
|
||||||
|
├── image_license.manifest # Image-level manifest
|
||||||
|
├── host-tools_license.manifest # Host tool licenses
|
||||||
|
└── target-tools_license.manifest # Target tool licenses
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Compliance Checklist
|
||||||
|
|
||||||
|
- [ ] All GPL packages have source code archived
|
||||||
|
- [ ] Proprietary components reviewed for military clauses
|
||||||
|
- [ ] License manifest generated for every build
|
||||||
|
- [ ] No "UNKNOWN" license entries in manifest
|
||||||
|
- [ ] Commercial licenses documented separately
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Generated by:** Siggi ⚙️
|
||||||
|
**Project:** UT
|
||||||
|
**Date:** 2026-03-01
|
||||||
@@ -1,34 +1,34 @@
|
|||||||
# Corporate Network Deployment Guide
|
# Corporate Network Deployment Guide (Air-Gap)
|
||||||
|
|
||||||
**Document ID:** DEPLOY-CORP-001
|
**Document ID:** DEPLOY-CORP-001-REV2
|
||||||
**Date:** 2026-03-01
|
**Date:** 2026-03-01
|
||||||
**Environment:** Corporate network (potentially air-gapped)
|
**Build Name:** UT (Universität/Projekt)
|
||||||
**Prerequisites:** Approved software mirror archive
|
**Target:** TQMa6UL on MBa6x
|
||||||
|
**Environment:** Air-gapped corporate network
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
This guide describes the deployment of the Yocto mirror and build environment within a corporate network after software approval has been obtained.
|
This guide describes deployment of the UT Yocto mirror in an air-gapped corporate network. The corporate system has no internet access and requires complete offline build capability.
|
||||||
|
|
||||||
**Assumptions:**
|
**Prerequisites:**
|
||||||
- Software approval has been granted
|
- Software approval documentation received
|
||||||
- Mirror archive has been transferred securely to corporate network
|
- UT-mirror-package.tar.gz transferred securely
|
||||||
- Target system: Ubuntu 22.04 LTS (or approved corporate Linux)
|
- Checksum verified
|
||||||
- Internet access: May be restricted or unavailable
|
- Ubuntu 22.04 system ready (can use local Ubuntu mirror for apt)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Pre-Deployment Checklist
|
## Pre-Deployment Checklist
|
||||||
|
|
||||||
Before starting deployment:
|
- [ ] Software approval granted
|
||||||
|
- [ ] Mirror archive transferred to corporate network
|
||||||
- [ ] Software approval documentation received
|
- [ ] SHA256 checksum verified: `sha256sum -c *.sha256`
|
||||||
- [ ] Mirror archive transferred (USB/secure file transfer)
|
- [ ] Sufficient disk space (200GB+)
|
||||||
- [ ] Checksum verified: `sha256sum -c archive.tar.gz.sha256`
|
- [ ] Ubuntu 22.04 installed (can use local apt mirror)
|
||||||
- [ ] Sufficient disk space available (200GB+)
|
|
||||||
- [ ] Corporate Ubuntu 22.04 system ready
|
|
||||||
- [ ] User has sudo privileges
|
- [ ] User has sudo privileges
|
||||||
|
- [ ] Target directory `/opt/UT-yocto` approved by IT
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -36,43 +36,35 @@ Before starting deployment:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create base directory
|
# Create base directory
|
||||||
export CORP_BASE=/opt/tqma6-yocto
|
export UT_BASE=/opt/UT-yocto
|
||||||
sudo mkdir -p ${CORP_BASE}
|
sudo mkdir -p ${UT_BASE}
|
||||||
sudo chown $(whoami):$(whoami) ${CORP_BASE}
|
sudo chown $(whoami):$(whoami) ${UT_BASE}
|
||||||
|
|
||||||
# Extract mirror archive
|
# Extract mirror archive
|
||||||
cd ${CORP_BASE}
|
cd ${UT_BASE}
|
||||||
tar xzf /path/to/transfer/tqma6-yocto-mirror-scarthgap-*.tar.gz
|
tar xzf /path/to/transfer/UT-tqma6ul-yocto-scarthgap-*.tar.gz
|
||||||
|
|
||||||
# Verify structure
|
# Verify structure
|
||||||
ls -la mirror-package/
|
ls -la UT-mirror-package/
|
||||||
# Should show: sources/, licenses/, downloads/, build-instructions/
|
# Should show: sources/, premirror/, downloads/, licenses/, configs/
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 2: Install Build Dependencies
|
## Step 2: Install Build Dependencies
|
||||||
|
|
||||||
### 2.1 From Corporate Repository
|
From corporate Ubuntu mirror (or pre-approved packages):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Update package lists
|
|
||||||
sudo apt update
|
sudo apt update
|
||||||
|
|
||||||
# Install required packages (from approved corporate repos)
|
|
||||||
sudo apt install -y \
|
sudo apt install -y \
|
||||||
gawk wget git diffstat unzip texinfo gcc build-essential \
|
git python3 jq bash grep gawk wget diffstat \
|
||||||
chrpath socat cpio python3 python3-pip python3-pexpect \
|
chrpath cpio texinfo gcc g++ make file tar \
|
||||||
xz-utils debianutils iputils-ping python3-git \
|
bzip2 gzip xz-utils zstd lz4 patch perl \
|
||||||
python3-jinja2 libegl1-mesa libsdl1.2-dev xterm \
|
python3-pexpect socat unzip rsync bc \
|
||||||
locales lz4 zstd rpcsvc-proto
|
libsdl1.2-dev xterm
|
||||||
```
|
|
||||||
|
|
||||||
**Note:** If packages are not available, request them from IT department.
|
# Locale setup
|
||||||
|
|
||||||
### 2.2 Locale Configuration
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo locale-gen en_US.UTF-8
|
sudo locale-gen en_US.UTF-8
|
||||||
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
|
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
|
||||||
export LC_ALL=en_US.UTF-8
|
export LC_ALL=en_US.UTF-8
|
||||||
@@ -81,116 +73,121 @@ export LANG=en_US.UTF-8
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 3: Setup Yocto Build Environment
|
## Step 3: Setup Mirror Directories
|
||||||
|
|
||||||
### 3.1 Create Directory Structure
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ${CORP_BASE}
|
# Create system mirror directories
|
||||||
|
sudo mkdir -p /srv/yocto/{premirror,downloads,sstate-cache}
|
||||||
|
sudo chown -R $(whoami):$(whoami) /srv/yocto
|
||||||
|
|
||||||
# Create working directories
|
# Copy mirror contents
|
||||||
mkdir -p build
|
cd ${UT_BASE}/UT-mirror-package
|
||||||
mkdir -p mirror
|
|
||||||
|
|
||||||
# Copy sources
|
# Copy premirror (git repos and tarballs)
|
||||||
cp -r mirror-package/sources/* ./
|
cp -r premirror/* /srv/yocto/premirror/
|
||||||
|
|
||||||
# Setup downloads directory (offline)
|
# Copy downloads
|
||||||
mkdir -p downloads
|
cp -r downloads/* /srv/yocto/downloads/
|
||||||
cp -r mirror-package/downloads/* downloads/ 2>/dev/null || true
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.2 Initialize Build
|
# SState cache (optional, speeds up rebuilds)
|
||||||
|
cp -r sstate-cache/* /srv/yocto/sstate-cache/ 2>/dev/null || true
|
||||||
```bash
|
|
||||||
# Source the build environment
|
|
||||||
cd ${CORP_BASE}/poky-scarthgap
|
|
||||||
source oe-init-build-env ${CORP_BASE}/build
|
|
||||||
|
|
||||||
# You are now in ${CORP_BASE}/build
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.3 Configure for Offline Build
|
|
||||||
|
|
||||||
Edit `${CORP_BASE}/build/conf/local.conf`:
|
|
||||||
|
|
||||||
```conf
|
|
||||||
# Machine selection
|
|
||||||
MACHINE ??= "tqma6ulx-mba6ulx"
|
|
||||||
|
|
||||||
# Offline/Premirror configuration
|
|
||||||
BB_NO_NETWORK = "1"
|
|
||||||
|
|
||||||
# Use local mirror for all sources
|
|
||||||
PREMIRRORS:prepend = " \
|
|
||||||
git://.*/.* file://${CORP_BASE}/downloads/ \
|
|
||||||
ftp://.*/.* file://${CORP_BASE}/downloads/ \
|
|
||||||
http://.*/.* file://${CORP_BASE}/downloads/ \
|
|
||||||
https://.*/.* file://${CORP_BASE}/downloads/ \
|
|
||||||
"
|
|
||||||
|
|
||||||
# Don't check for updates
|
|
||||||
BB_FETCH_PREMIRRORONLY = "1"
|
|
||||||
|
|
||||||
# Parallelism
|
|
||||||
BB_NUMBER_THREADS ?= "8"
|
|
||||||
PARALLEL_MAKE ?= "-j8"
|
|
||||||
|
|
||||||
# DL directory
|
|
||||||
DL_DIR = "${CORP_BASE}/downloads"
|
|
||||||
|
|
||||||
# SSTATE (optional, for faster rebuilds)
|
|
||||||
SSTATE_DIR = "${CORP_BASE}/sstate-cache"
|
|
||||||
|
|
||||||
# Archive settings for compliance
|
|
||||||
INHERIT += "archiver"
|
|
||||||
ARCHIVER_MODE[src] = "original"
|
|
||||||
COPY_LIC_MANIFEST = "1"
|
|
||||||
COPY_LIC_DIRS = "1"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.4 Configure Layers
|
|
||||||
|
|
||||||
Edit `${CORP_BASE}/build/conf/bblayers.conf`:
|
|
||||||
|
|
||||||
```conf
|
|
||||||
BBLAYERS ?= " \
|
|
||||||
${CORP_BASE}/poky-scarthgap/meta \
|
|
||||||
${CORP_BASE}/poky-scarthgap/meta-poky \
|
|
||||||
${CORP_BASE}/poky-scarthgap/meta-yocto-bsp \
|
|
||||||
${CORP_BASE}/meta-openembedded/meta-oe \
|
|
||||||
${CORP_BASE}/meta-openembedded/meta-python \
|
|
||||||
${CORP_BASE}/meta-openembedded/meta-networking \
|
|
||||||
${CORP_BASE}/meta-openembedded/meta-filesystems \
|
|
||||||
${CORP_BASE}/meta-tq/meta-tq \
|
|
||||||
"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 4: Build Image
|
## Step 4: Configure Site Configuration
|
||||||
|
|
||||||
### 4.1 First Build (Offline)
|
Create `~/.yocto/site.conf` for air-gap:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ${CORP_BASE}/build
|
mkdir -p ~/.yocto
|
||||||
|
|
||||||
# Ensure we're in the build environment
|
cat > ~/.yocto/site.conf <<'EOF'
|
||||||
source ${CORP_BASE}/poky-scarthgap/oe-init-build-env ${CORP_BASE}/build
|
# UT Project - Air-Gap Configuration
|
||||||
|
# Build: UT
|
||||||
|
# Target: TQMa6UL
|
||||||
|
# Date: 2026-03-01
|
||||||
|
|
||||||
# Start build (all sources should be local)
|
# Mirror directories (local filesystem)
|
||||||
bitbake core-image-minimal
|
DL_DIR = "/srv/yocto/downloads"
|
||||||
|
SSTATE_DIR = "/srv/yocto/sstate-cache"
|
||||||
|
|
||||||
|
# Air-gap settings
|
||||||
|
BB_NO_NETWORK = "1"
|
||||||
|
BB_FETCH_PREMIRRORONLY = "1"
|
||||||
|
|
||||||
|
# Premirror configuration (local files only)
|
||||||
|
SOURCE_MIRROR_URL = "file:///srv/yocto/premirror/"
|
||||||
|
INHERIT += "own-mirrors"
|
||||||
|
|
||||||
|
PREMIRRORS:prepend = " \
|
||||||
|
git://.*/.* file:///srv/yocto/premirror/ \n \
|
||||||
|
ftp://.*/.* file:///srv/yocto/premirror/ \n \
|
||||||
|
http://.*/.* file:///srv/yocto/premirror/ \n \
|
||||||
|
https://.*/.* file:///srv/yocto/premirror/ \n \
|
||||||
|
"
|
||||||
|
|
||||||
|
# Parallelism (adjust to hardware)
|
||||||
|
BB_NUMBER_THREADS ?= "8"
|
||||||
|
PARALLEL_MAKE ?= "-j8"
|
||||||
|
|
||||||
|
# License compliance
|
||||||
|
COPY_LIC_MANIFEST = "1"
|
||||||
|
COPY_LIC_DIRS = "1"
|
||||||
|
INHERIT += "archiver"
|
||||||
|
ARCHIVER_MODE[src] = "original"
|
||||||
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
**Expected:** Build completes without network access.
|
---
|
||||||
|
|
||||||
### 4.2 Verify 2038 Compliance
|
## Step 5: Initialize Build Environment
|
||||||
|
|
||||||
After successful build:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check time_t size in generated toolchain
|
cd ${UT_BASE}/UT-mirror-package/sources/ci-meta-tq
|
||||||
${CORP_BASE}/build/tmp/sysroots/x86_64-linux/usr/bin/arm-poky-linux-gnueabi-gcc -dM -E - < /dev/null | grep TIME_BITS
|
|
||||||
|
# Verify submodules are present
|
||||||
|
ls -la sources/
|
||||||
|
|
||||||
|
# Set machine for TQMa6UL
|
||||||
|
export MACHINE=tqma6ulx-mba6ulx
|
||||||
|
|
||||||
|
# Initialize build (creates build_ut)
|
||||||
|
. ./setup-environment build_ut imx
|
||||||
|
|
||||||
|
# Verify configuration
|
||||||
|
bitbake -e | grep "^MACHINE="
|
||||||
|
# Should show: MACHINE="tqma6ulx-mba6ulx"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 6: Verify Air-Gap Build
|
||||||
|
|
||||||
|
### 6.1 Test Offline Build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ensure we're in build environment
|
||||||
|
cd ${UT_BASE}/UT-mirror-package/sources/ci-meta-tq
|
||||||
|
export MACHINE=tqma6ulx-mba6ulx
|
||||||
|
. ./setup-environment build_ut imx
|
||||||
|
|
||||||
|
# Verify no network access is attempted
|
||||||
|
export BB_NO_NETWORK=1
|
||||||
|
|
||||||
|
# Start build (should complete without network)
|
||||||
|
bitbake tq-image-small-debug
|
||||||
|
```
|
||||||
|
|
||||||
|
**Expected:** Build completes using only local premirror sources.
|
||||||
|
|
||||||
|
### 6.2 Verify 2038 Compliance
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check time_t size
|
||||||
|
echo '#include <time.h>' | \
|
||||||
|
${WORKDIR}/recipe-sysroot-native/usr/bin/arm-poky-linux-gnueabi-gcc -x c - -dM -E | \
|
||||||
|
grep TIME_BITS
|
||||||
# Expected: #define __TIME_BITS 64
|
# Expected: #define __TIME_BITS 64
|
||||||
|
|
||||||
# Check kernel config
|
# Check kernel config
|
||||||
@@ -200,100 +197,73 @@ bitbake -e virtual/kernel | grep CONFIG_COMPAT_32BIT_TIME
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 5: Development Workflow
|
## Step 7: Development Workflow
|
||||||
|
|
||||||
### 5.1 Daily Use
|
### Daily Build Commands
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Enter build environment
|
# Enter build environment
|
||||||
cd ${CORP_BASE}
|
cd ${UT_BASE}/UT-mirror-package/sources/ci-meta-tq
|
||||||
source poky-scarthgap/oe-init-build-env build
|
export MACHINE=tqma6ulx-mba6ulx
|
||||||
|
. ./setup-environment build_ut imx
|
||||||
|
|
||||||
# Build target
|
# Build target image
|
||||||
bitbake core-image-minimal
|
bitbake tq-image-small-debug
|
||||||
|
|
||||||
# Deploy to target (SD card / eMMC)
|
# Deploy to target (SD card)
|
||||||
# See TQ documentation for deployment methods
|
# See TQ documentation for deployment methods
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5.2 Adding Custom Layers
|
### SDK Generation (for Application Development)
|
||||||
|
|
||||||
If custom corporate layers are required:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Add to bblayers.conf
|
# Generate SDK for application developers
|
||||||
vim ${CORP_BASE}/build/conf/bblayers.conf
|
bitbake tq-image-small-debug -c populate_sdk
|
||||||
|
|
||||||
# Add path to custom layer
|
|
||||||
# ${CORP_BASE}/meta-custom \
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5.3 SDK Generation
|
|
||||||
|
|
||||||
For application development:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Generate SDK
|
|
||||||
bitbake core-image-minimal -c populate_sdk
|
|
||||||
|
|
||||||
# Install SDK
|
# Install SDK
|
||||||
${CORP_BASE}/build/tmp/deploy/sdk/*.sh
|
${UT_BASE}/UT-mirror-package/sources/ci-meta-tq/build_ut/tmp/deploy/sdk/*.sh
|
||||||
|
|
||||||
# Source SDK environment
|
# Source SDK in new terminal
|
||||||
source /opt/poky/.../environment-setup-arm-poky-linux-gnueabi
|
source /opt/poky/.../environment-setup-arm-poky-linux-gnueabi
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Maintenance
|
## Build Verification Checklist
|
||||||
|
|
||||||
### Updating the Mirror
|
- [ ] Air-gap build completes without network errors
|
||||||
|
- [ ] Image boots on TQMa6UL hardware
|
||||||
When new TQ BSP versions are approved:
|
- [ ] 2038 compliance verified (64-bit time_t)
|
||||||
|
- [ ] License manifest generated
|
||||||
1. Request updated mirror from external system
|
- [ ] All proprietary components reviewed
|
||||||
2. Verify checksums
|
- [ ] SDK functional for application development
|
||||||
3. Extract to separate directory
|
|
||||||
4. Compare with current deployment
|
|
||||||
5. Test build in isolation
|
|
||||||
6. Switch over after validation
|
|
||||||
|
|
||||||
### Build Cache Management
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Clean build (keep downloads)
|
|
||||||
bitbake -c cleanall core-image-minimal
|
|
||||||
|
|
||||||
# Full clean (careful!)
|
|
||||||
rm -rf ${CORP_BASE}/build/tmp/
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
### Issue: Network timeout errors
|
### Issue: "Failed to fetch" errors
|
||||||
|
|
||||||
**Cause:** BitBake trying to fetch from internet
|
**Cause:** BitBake trying to access network
|
||||||
|
|
||||||
**Solution:**
|
**Solution:**
|
||||||
```bash
|
```bash
|
||||||
# Verify BB_NO_NETWORK is set
|
# Verify settings
|
||||||
grep BB_NO_NETWORK ${CORP_BASE}/build/conf/local.conf
|
grep BB_NO_NETWORK ~/.yocto/site.conf
|
||||||
|
grep SOURCE_MIRROR_URL ~/.yocto/site.conf
|
||||||
|
|
||||||
# Should show: BB_NO_NETWORK = "1"
|
# Should show:
|
||||||
|
# BB_NO_NETWORK = "1"
|
||||||
|
# SOURCE_MIRROR_URL = "file:///srv/yocto/premirror/"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Issue: Missing source files
|
### Issue: Missing files in premirror
|
||||||
|
|
||||||
**Cause:** Incomplete mirror transfer
|
**Cause:** Incomplete transfer
|
||||||
|
|
||||||
**Solution:**
|
**Solution:**
|
||||||
```bash
|
```bash
|
||||||
# Check downloads directory
|
# Re-verify checksum on source system
|
||||||
ls ${CORP_BASE}/downloads | wc -l
|
|
||||||
# Compare with external mirror
|
|
||||||
|
|
||||||
# Re-transfer missing files
|
# Re-transfer missing files
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -301,41 +271,29 @@ ls ${CORP_BASE}/downloads | wc -l
|
|||||||
|
|
||||||
**Solution:**
|
**Solution:**
|
||||||
```bash
|
```bash
|
||||||
# Fix ownership
|
sudo chown -R $(whoami):$(whoami) /opt/UT-yocto /srv/yocto
|
||||||
sudo chown -R $(whoami):$(whoami) ${CORP_BASE}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Security Considerations
|
## Security & Compliance
|
||||||
|
|
||||||
1. **No Internet Access:** Build must complete without network
|
1. **No Network Access:** Build verified to complete offline
|
||||||
2. **Audit Trail:** All sources archived and version-controlled
|
2. **Source Audit:** All sources archived and traceable
|
||||||
3. **License Compliance:** License manifest generated for every build
|
3. **License Compliance:** License manifest generated per build
|
||||||
4. **User Permissions:** Build as regular user, not root
|
4. **User Permissions:** Build as regular user, not root
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Validation Checklist
|
## Support & Documentation
|
||||||
|
|
||||||
- [ ] Mirror extracted and verified
|
- **TQ BSP Documentation:** Included in `sources/meta-tq/`
|
||||||
- [ ] Offline build successful
|
- **Yocto Manuals:** Included in `sources/poky/documentation/`
|
||||||
- [ ] 2038 compliance verified (64-bit time_t)
|
- **License Info:** `build_ut/tmp/deploy/licenses/`
|
||||||
- [ ] License manifest generated
|
|
||||||
- [ ] Image deploys to target hardware
|
|
||||||
- [ ] SDK functional for application development
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
For issues:
|
|
||||||
1. Check [TQ BSP Documentation](https://github.com/tq-systems/meta-tq)
|
|
||||||
2. Review Yocto Project manuals (included in mirror)
|
|
||||||
3. Consult internal engineering team
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
**Document Version:** 2.0
|
||||||
**Author:** Siggi ⚙️
|
**Author:** Siggi ⚙️
|
||||||
**Date:** 2026-03-01
|
**Build:** UT
|
||||||
**Classification:** Internal Use
|
**Last Updated:** 2026-03-01
|
||||||
|
|||||||
Reference in New Issue
Block a user