forked from lxcafe/lxcafe
Compare commits
9 Commits
375ad53a4d
...
v10
| Author | SHA1 | Date | |
|---|---|---|---|
| b1f7c675c6 | |||
| 63e26040fa | |||
| fb40815e6c | |||
| b9693a455a | |||
| 5bffe8f68f | |||
| c3828b8112 | |||
| 3c014a480c | |||
| 556ead922f | |||
| fb04ecd1ed |
+103
-132
@@ -1,169 +1,140 @@
|
|||||||
AGENTS
|
# AGENTS.md
|
||||||
|
|
||||||
I created this `AGENTS.md` to help agentic coding assistants work in this repository. It contains
|
Guidelines for agentic coding assistants working in this repository.
|
||||||
1) Build / lint / test commands (including how to run a single test) and
|
|
||||||
2) Code style guidelines and conventions to follow when editing code here.
|
|
||||||
|
|
||||||
Repository state
|
## Repository Overview
|
||||||
- This repository contains shell scripts for Linux Mint XFCE post-installation setup.
|
|
||||||
- Main scripts are located in `post_installation_script/` directory.
|
|
||||||
- Testing infrastructure is in `post_installation_script_test/` (Docker/Podman test containers).
|
|
||||||
- No build system, package.json, Makefile, or language-specific project files were detected.
|
|
||||||
- There are no Cursor rules or Copilot instruction files in the repo (checked paths below).
|
|
||||||
- `.cursor/rules/` : not found
|
|
||||||
- `.cursorrules` : not found
|
|
||||||
- `.github/copilot-instructions.md` : not found
|
|
||||||
|
|
||||||
If you add new code (Go, Python, Node, Rust, Java, etc.), follow the per-ecosystem quick commands below.
|
- **Type**: Shell script project for Linux Mint XFCE post-installation setup
|
||||||
|
- **Main scripts**: `post_installation_script/` - Linux Mint XFCE post-installation automation
|
||||||
|
- **Testing**: `post_installation_script_test/` - Docker/Podman container-based testing
|
||||||
|
- **No build system**: Pure shell scripts, no package.json/Makefile/Cargo.toml
|
||||||
|
|
||||||
1) Build / Lint / Test commands
|
---
|
||||||
|
|
||||||
- General notes
|
## 1) Build / Lint / Test Commands
|
||||||
- Run commands from the repository root unless a submodule or service has its own README.
|
|
||||||
- Prefer local, repo-scoped toolchains (venv, node_modules/.bin, go modules, cargo) to avoid global state.
|
|
||||||
|
|
||||||
- Shell scripts
|
### Shell Scripts
|
||||||
- Quick check: `shellcheck scripts/*.sh` (install `shellcheck` first).
|
|
||||||
- Run an individual script: `bash path/to/script.sh` or `./script.sh` (ensure executable bit set).
|
|
||||||
- Syntax check: `bash -n path/to/script.sh`
|
|
||||||
- Trace execution: `bash -x path/to/script.sh` (shows each command as it runs)
|
|
||||||
|
|
||||||
- Testing shell scripts
|
```bash
|
||||||
- See `post_installation_script_test/README.md` for detailed container-based testing instructions.
|
# Syntax check only (no execution)
|
||||||
- Quick start:
|
bash -n path/to/script.sh
|
||||||
- Build image: `./post_installation_script_test/01_create_image.sh`
|
|
||||||
- Start container: `./post_installation_script_test/02_start_container_with_image.sh`
|
|
||||||
|
|
||||||
- Python (if added)
|
# Trace execution (shows each command as it runs)
|
||||||
- Install: `python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt`
|
bash -x path/to/script.sh
|
||||||
- Lint: `ruff .` or `flake8 .`
|
|
||||||
- Format: `black .`
|
|
||||||
- Test all: `pytest -q`
|
|
||||||
- Run a single test: `pytest path/to/test_file.py::TestClass::test_method -q`
|
|
||||||
|
|
||||||
- Node / JavaScript / TypeScript (if added)
|
# Lint with shellcheck (install with: apt install shellcheck)
|
||||||
- Install: `npm ci` or `pnpm install` / `yarn install`
|
shellcheck post_installation_script/*.sh
|
||||||
- Lint: `npm run lint` (or `npx eslint .`)
|
|
||||||
- Format: `npx prettier --write .`
|
|
||||||
- Test all: `npm test` (or `npx vitest` / `npx jest`)
|
|
||||||
- Run a single test:
|
|
||||||
- Jest: `npx jest path/to/file.test.js -t "test name regex"`
|
|
||||||
- Vitest: `npx vitest run path/to/file.spec.ts -t "test name"`
|
|
||||||
|
|
||||||
- Go (if added)
|
# Run individual script
|
||||||
- Build: `go build ./...`
|
bash path/to/script.sh
|
||||||
- Lint: `golangci-lint run` (if configured)
|
./script.sh # requires executable bit: chmod +x script.sh
|
||||||
- Test all: `go test ./...`
|
```
|
||||||
- Run a single test: `go test ./pkg/name -run TestFunctionName`
|
|
||||||
|
|
||||||
- Rust (if added)
|
### Container-Based Testing
|
||||||
- Build: `cargo build`
|
|
||||||
- Lint: `cargo clippy`
|
|
||||||
- Test all: `cargo test`
|
|
||||||
- Run a single test: `cargo test test_name -- --exact`
|
|
||||||
|
|
||||||
- Java / Maven (if added)
|
```bash
|
||||||
- Build: `mvn -DskipTests package`
|
# Build test image (Ubuntu 22.04 with useful utilities)
|
||||||
- Lint/format: use `spotless`/`checkstyle` if configured
|
cd post_installation_script_test
|
||||||
- Test all: `mvn test`
|
bash 01_create_image.sh
|
||||||
- Run a single test: `mvn -Dtest=ClassName#methodName test`
|
|
||||||
|
|
||||||
- .NET (if added)
|
# Start interactive container (auto-removed on exit)
|
||||||
- Build: `dotnet build`
|
bash 02_start_container_with_image.sh
|
||||||
- Test all: `dotnet test`
|
|
||||||
- Run a single test: `dotnet test --filter FullyQualifiedName~Namespace.ClassName.MethodName`
|
|
||||||
|
|
||||||
- CI / Automation
|
# Inside container - source scripts mounted at /workspace:
|
||||||
- If you add GitHub Actions, keep workflows idempotent and cache dependencies carefully.
|
bash /workspace/<scriptName>.sh
|
||||||
- Avoid secrets in workflows; read sensitive values from repository/organization secrets.
|
```
|
||||||
|
|
||||||
2) Code style guidelines
|
### Single Test Commands (for future languages)
|
||||||
|
|
||||||
The guidance below is intentionally general and focuses on consistency, readability and safety so
|
```bash
|
||||||
agentic tools can make changes predictably across multiple languages.
|
# Python: pytest path/to/test.py::TestClass::test_method -q
|
||||||
|
# Node/Jest: npx jest path/to/file.test.js -t "test name regex"
|
||||||
|
# Node/Vitest: npx vitest run path/to/file.spec.ts -t "test name"
|
||||||
|
# Go: go test ./pkg/name -run TestFunctionName
|
||||||
|
# Rust: cargo test test_name -- --exact
|
||||||
|
# Java/Maven: mvn -Dtest=ClassName#methodName test
|
||||||
|
# .NET: dotnet test --filter FullyQualifiedName~Namespace.ClassName.MethodName
|
||||||
|
```
|
||||||
|
|
||||||
- Formatting
|
---
|
||||||
- Use an automated formatter for the language (Black for Python, Prettier for JS/TS, gofmt/gofmt -s for Go,
|
|
||||||
rustfmt for Rust). Commit formatted code only.
|
|
||||||
- Use an editorconfig file for basic whitespace/indentation rules when possible.
|
|
||||||
|
|
||||||
- Imports / dependencies
|
## 2) Code Style Guidelines
|
||||||
- Keep imports explicit and minimal: import only what you use.
|
|
||||||
- Group imports in a logical order (language default + third-party + local project). Leave a blank line between groups.
|
|
||||||
- Don’t commit unused dependencies; remove them from lock files / manifests and run the linter.
|
|
||||||
|
|
||||||
- Types / typing
|
### Shell Scripts (Primary Language)
|
||||||
- Prefer explicit types where the language supports them (TypeScript types, Python type hints, Go static types).
|
|
||||||
- Add types for public interfaces and complex logic; internal simple helper functions may rely on inference.
|
|
||||||
|
|
||||||
- Naming conventions
|
- **Shebang**: Use `#!/bin/bash` (not `/bin/sh`) for bash-specific features
|
||||||
- Use clear, descriptive names. Prefer `calculate_total`, `prepare_connection`, `user_id` style for snake_case languages.
|
- **Safety**: Use `set -euo pipefail` at script start
|
||||||
- For camelCase languages (JS/TS): `calculateTotal`, `prepareConnection`.
|
- **Quotes**: Always use double quotes for variable expansion: `"$VAR"`, never bare `$VAR`
|
||||||
- Types and classes: use PascalCase/UpperCamelCase: `UserService`, `HttpClient`.
|
- **Conditionals**: Use `[[ ]]` for tests, not `[ ]`
|
||||||
- Constants: use UPPER_SNAKE_CASE or language-specific constant conventions.
|
- **Variables**: Use `readonly` for constants, `local` for function-scoped variables
|
||||||
|
- **Performance**: Prefer functions over subshells when possible
|
||||||
|
- **Naming**: Use descriptive function names: `install_fonts()`, `configure_panel()`, `prompt_user()`
|
||||||
|
- **Errors**: Write to stderr: `echo "Error: $msg" >&2`
|
||||||
|
- **Exit codes**: 0=success, 1=general error, 2=invalid usage
|
||||||
|
- **Comments**: Avoid unless explaining non-obvious behavior
|
||||||
|
- **Constants**: Define at top of script, UPPER_SNAKE_CASE
|
||||||
|
|
||||||
- Functions and modules
|
### General Conventions
|
||||||
- Keep functions small (ideally < 40 lines) and single-responsibility.
|
|
||||||
- Prefer pure functions where possible; keep side effects explicit and isolated.
|
|
||||||
- Organize modules by feature/domain, not solely by type (avoid monolithic god-modules).
|
|
||||||
|
|
||||||
- Error handling
|
- **Formatting**: Use automated formatters (Black/Prettier/gofmt/rustfmt) - commit formatted code
|
||||||
- Fail fast and return/raise errors with context (message + cause) rather than swallowing them.
|
- **Types**: Prefer explicit typing (TypeScript types, Python type hints, Go static types)
|
||||||
- Avoid logging raw errors in library code; return errors to callers and let the application layer decide logging.
|
- **Naming**:
|
||||||
- Use typed error types when the language supports it (Go error types, custom exceptions in Python/JS).
|
- snake_case: variables, functions (`user_id`, `calculate_total`)
|
||||||
- Clean up resources with `finally`/`defer` equivalents to avoid leaks.
|
- PascalCase: types/classes (`UserService`, `HttpClient`)
|
||||||
|
- UPPER_SNAKE_CASE: constants (`MAX_RETRIES`, `API_BASE_URL`)
|
||||||
|
- **Imports**: Keep minimal, group logically (stdlib → third-party → local), blank line between groups
|
||||||
|
- **Functions**: Keep small (<40 lines), single responsibility, pure where possible
|
||||||
|
- **Error handling**: Fail fast with context, avoid silent failures, use typed errors where supported
|
||||||
|
- **Tests**: Deterministic, mock external I/O, explicit names like `test_should_return_400_when_missing_field`
|
||||||
|
- **Resources**: Always clean up with `finally`/`defer` equivalents
|
||||||
|
|
||||||
- Tests
|
---
|
||||||
- Prefer small, deterministic unit tests. Mock external IO and network where reasonable.
|
|
||||||
- Use explicit fixtures and avoid implicit global state between tests.
|
|
||||||
- Name tests with the behavior they assert: `test_calculate_total_with_discounts` or `shouldReturn400WhenMissingField`.
|
|
||||||
|
|
||||||
- Logging and observability
|
## 3) Security
|
||||||
- Use structured logging where available (JSON structured logs for services).
|
|
||||||
- Avoid printing raw stack traces to stdout in production code; include them at debug level.
|
|
||||||
|
|
||||||
- Security and secrets
|
- Never commit secrets, API keys, credentials, or tokens
|
||||||
- Never commit secrets, API keys, or credentials. Use environment variables and vaults.
|
- Use environment variables for sensitive values
|
||||||
- Validate and sanitize external input at the boundaries of the system.
|
- Validate and sanitize all external input
|
||||||
|
- Run linting (`shellcheck`) before committing shell scripts
|
||||||
|
|
||||||
- Performance
|
---
|
||||||
- Measure before optimizing. Prefer clarity over micro-optimizations unless a hotspot is identified.
|
|
||||||
|
|
||||||
3) Code review / commit guidance for agents
|
## 4) Commit Guidelines
|
||||||
|
|
||||||
- Make small, focused commits and include a one-line summary plus a short description of the why.
|
- Make small, focused commits with descriptive messages
|
||||||
- When changing behavior, add or update tests that verify the new/changed behavior.
|
- Include formatter command in commit message if auto-formatting
|
||||||
- If you reformat files automatically, include the formatter command in the commit message to make CI reproduction easy.
|
- When changing behavior, add or update tests
|
||||||
|
- Run full test suite before opening PRs
|
||||||
|
|
||||||
4) Repo housekeeping checks (recommended for agents)
|
---
|
||||||
|
|
||||||
- When adding a new language or framework, add an entry to this file with the exact commands required to build/test.
|
## 5) Cursor / Copilot Rules
|
||||||
- Add CI workflows to run lint + tests on PRs and enable branch protection rules if this becomes a shared repo.
|
|
||||||
- **Session storage**: Store session logs and working notes in `.agents/sessions/` folder for future reference. Use descriptive filenames (e.g., `session-<date>-<topic>.md`).
|
|
||||||
|
|
||||||
5) Cursor / Copilot rules
|
- `.cursor/rules/`: Not present
|
||||||
|
- `.cursorrules`: Not present
|
||||||
|
- `.github/copilot-instructions.md`: Not present
|
||||||
|
|
||||||
- Cursor rules: none present at `.cursor/rules/` or `.cursorrules` in this repository.
|
---
|
||||||
- GitHub Copilot instructions: none present at `.github/copilot-instructions.md`.
|
|
||||||
|
|
||||||
If you add any of these files, update this document and include the exact file path and relevant sections for agents to follow.
|
## 6) Repo Housekeeping
|
||||||
|
|
||||||
Quick checklist for an agent making changes
|
- Store session logs in `.agents/sessions/` for reference
|
||||||
- Run local linter/formatter configured for the language before opening a PR.
|
- When adding new languages, update this file with exact build/test commands
|
||||||
- Run the test suite and the single-test command for any tests you added/changed.
|
|
||||||
- Do not add secrets to the tree; use placeholders and document required environment variables.
|
|
||||||
|
|
||||||
Next steps (recommended)
|
---
|
||||||
1) Add a minimal `Makefile` or `package.json` scripts for common tasks so agents can run `make test` / `npm test`.
|
|
||||||
2) If the project will contain multiple services, add per-service README files and CI workflows.
|
|
||||||
3) Add EditorConfig + language-specific formatter configs (pyproject.toml, .prettierrc, rustfmt.toml) to lock formatting rules.
|
|
||||||
|
|
||||||
Files referenced
|
## Files Referenced
|
||||||
- Root `README.md`
|
|
||||||
- `post_installation_script/README.md` - main script usage
|
|
||||||
- `post_installation_script_test/README.md` - testing instructions
|
|
||||||
- `.cursor/rules/` (not present)
|
|
||||||
- `.cursorrules` (not present)
|
|
||||||
- `.github/copilot-instructions.md` (not present)
|
|
||||||
|
|
||||||
If anything in this file needs to be stricter or you want another style (for example a fully opinionated TS style), say which language or style and I will update `AGENTS.md` accordingly.
|
- `README.md` - Project overview
|
||||||
|
- `post_installation_script/README.md` - Script usage and details
|
||||||
|
- `post_installation_script_test/README.md` - Container testing instructions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Checklist for Changes
|
||||||
|
|
||||||
|
- [ ] Run `shellcheck` on shell scripts before committing
|
||||||
|
- [ ] Verify `bash -n` syntax check passes
|
||||||
|
- [ ] Test script changes in container first
|
||||||
|
- [ ] No secrets in code - use environment variables
|
||||||
|
- [ ] Run tests if added for new functionality
|
||||||
|
|||||||
Executable
+128
@@ -0,0 +1,128 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
question_answered_with_yes() {
|
||||||
|
local prompt="$1"
|
||||||
|
local ans
|
||||||
|
printf '%b\n Enter y or n and press Enter,\n abort with any other key ... [y/N]: ' "$prompt"
|
||||||
|
read -r ans
|
||||||
|
case "$ans" in
|
||||||
|
y|Y) return 0 ;;
|
||||||
|
n|N|"") return 1 ;;
|
||||||
|
*) echo "Aborted."; exit 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -n "$(git status --porcelain)" ]; then
|
||||||
|
echo "Error: You have uncommitted local changes."
|
||||||
|
echo "Please commit or stash them before releasing."
|
||||||
|
echo ""
|
||||||
|
echo "Uncommitted files:"
|
||||||
|
git status --short
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Fetching latest changes..."
|
||||||
|
git fetch origin
|
||||||
|
|
||||||
|
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||||
|
if [ "$CURRENT_BRANCH" = "main" ]; then
|
||||||
|
echo "Pulling latest from main..."
|
||||||
|
git pull origin main || true
|
||||||
|
else
|
||||||
|
echo "Error: You must be on the main branch to create a release."
|
||||||
|
echo "Current branch: $CURRENT_BRANCH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VERSION_FILE="VERSION"
|
||||||
|
SCRIPT_FILE="post_installation_script/Nachinstallationsarbeiten_LC_Esslingen_XFCE.sh"
|
||||||
|
|
||||||
|
if [ ! -f "$VERSION_FILE" ]; then
|
||||||
|
echo "Error: $VERSION_FILE not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT_VERSION=$(cat "$VERSION_FILE" | tr -d '\n')
|
||||||
|
|
||||||
|
if [ ! -f "$SCRIPT_FILE" ]; then
|
||||||
|
echo "Error: $SCRIPT_FILE not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT_MAJOR=${CURRENT_VERSION#v}
|
||||||
|
|
||||||
|
if ! [[ "$CURRENT_VERSION" =~ ^v[0-9]+$ ]]; then
|
||||||
|
echo "Error: Invalid version format in $VERSION_FILE. Expected v0, v1, v2, etc."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
NEXT_VERSION=$((CURRENT_MAJOR + 1))
|
||||||
|
NEXT_VERSION_STR="v$NEXT_VERSION"
|
||||||
|
|
||||||
|
RELEASE_BRANCH="release/$NEXT_VERSION_STR"
|
||||||
|
|
||||||
|
if git ls-remote --heads origin "$RELEASE_BRANCH" 2>/dev/null | grep -q .; then
|
||||||
|
echo "Error: Branch $RELEASE_BRANCH already exists on remote."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if git rev-parse "$RELEASE_BRANCH" >/dev/null 2>&1; then
|
||||||
|
echo "Branch $RELEASE_BRANCH exists locally."
|
||||||
|
if question_answered_with_yes "Delete local branch and continue?"; then
|
||||||
|
git branch -D "$RELEASE_BRANCH"
|
||||||
|
else
|
||||||
|
echo "Release aborted."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Current version: $CURRENT_VERSION"
|
||||||
|
echo "Proposed version: $NEXT_VERSION_STR"
|
||||||
|
echo "Release branch: $RELEASE_BRANCH"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if ! question_answered_with_yes "Confirm release version $NEXT_VERSION_STR?"; then
|
||||||
|
echo "Release aborted."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Creating release branch $RELEASE_BRANCH..."
|
||||||
|
git checkout -b "$RELEASE_BRANCH"
|
||||||
|
|
||||||
|
echo "$NEXT_VERSION_STR" > "$VERSION_FILE"
|
||||||
|
|
||||||
|
sed -i.bak "s/^SCRIPT_VERSION=.*/SCRIPT_VERSION=\"$NEXT_VERSION_STR\"/" "$SCRIPT_FILE"
|
||||||
|
if [ -f "${SCRIPT_FILE}.bak" ]; then
|
||||||
|
rm "${SCRIPT_FILE}.bak"
|
||||||
|
fi
|
||||||
|
|
||||||
|
git add "$VERSION_FILE" "$SCRIPT_FILE"
|
||||||
|
git commit -m "Release $NEXT_VERSION_STR"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Release $NEXT_VERSION_STR prepared on branch $RELEASE_BRANCH."
|
||||||
|
if question_answered_with_yes "Push release branch to origin?"; then
|
||||||
|
git push -u origin "$RELEASE_BRANCH"
|
||||||
|
echo ""
|
||||||
|
echo "Branch pushed to origin."
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo "1. Create a PR from $RELEASE_BRANCH to main"
|
||||||
|
echo " - Via web: Go to your git hosting and create a PR"
|
||||||
|
echo " - Or: gh pr create --base main --head $RELEASE_BRANCH"
|
||||||
|
echo ""
|
||||||
|
echo "2. After PR is merged, create a tag:"
|
||||||
|
echo " git checkout main && git pull"
|
||||||
|
echo " git tag -a $NEXT_VERSION_STR -m \"Release $NEXT_VERSION_STR\""
|
||||||
|
echo " git push origin $NEXT_VERSION_STR"
|
||||||
|
echo ""
|
||||||
|
echo "3. Gitea will create a release from the tag"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Release prepared locally. Push manually with:"
|
||||||
|
echo " git push -u origin $RELEASE_BRANCH"
|
||||||
|
echo ""
|
||||||
|
echo "Then create a PR to main via your git hosting."
|
||||||
|
fi
|
||||||
Executable
+42
@@ -0,0 +1,42 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
question_answered_with_yes() {
|
||||||
|
local prompt="$1"
|
||||||
|
local ans
|
||||||
|
printf '%b\n Enter y or n and press Enter,\n abort with any other key ... [y/N]: ' "$prompt"
|
||||||
|
read -r ans
|
||||||
|
case "$ans" in
|
||||||
|
y|Y) return 0 ;;
|
||||||
|
n|N|"") return 1 ;;
|
||||||
|
*) echo "Aborted."; exit 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Fetching latest from origin..."
|
||||||
|
git fetch origin
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
|
||||||
|
VERSION_FILE="VERSION"
|
||||||
|
CURRENT_VERSION=$(cat "$VERSION_FILE" | tr -d '\n')
|
||||||
|
|
||||||
|
echo "Finalising release of version: $CURRENT_VERSION"
|
||||||
|
|
||||||
|
if ! question_answered_with_yes "Create tag $CURRENT_VERSION on main?"; then
|
||||||
|
echo "Tag creation aborted."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
git tag -a "$CURRENT_VERSION" -m "Release $CURRENT_VERSION"
|
||||||
|
|
||||||
|
if question_answered_with_yes "Push tag to origin?"; then
|
||||||
|
git push origin "$CURRENT_VERSION"
|
||||||
|
echo ""
|
||||||
|
echo "Tag $CURRENT_VERSION pushed to origin."
|
||||||
|
echo "Gitea will create a release from the tag."
|
||||||
|
else
|
||||||
|
echo "Tag created locally. Push manually with:"
|
||||||
|
echo " git push origin $CURRENT_VERSION"
|
||||||
|
fi
|
||||||
@@ -1,4 +1,59 @@
|
|||||||
# lxcafe Repository
|
# lxcafe Repository
|
||||||
|
|
||||||
|
Linux Mint post-installation scripts.
|
||||||
|
|
||||||
Ablage für Code Schnipsel
|
## Structure
|
||||||
|
|
||||||
|
- **post_installation_script/** - Main post-installation scripts for Linux Mint XFCE
|
||||||
|
- **post_installation_script_test/** - Docker based testing environment for script development
|
||||||
|
- **.agents/** - Agent instructions for AI-assisted development
|
||||||
|
|
||||||
|
See individual README files in each directory for detailed information on usage and development.
|
||||||
|
|
||||||
|
## Test post installation script
|
||||||
|
To test the full functionality of post-installation script in a safe, isolated environment, use VirtualBox or similar virtualization
|
||||||
|
software to create a virtual machine with Linux Mint XFCE. Then, copy the script to the virtual machine and run it there.
|
||||||
|
This allows you to test the script without affecting your main system.
|
||||||
|
You can also make use of snapshot feature of the virtualization software to easily revert to a clean state after testing,
|
||||||
|
e.g. state directly after Linux Mint installation, before running the post-installation script.
|
||||||
|
This way you can test the script multiple times without needing to reinstall Linux Mint each time.
|
||||||
|
|
||||||
|
## Release Process
|
||||||
|
|
||||||
|
This project uses a two-step release process.
|
||||||
|
|
||||||
|
### Versioning
|
||||||
|
- Version is stored in `VERSION` file (format: v0, v1, v2, ...)
|
||||||
|
- Major version increments only
|
||||||
|
- Script version stored in `SCRIPT_VERSION` variable
|
||||||
|
|
||||||
|
### Step 1: Prepare Release
|
||||||
|
- Make sure you are on main branch with no local changes. Script will abort otherwise
|
||||||
|
Run from repository root:
|
||||||
|
```bash
|
||||||
|
./01_prepare_release.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
The script will:
|
||||||
|
- Update VERSION file and SCRIPT_VERSION in the script
|
||||||
|
- Create a release branch (e.g., `release/v1`)
|
||||||
|
- Push the release branch
|
||||||
|
|
||||||
|
### After step 1 (manual)
|
||||||
|
- Create and merge PR from release branch to main
|
||||||
|
|
||||||
|
### Step 2: Finalize Release (After PR Merged)
|
||||||
|
Run from repository root:
|
||||||
|
```bash
|
||||||
|
./02_finalise_release.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
The script will:
|
||||||
|
- Create and push tag for release version to main
|
||||||
|
|
||||||
|
### After step 2 (manual)
|
||||||
|
- Create a release in gitea
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
- Clean working tree (no uncommitted changes)
|
||||||
|
- Git remote configured (origin)
|
||||||
@@ -1,380 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
|
|
||||||
cMode="KeineSimulation"
|
|
||||||
cMode="simulation"
|
|
||||||
bIsVlcInstalled=false
|
|
||||||
|
|
||||||
|
|
||||||
echo "
|
|
||||||
###################################
|
|
||||||
#### Nachinstallationsarbeiten ####
|
|
||||||
###################################
|
|
||||||
"
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
echo " simulation sudo apt-get update"
|
|
||||||
else
|
|
||||||
sudo apt-get update
|
|
||||||
fi
|
|
||||||
|
|
||||||
sSuffixDate=$(date '+%Y-%m-%d_%H:%M:%S')
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "A) #### 64 bit Mint XFCE ####"
|
|
||||||
echo "B) #### 32 bit Debian XFCE ####"
|
|
||||||
echo "q) Quit. Abbruch"
|
|
||||||
echo "sonst <enter> zum überspringen."
|
|
||||||
read -p "
|
|
||||||
Geben Sie a oder b ein und die Eingabetaste,
|
|
||||||
Abbruch mit jeder anderen Taste ... " option;
|
|
||||||
case "$option" in
|
|
||||||
[aAmM])
|
|
||||||
echo "A) #### 64 bit Mint XFCE ####"
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
echo "simulation
|
|
||||||
sudo apt -y install xfce4-goodies clementine vlc htop hardinfo font-manager asunder gtkhash pcmanfm
|
|
||||||
";
|
|
||||||
bIsVlcInstalled=true
|
|
||||||
else
|
|
||||||
sudo apt -y install xfce4-goodies clementine vlc htop hardinfo font-manager asunder gtkhash pcmanfm
|
|
||||||
bIsVlcInstalled=true
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
[bBdD])
|
|
||||||
echo "#### 32 bit Debian XFCE ####"
|
|
||||||
echo "## sources list"
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
echo "### Paketquellen eintragen:"
|
|
||||||
echo " cp /etc/apt/sources.list /etc/apt/sources.list_" $sSuffixDate
|
|
||||||
echo "simulation deb http://deb.debian.org/debian bookworm main contrib non-free > /etc/apt/sources.list"
|
|
||||||
echo "simulation deb-src http://deb.debian.org/debian bookworm main contrib non-free >> /etc/apt/sources.list"
|
|
||||||
echo "simulation deb http://deb.debian.org/debian-security/ bookworm-security main contrib non-free >> /etc/apt/sources.list"
|
|
||||||
echo "simulation deb-src http://deb.debian.org/debian-security/ bookworm-security main contrib non-free >> /etc/apt/sources.list"
|
|
||||||
echo "simulation deb http://deb.debian.org/debian bookworm-updates main contrib non-free >> /etc/apt/sources.list"
|
|
||||||
echo "simulation deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free >> /etc/apt/sources.list"
|
|
||||||
echo "### zusätzliche Standardprogramme installieren:"
|
|
||||||
echo "simulation sudo apt install xfce4-goodies clementine vlc htop hardinfo font-manager asunder gtkhash pcmanfm timeshift gnome-system-tools gnome-disk-utility inxi "
|
|
||||||
bIsVlcInstalled=true
|
|
||||||
echo " FIN #### 64 bit Mint XFCE ####"
|
|
||||||
else
|
|
||||||
echo "### Paketquellen eintragen:"
|
|
||||||
cp /etc/apt/sources.list /etc/apt/sources.list_$sSuffixDate
|
|
||||||
deb http://deb.debian.org/debian bookworm main contrib non-free > /etc/apt/sources.list
|
|
||||||
deb-src http://deb.debian.org/debian bookworm main contrib non-free >> /etc/apt/sources.list
|
|
||||||
deb http://deb.debian.org/debian-security/ bookworm-security main contrib non-free >> /etc/apt/sources.list
|
|
||||||
deb-src http://deb.debian.org/debian-security/ bookworm-security main contrib non-free >> /etc/apt/sources.list
|
|
||||||
deb http://deb.debian.org/debian bookworm-updates main contrib non-free >> /etc/apt/sources.list
|
|
||||||
deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free >> /etc/apt/sources.list
|
|
||||||
echo "### zusätzliche Standardprogramme installieren:"
|
|
||||||
sudo apt install xfce4-goodies clementine vlc htop hardinfo font-manager asunder gtkhash pcmanfm timeshift gnome-system-tools gnome-disk-utility inxi
|
|
||||||
bIsVlcInstalled=true
|
|
||||||
echo " FIN #### 32 bit Debian XFCE ####"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
q) echo "Quit. Abbruch"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
*) echo "Unknown parameter"
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo ""
|
|
||||||
echo "#### alle Systeme ####"
|
|
||||||
#
|
|
||||||
echo "### Taskleiste mit XFCE-Applets für Systemauslastung und 2x Netzwerkmonitor (LAN + WLAN) ergänzen und konfigurieren"
|
|
||||||
echo " leider fehlt die automatisierung noch "
|
|
||||||
echo " Manuelle Arbeit notwendig "
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "#### nur auf Wunsch / bei Bedarf ####"
|
|
||||||
#
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
### Sensoren ###
|
|
||||||
# alle Abfragen können mit "ja" beantwortet werden!
|
|
||||||
read -p " ### Sensoren ###
|
|
||||||
Geben Sie j oder n ein und die Eingabetaste,
|
|
||||||
Abbruch mit jeder anderen Taste ... " kommando;
|
|
||||||
if [ $kommando == 'j' -o $kommando == 'J' -o $kommando == 'ja' -o $kommando == 'y' -o $kommando == 'Y' ]; then
|
|
||||||
echo "### Sensoren ###"
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
echo " simulation "
|
|
||||||
echo " apt -y Automatic yes to prompts; assume "yes" as answer to all prompts and run non-interactively."
|
|
||||||
echo "simulation sudo apt -y install lm-sensors psensor"
|
|
||||||
echo "simulation sudo sensors-detect"
|
|
||||||
echo "# alle Abfragen können mit "ja" beantwortet werden!"
|
|
||||||
echo "simulation sudo service kmod start"
|
|
||||||
else
|
|
||||||
sudo apt install lm-sensors psensor
|
|
||||||
sudo sensors-detect
|
|
||||||
echo "# alle Abfragen können mit "ja" beantwortet werden!"
|
|
||||||
sudo service kmod start
|
|
||||||
echo "## dann psensor konfigurieren im Applet in der Taskleiste"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
if $bIsVlcInstalled; then
|
|
||||||
echo "### Kauf-DVDs abspielen ###"
|
|
||||||
read -p " ### Film DVDs ###
|
|
||||||
Geben Sie j oder n ein und die Eingabetaste,
|
|
||||||
Abbruch mit jeder anderen Taste ... " kommando;
|
|
||||||
if [ $kommando == 'j' -o $kommando == 'J' -o $kommando == 'ja' -o $kommando == 'y' -o $kommando == 'Y' ]; then
|
|
||||||
echo "### Sensoren ###"
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
echo " simulation "
|
|
||||||
echo "simulation sudo service kmod start"
|
|
||||||
echo " simulation sudo apt install libdvd-pkg"
|
|
||||||
echo " simulationsudo dpkg-reconfigure libdvd-pkg"
|
|
||||||
else
|
|
||||||
sudo apt install libdvd-pkg
|
|
||||||
sudo dpkg-reconfigure libdvd-pkg
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Player Fehlt
|
|
||||||
## vlc muss installiert sein! Zum Kauf-DVDs abspielen"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "### Schriften, falls Microsoft-Office-Dokumente weiterverwendet werden sollen oder Dokumentenaustausch mit Microsoft-Nutzern gewünscht ist ###
|
|
||||||
## frei verfügbare, alte Microsoft-Standardschriften installieren:"
|
|
||||||
|
|
||||||
read -p " ### M$ Schriften ###
|
|
||||||
Geben Sie j oder n ein und die Eingabetaste,
|
|
||||||
Abbruch mit jeder anderen Taste ... " kommando;
|
|
||||||
if [ $kommando == 'j' -o $kommando == 'J' -o $kommando == 'ja' -o $kommando == 'y' -o $kommando == 'Y' ]; then
|
|
||||||
echo "### M$ Schriften ###"
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
echo "simulation
|
|
||||||
sudo apt install ttf-mscorefonts-installer"
|
|
||||||
else
|
|
||||||
sudo apt install ttf-mscorefonts-installer
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo " ## freie Google-Schriften mit gleicher Laufweite wie aktuelle MS-Standardschriften installieren:"
|
|
||||||
read -p " ### Google Schriften ###
|
|
||||||
Geben Sie j oder n ein und die Eingabetaste,
|
|
||||||
Abbruch mit jeder anderen Taste ... " kommando;
|
|
||||||
if [ $kommando == 'j' -o $kommando == 'J' -o $kommando == 'ja' -o $kommando == 'y' -o $kommando == 'Y' ]; then
|
|
||||||
echo
|
|
||||||
echo "### Google Schriften ###"
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
|
|
||||||
_gf="google-fonts"
|
|
||||||
fGoogleSchriften=./$_gf".tar.gz"
|
|
||||||
if [ ! -f "$fGoogleSchriften" ]; then
|
|
||||||
echo
|
|
||||||
echo "$fGoogleSchriften nicht gefunden."
|
|
||||||
echo " soll das Archiv "google-fonts.tar.gz" von Github runter geladen werden ca. 1GB gross! "
|
|
||||||
read -p " ### Download Google Schriften ### j/n: " runterLaden;
|
|
||||||
if [ $runterLaden == 'j' -o $runterLaden == 'J' -o $runterLaden == 'ja' -o $runterLaden == 'y' -o $runterLaden == 'Y' ]; then
|
|
||||||
echo " Download Google Schriften ###"
|
|
||||||
echo "simulation
|
|
||||||
_wgeturl=https://github.com/google/fonts/archive/main.tar.gz
|
|
||||||
_gf=google-fonts
|
|
||||||
o Connecting to Github server to download fonts...
|
|
||||||
wget $_wgeturl -O $_gf.tar.gz"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "$fGoogleSchriften" ]; then
|
|
||||||
echo
|
|
||||||
echo "Extracting the downloaded archive..."
|
|
||||||
echo " simulationtar -zxvf $_gf.tar.gz"
|
|
||||||
echo "Creating the /usr/share/fonts/truetype/$_gf folder"
|
|
||||||
echo " simulationsudo mkdir -p /usr/share/fonts/truetype/$_gf"
|
|
||||||
echo "Installing all .ttf fonts in /usr/share/fonts/truetype/$_gf"
|
|
||||||
echo " simulationfind $PWD/fonts-main/ -name "*.ttf" -exec sudo install -m644 {} /usr/share/fonts/truetype/google-fonts/ \; "
|
|
||||||
echo "Updating the font cache"
|
|
||||||
echo " simulationfc-cache -f"
|
|
||||||
else
|
|
||||||
echo "Schriften Fehlen immer noch. Manuell runterladen und installieren"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# "Simulation"
|
|
||||||
else
|
|
||||||
# "KeineSimulation"
|
|
||||||
|
|
||||||
_gf="google-fonts"
|
|
||||||
fGoogleSchriften=./$_gf".tar.gz"
|
|
||||||
if [ ! -f "$fGoogleSchriften" ]; then
|
|
||||||
echo ""
|
|
||||||
echo "$fGoogleSchriften nicht gefunden."
|
|
||||||
echo " soll das Archiv "google-fonts.tar.gz" von Github runter geladen werden ca. 1GB gross! "
|
|
||||||
read -p " ### Download Google Schriften ### " runterLaden;
|
|
||||||
if [ $runterLaden == 'j' -o $runterLaden == 'J' -o $runterLaden == 'ja' -o $runterLaden == 'y' -o $runterLaden == 'Y' ]; then
|
|
||||||
_wgeturl="https://github.com/google/fonts/archive/main.tar.gz"
|
|
||||||
echo "Connecting to Github server to download fonts..."
|
|
||||||
wget $_wgeturl -O $_gf.tar.gz
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ -f "$fGoogleSchriften" ]; then
|
|
||||||
echo
|
|
||||||
echo "$fGoogleSchriften nicht gefunden."
|
|
||||||
echo "Extracting the downloaded archive..."
|
|
||||||
tar -zxvf $_gf.tar.gz
|
|
||||||
echo "Creating the /usr/share/fonts/truetype/$_gf folder"
|
|
||||||
sudo mkdir -p /usr/share/fonts/truetype/$_gf
|
|
||||||
echo "Installing all .ttf fonts in /usr/share/fonts/truetype/$_gf"
|
|
||||||
find $PWD/fonts-main/ -name "*.ttf" -exec sudo install -m644 {} /usr/share/fonts/truetype/google-fonts/ \; || echo "An error occured, please run this script again."
|
|
||||||
echo "Updating the font cache"
|
|
||||||
fc-cache -f
|
|
||||||
echo "Done. Now you can delete the tarball file $_gf.tar.gz if you wish."
|
|
||||||
else
|
|
||||||
echo "Schriften Fehlen immer noch. Manuell runterladen und installieren"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# "KeineSimulation"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "#### Chromium Browser installieren:"
|
|
||||||
read -p " ### Chromium ###
|
|
||||||
Geben Sie j oder n ein und die Eingabetaste,
|
|
||||||
Abbruch mit jeder anderen Taste ... " kommando;
|
|
||||||
if [ $kommando == 'j' -o $kommando == 'J' -o $kommando == 'ja' -o $kommando == 'y' -o $kommando == 'Y' ]; then
|
|
||||||
echo "### Chromium ###"
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
echo "simulation
|
|
||||||
sudo apt install chromium
|
|
||||||
sudo apt install chromium-browser
|
|
||||||
"
|
|
||||||
echo " tbd DateiName!?
|
|
||||||
## Gnome-Schlüsselbund-Fehlermeldung bei jedem Start von Chrome/Chromium beheben: Starter bzw. .desktop-Datei mit folgendem Parameter ergänzen:
|
|
||||||
## --password-store=basic "
|
|
||||||
else
|
|
||||||
sudo apt install chromium-browser
|
|
||||||
fi88=
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "### Vivaldi Browser installieren:#### "
|
|
||||||
read -p " ### Vivaldi ###
|
|
||||||
Geben Sie j oder n ein und die Eingabetaste,
|
|
||||||
Abbruch mit jeder anderen Taste ... " kommando;
|
|
||||||
if [ $kommando == 'j' -o $kommando == 'J' -o $kommando == 'ja' -o $kommando == 'y' -o $kommando == 'Y' ]; then
|
|
||||||
echo "### ###"
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
echo "simulation
|
|
||||||
## nötige Zusatzpakete installieren
|
|
||||||
sudo apt install dirmngr ca-certificates software-properties-common apt-transport-https curl -y
|
|
||||||
## key importieren
|
|
||||||
curl -fsSL https://repo.vivaldi.com/archive/linux_signing_key.pub | gpg --dearmor | sudo tee /usr/share/keyrings/vivaldi.gpg > /dev/null
|
|
||||||
## Repository hinzufügen
|
|
||||||
echo deb [arch=amd64,armhf signed-by=/usr/share/keyrings/vivaldi.gpg] https://repo.vivaldi.com/stable/deb/ stable main | sudo tee /etc/apt/sources.list.d/vivaldi.list
|
|
||||||
sudo apt update && sudo apt install vivaldi-stable"
|
|
||||||
echo " tbd DateiName!?
|
|
||||||
## Gnome-Schlüsselbund-Fehlermeldung bei jedem Start von Chrome/Chromium beheben: Starter bzw. .desktop-Datei mit folgendem Parameter ergänzen:
|
|
||||||
## --password-store=basic "
|
|
||||||
|
|
||||||
|
|
||||||
else
|
|
||||||
echo "## nötige Zusatzpakete installieren"
|
|
||||||
sudo apt install dirmngr ca-certificates software-properties-common apt-transport-https curl -y
|
|
||||||
#
|
|
||||||
echo "## ## key importieren"
|
|
||||||
curl -fsSL https://repo.vivaldi.com/archive/linux_signing_key.pub | gpg --dearmor | sudo tee /usr/share/keyrings/vivaldi.gpg > /dev/null
|
|
||||||
#
|
|
||||||
echo "## ## Repository hinzufügen"
|
|
||||||
echo deb [arch=amd64,armhf signed-by=/usr/share/keyrings/vivaldi.gpg] https://repo.vivaldi.com/stable/deb/ stable main | sudo tee /etc/apt/sources.list.d/vivaldi.list
|
|
||||||
#
|
|
||||||
sudo apt update && sudo apt install vivaldi-stable
|
|
||||||
#
|
|
||||||
echo "## ## Gnome-Schlüsselbund-Fehlermeldung bei jedem Start von Chrome/Chromium beheben: Starter bzw. .desktop-Datei mit folgendem Parameter ergänzen: "
|
|
||||||
echo "## ## --password-store=basic"
|
|
||||||
#
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "####Signal für Desktop (setzt Signalinstallation auf einem Android- Oder Apple-Gerät voraus!)#### "
|
|
||||||
read -p " ### Signal ###
|
|
||||||
Geben Sie j oder n ein und die Eingabetaste,
|
|
||||||
Abbruch mit jeder anderen Taste ... " kommando;
|
|
||||||
if [ $kommando == 'j' -o $kommando == 'J' -o $kommando == 'ja' -o $kommando == 'y' -o $kommando == 'Y' ]; then
|
|
||||||
echo "### ###"
|
|
||||||
if [ "$cMode" != "KeineSimulation" ]; then
|
|
||||||
echo "simulation
|
|
||||||
## zusätzliches Repository nötig!
|
|
||||||
#
|
|
||||||
## NOTE: These instructions only work for 64-bit Debian-based
|
|
||||||
## Linux distributions such as Ubuntu, Mint etc.
|
|
||||||
#
|
|
||||||
## key importieren
|
|
||||||
wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > signal-desktop-keyring.gpg
|
|
||||||
cat signal-desktop-keyring.gpg | sudo tee /usr/share/keyrings/signal-desktop-keyring.gpg > /dev/null
|
|
||||||
## Repository hinzufügen:
|
|
||||||
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main' | sudo tee /etc/apt/sources.list.d/signal-xenial.list
|
|
||||||
sudo apt update && sudo apt install signal-desktop
|
|
||||||
|
|
||||||
"
|
|
||||||
else
|
|
||||||
echo "## zusätzliches Repository nötig!
|
|
||||||
## NOTE: These instructions only work for 64-bit Debian-based
|
|
||||||
## Linux distributions such as Ubuntu, Mint etc.
|
|
||||||
## key importieren
|
|
||||||
"
|
|
||||||
wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > signal-desktop-keyring.gpg
|
|
||||||
cat signal-desktop-keyring.gpg | sudo tee /usr/share/keyrings/signal-desktop-keyring.gpg > /dev/null
|
|
||||||
#
|
|
||||||
echo "## Repository hinzufügen:"
|
|
||||||
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main' | sudo tee /etc/apt/sources.list.d/signal-xenial.list
|
|
||||||
sudo apt update && sudo apt install signal-desktop
|
|
||||||
#
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "Skript ENDE"
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "Manuelle Schritte"
|
|
||||||
echo
|
|
||||||
echo "### Taskleiste mit XFCE-Applets für Systemauslastung und 2x Netzwerkmonitor (LAN + WLAN) ergänzen und konfigurieren"
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "Wenn
|
|
||||||
### Sensoren ###
|
|
||||||
installiert wurden
|
|
||||||
## dann psensor konfigurieren im Applet in der Taskleiste "
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
|
|
||||||
+64
-42
@@ -1,12 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
SCRIPT_VERSION="v10"
|
||||||
# "Anderungs Historie
|
|
||||||
# Datum Version Name Änderung
|
|
||||||
# 2025-11-11 v6 MartinP mehr Erläuterungen reingeschrieben
|
|
||||||
# 2025-11-17 v7 Mark Simualtion Modus und 32Bit abfrage entfernt
|
|
||||||
# 2025-12-12 v8 MartinP Erläuterungen ergänzt und Typos entfernt
|
|
||||||
#
|
|
||||||
|
|
||||||
bIsVlcInstalled=false
|
bIsVlcInstalled=false
|
||||||
|
|
||||||
@@ -26,15 +20,19 @@ question_answered_with_yes() {
|
|||||||
|
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
###################################
|
#####################################
|
||||||
#### Nachinstallationsarbeiten ####
|
#### Nachinstallationsarbeiten
|
||||||
###################################
|
#### Version: $SCRIPT_VERSION
|
||||||
|
#####################################
|
||||||
|
|
||||||
#### Was tut dieses Skript? ####
|
#### Was tut dieses Skript? ####
|
||||||
|
|
||||||
# Vorausgesetzt wird eine Installation von Linux Mint XFCE.
|
# Vorausgesetzt wird eine Installation von Linux Mint XFCE.
|
||||||
# Das Skript bietet -teilweise interaktiv- die Installation von zusätzlichen Programmen an, die Linux Mint XFCE nicht standardmässig mitbringt.
|
# Das Skript bietet -teilweise interaktiv- die Installation von zusätzlichen Programmen an, die Linux Mint XFCE nicht standardmässig mitbringt.
|
||||||
#
|
#
|
||||||
|
# Folgende Dateien werden aus dem Skript referenziert und werden im selben Verzeichnis wie dieses Skript erwartet
|
||||||
|
## - xfce4-panel-profiles.tar.bz2
|
||||||
|
#
|
||||||
# Zu Beginn werden die folgenden zusätzlichen Programme in einem Schritt installiert:
|
# Zu Beginn werden die folgenden zusätzlichen Programme in einem Schritt installiert:
|
||||||
#
|
#
|
||||||
# xfce4-goodies (zusätzliche Elemente für die Taskleiste)
|
# xfce4-goodies (zusätzliche Elemente für die Taskleiste)
|
||||||
@@ -54,6 +52,8 @@ echo "
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
# needed by script to unzip Aptos font
|
||||||
|
sudo apt install unzip -y
|
||||||
|
|
||||||
sSuffixDate=$(date '+%Y-%m-%d_%H:%M:%S')
|
sSuffixDate=$(date '+%Y-%m-%d_%H:%M:%S')
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ sSuffixDate=$(date '+%Y-%m-%d_%H:%M:%S')
|
|||||||
echo
|
echo
|
||||||
if question_answered_with_yes "#### Installiere Zusatzprogramme für 64 bit Mint XFCE? ####"; then
|
if question_answered_with_yes "#### Installiere Zusatzprogramme für 64 bit Mint XFCE? ####"; then
|
||||||
echo "#### 64 bit Mint XFCE ####"
|
echo "#### 64 bit Mint XFCE ####"
|
||||||
sudo apt -y install xfce4-goodies clementine vlc htop hardinfo font-manager asunder gtkhash xfce4-panel-profiles
|
sudo apt -y install xfce4-goodies clementine vlc htop hardinfo font-manager asunder gtkhash
|
||||||
bIsVlcInstalled=true
|
bIsVlcInstalled=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -108,42 +108,63 @@ fi
|
|||||||
|
|
||||||
echo
|
echo
|
||||||
echo
|
echo
|
||||||
echo " ## freie Google-Schriften als Ersatz für aktuelle MS-Standardschriften installieren:"
|
echo " ## Microsoft Aptos Schriftarten installieren:"
|
||||||
|
if question_answered_with_yes " ### Installiere Aptos Schriften? ###"; then
|
||||||
|
echo
|
||||||
|
echo "### Aptos Schriften ###"
|
||||||
|
|
||||||
|
_aptos_zip="/tmp/Microsoft Aptos Fonts.zip"
|
||||||
|
_aptos_url="https://download.microsoft.com/download/8/6/0/860a94fa-7feb-44ef-ac79-c072d9113d69/Microsoft%20Aptos%20Fonts.zip"
|
||||||
|
|
||||||
|
echo "Lade Aptos Schriften herunter..."
|
||||||
|
wget "$_aptos_url" -O "$_aptos_zip"
|
||||||
|
|
||||||
|
echo "Entpacke das Archiv..."
|
||||||
|
unzip -o "$_aptos_zip" -d /tmp/aptos_fonts
|
||||||
|
echo "Erstelle /usr/share/fonts/truetype/aptos/"
|
||||||
|
sudo mkdir -p /usr/share/fonts/truetype/aptos
|
||||||
|
echo "Installiere alle .ttf Schriften..."
|
||||||
|
find /tmp/aptos_fonts -name "*.ttf" -exec sudo install -m644 {} /usr/share/fonts/truetype/aptos/ \; 2>/dev/null || true
|
||||||
|
echo "Aktualisiere den Font-Cache"
|
||||||
|
fc-cache -f
|
||||||
|
echo "Fertig! Aptos Schriftarten sind installiert."
|
||||||
|
|
||||||
|
echo "Entferne temporäre Dateien..."
|
||||||
|
rm -rf "$_aptos_zip" /tmp/aptos_fonts
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
echo " ## freie Google-Schriften"
|
||||||
if question_answered_with_yes " ### Installiere Google Schriften? ###"; then
|
if question_answered_with_yes " ### Installiere Google Schriften? ###"; then
|
||||||
echo
|
echo
|
||||||
echo "### Google Schriften ###"
|
echo "### Google Schriften ###"
|
||||||
|
|
||||||
_gf="google-fonts"
|
_google_fonts_dir="/usr/share/fonts/truetype/google-fonts"
|
||||||
fGoogleSchriften=./$_gf".tar.gz"
|
_google_fonts_url_base="https://gwfh.mranftl.com/api/fonts"
|
||||||
if [ ! -f "$fGoogleSchriften" ]; then
|
|
||||||
echo ""
|
_google_fonts="arimo carlito caladea inconsolata cousine libre-franklin neuton cabin oswald crimson-text lustria tinos league-spartan pt-sans"
|
||||||
echo "$fGoogleSchriften nicht gefunden."
|
|
||||||
echo " soll das Archiv "google-fonts.tar.gz" von Github heruntergeladen werden? Es ist ca. 1,4GB gross! "
|
sudo mkdir -p "$_google_fonts_dir"
|
||||||
if question_answered_with_yes " ### Download Google Schriften ###"; then
|
|
||||||
_wgeturl="https://github.com/google/fonts/archive/main.tar.gz"
|
for _font in $_google_fonts; do
|
||||||
echo "Connecting to Github server to download fonts..."
|
echo "Lade $_font herunter..."
|
||||||
wget "$_wgeturl" -O "$_gf.tar.gz"
|
curl -s -o /tmp/"$_font".zip "${_google_fonts_url_base}/$_font?download=zip&subsets=latin,latin-ext&variants=regular,700"
|
||||||
|
if [ -s /tmp/"$_font".zip ] && head -c 2 /tmp/"$_font".zip | grep -q "PK"; then
|
||||||
|
unzip -o /tmp/"$_font".zip -d /tmp/"$_font"_fonts
|
||||||
|
sudo cp /tmp/"$_font"_fonts/fonts/"$_font"/* "$_google_fonts_dir/" 2>/dev/null || \
|
||||||
|
sudo cp /tmp/"$_font"_fonts/* "$_google_fonts_dir/" 2>/dev/null || true
|
||||||
|
rm -rf /tmp/"$_font".zip /tmp/"$_font"_fonts
|
||||||
|
else
|
||||||
|
echo "Fehler: Download von $_font fehlgeschlagen, überspringe..."
|
||||||
|
rm -f /tmp/"$_font".zip
|
||||||
fi
|
fi
|
||||||
fi
|
done
|
||||||
if [ -f "$fGoogleSchriften" ]; then
|
|
||||||
echo
|
|
||||||
echo "Extracting the downloaded archive..."
|
|
||||||
tar -zxvf "$_gf.tar.gz"
|
|
||||||
echo "Creating the /usr/share/fonts/truetype/$_gf folder"
|
|
||||||
sudo mkdir -p /usr/share/fonts/truetype/$_gf
|
|
||||||
echo "Installing all .ttf fonts in /usr/share/fonts/truetype/$_gf"
|
|
||||||
find "$PWD/fonts-main/" -name "*.ttf" -exec sudo install -m644 {} /usr/share/fonts/truetype/google-fonts/ \; || echo "An error occured, please run this script again."
|
|
||||||
echo "Updating the font cache"
|
|
||||||
fc-cache -f
|
|
||||||
echo "Done. Now you can delete the tarball file $_gf.tar.gz if you wish."
|
|
||||||
|
|
||||||
echo "Temporärer Fontordner wird gelöscht"
|
|
||||||
rm -r fonts-main
|
|
||||||
echo "Google-Schriften sind installiert. Die Anpassung der Standardschriften und/oder das Erstellen der Ersetzungstabelle in Libre Office muss manuell erfolgen, falls gewünscht."
|
|
||||||
else
|
|
||||||
echo "Schriften Fehlen immer noch. Manuell herunterladen und installieren"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
echo "Aktualisiere den Font-Cache"
|
||||||
|
fc-cache -f
|
||||||
|
echo "Fertig! Google Schriftarten sind installiert."
|
||||||
|
echo "Die Anpassung der Standardschriften und/oder das Erstellen der Ersetzungstabelle in Libre Office muss manuell erfolgen, falls gewünscht."
|
||||||
fi
|
fi
|
||||||
#
|
#
|
||||||
|
|
||||||
@@ -214,8 +235,9 @@ echo "Ein Abmelden und Wiederanmelden des Benutzers oder ein Reboot behebt das P
|
|||||||
echo
|
echo
|
||||||
if question_answered_with_yes " ### Änderungen am Panel durchführen? ###"; then
|
if question_answered_with_yes " ### Änderungen am Panel durchführen? ###"; then
|
||||||
echo "### ###"
|
echo "### ###"
|
||||||
|
sudo apt install xfce4-panel-profiles -y
|
||||||
echo "## Austausch der Panel-Konfigurationsdatei:"
|
echo "## Austausch der Panel-Konfigurationsdatei:"
|
||||||
xfce4-panel-profiles load current-config.tar.bz2
|
xfce4-panel-profiles load xfce4-panel-profiles.tar.bz2
|
||||||
fi
|
fi
|
||||||
echo
|
echo
|
||||||
echo "###############################"
|
echo "###############################"
|
||||||
@@ -1,6 +1,13 @@
|
|||||||
# Post-Installation Script
|
# Post-Installation Script
|
||||||
|
|
||||||
This directory contains all files belonging to the Linux Mint XFCE post-installation script.
|
This directory contains files belonging to the Linux Mint XFCE post-installation script.
|
||||||
|
|
||||||
|
## Prerequisites to run the script
|
||||||
|
- Linux Mint XFCE installed and running
|
||||||
|
- Internet connection for downloading packages and updates
|
||||||
|
- Script file: `Nachinstallationsarbeiten_LC_Esslingen_XFCE.sh` copied to Desktop
|
||||||
|
|
||||||
|
No external files need to be pre-downloaded.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -8,7 +15,7 @@ Run the main script:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd post_installation_script
|
cd post_installation_script
|
||||||
bash 20251212_Nachinstallationsarbeiten_LC_Esslingen_XFCE_v8.sh
|
bash Nachinstallationsarbeiten_LC_Esslingen_XFCE.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
The script is interactive and will prompt for confirmation before each installation step.
|
The script is interactive and will prompt for confirmation before each installation step.
|
||||||
|
|||||||
Binary file not shown.
@@ -1,220 +0,0 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<channel name="xfce4-panel" version="1.0">
|
|
||||||
<property name="configver" type="int" value="2"/>
|
|
||||||
<property name="panels" type="array">
|
|
||||||
<value type="int" value="1"/>
|
|
||||||
<value type="int" value="2"/>
|
|
||||||
<property name="panel-1" type="empty">
|
|
||||||
<property name="position" type="string" value="p=6;x=0;y=0"/>
|
|
||||||
<property name="length" type="uint" value="100"/>
|
|
||||||
<property name="position-locked" type="bool" value="true"/>
|
|
||||||
<property name="icon-size" type="uint" value="16"/>
|
|
||||||
<property name="size" type="uint" value="29"/>
|
|
||||||
<property name="plugin-ids" type="array">
|
|
||||||
<value type="int" value="1"/>
|
|
||||||
<value type="int" value="2"/>
|
|
||||||
<value type="int" value="3"/>
|
|
||||||
<value type="int" value="5"/>
|
|
||||||
<value type="int" value="6"/>
|
|
||||||
<value type="int" value="8"/>
|
|
||||||
<value type="int" value="9"/>
|
|
||||||
<value type="int" value="10"/>
|
|
||||||
<value type="int" value="11"/>
|
|
||||||
<value type="int" value="12"/>
|
|
||||||
<value type="int" value="13"/>
|
|
||||||
<value type="int" value="14"/>
|
|
||||||
<value type="int" value="7"/>
|
|
||||||
<value type="int" value="26"/>
|
|
||||||
<value type="int" value="28"/>
|
|
||||||
</property>
|
|
||||||
<property name="nrows" type="uint" value="2"/>
|
|
||||||
<property name="border-width" type="uint" value="1"/>
|
|
||||||
</property>
|
|
||||||
<property name="panel-2" type="empty">
|
|
||||||
<property name="autohide-behavior" type="uint" value="1"/>
|
|
||||||
<property name="position" type="string" value="p=10;x=0;y=0"/>
|
|
||||||
<property name="position-locked" type="bool" value="true"/>
|
|
||||||
<property name="size" type="uint" value="48"/>
|
|
||||||
<property name="plugin-ids" type="array">
|
|
||||||
<value type="int" value="15"/>
|
|
||||||
<value type="int" value="16"/>
|
|
||||||
<value type="int" value="17"/>
|
|
||||||
<value type="int" value="18"/>
|
|
||||||
<value type="int" value="19"/>
|
|
||||||
<value type="int" value="20"/>
|
|
||||||
<value type="int" value="21"/>
|
|
||||||
<value type="int" value="22"/>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
<property name="plugins" type="empty">
|
|
||||||
<property name="plugin-2" type="string" value="tasklist">
|
|
||||||
<property name="grouping" type="uint" value="1"/>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-3" type="string" value="separator">
|
|
||||||
<property name="expand" type="bool" value="true"/>
|
|
||||||
<property name="style" type="uint" value="0"/>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-5" type="string" value="separator">
|
|
||||||
<property name="style" type="uint" value="0"/>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-6" type="string" value="systray">
|
|
||||||
<property name="show-frame" type="bool" value="false"/>
|
|
||||||
<property name="square-icons" type="bool" value="true"/>
|
|
||||||
<property name="names-ordered" type="array">
|
|
||||||
<value type="string" value="pamac-tray"/>
|
|
||||||
<value type="string" value="connman-gtk"/>
|
|
||||||
</property>
|
|
||||||
<property name="known-legacy-items" type="array">
|
|
||||||
<value type="string" value="ethernet-netzverbindung »wired connection 1« ist aktiv"/>
|
|
||||||
<value type="string" value="netzwerk-manager-applet"/>
|
|
||||||
</property>
|
|
||||||
<property name="known-items" type="array">
|
|
||||||
<value type="string" value="Nextcloud"/>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-8" type="string" value="pulseaudio">
|
|
||||||
<property name="enable-keyboard-shortcuts" type="bool" value="true"/>
|
|
||||||
<property name="show-notifications" type="bool" value="true"/>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-9" type="string" value="power-manager-plugin"/>
|
|
||||||
<property name="plugin-10" type="string" value="notification-plugin"/>
|
|
||||||
<property name="plugin-11" type="string" value="separator">
|
|
||||||
<property name="style" type="uint" value="0"/>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-12" type="string" value="clock"/>
|
|
||||||
<property name="plugin-13" type="string" value="separator">
|
|
||||||
<property name="style" type="uint" value="0"/>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-14" type="string" value="actions"/>
|
|
||||||
<property name="plugin-15" type="string" value="showdesktop"/>
|
|
||||||
<property name="plugin-16" type="string" value="separator"/>
|
|
||||||
<property name="plugin-17" type="string" value="launcher">
|
|
||||||
<property name="items" type="array">
|
|
||||||
<value type="string" value="15869715091.desktop"/>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-18" type="string" value="launcher">
|
|
||||||
<property name="items" type="array">
|
|
||||||
<value type="string" value="15869715092.desktop"/>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-19" type="string" value="launcher">
|
|
||||||
<property name="items" type="array">
|
|
||||||
<value type="string" value="15869715093.desktop"/>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-20" type="string" value="launcher">
|
|
||||||
<property name="items" type="array">
|
|
||||||
<value type="string" value="15869715094.desktop"/>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-21" type="string" value="separator"/>
|
|
||||||
<property name="plugin-22" type="string" value="directorymenu">
|
|
||||||
<property name="base-directory" type="string" value="/home/artix"/>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-1" type="string" value="whiskermenu">
|
|
||||||
<property name="button-icon" type="string" value="artixlinux-logo"/>
|
|
||||||
<property name="show-button-title" type="bool" value="true"/>
|
|
||||||
<property name="launcher-icon-size" type="int" value="3"/>
|
|
||||||
<property name="hover-switch-category" type="bool" value="true"/>
|
|
||||||
<property name="favorites-in-recent" type="bool" value="true"/>
|
|
||||||
<property name="position-search-alternate" type="bool" value="true"/>
|
|
||||||
<property name="position-categories-alternate" type="bool" value="true"/>
|
|
||||||
<property name="command-switchuser" type="string" value="gdmflexiserver"/>
|
|
||||||
<property name="favorites" type="array">
|
|
||||||
<value type="string" value="xfce4-web-browser.desktop"/>
|
|
||||||
<value type="string" value="xfce4-mail-reader.desktop"/>
|
|
||||||
<value type="string" value="xfce4-file-manager.desktop"/>
|
|
||||||
<value type="string" value="xfce4-terminal-emulator.desktop"/>
|
|
||||||
</property>
|
|
||||||
<property name="recent" type="array">
|
|
||||||
<value type="string" value="xfce4-file-manager.desktop"/>
|
|
||||||
<value type="string" value="xfce4-terminal-emulator.desktop"/>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-7" type="string" value="genmon">
|
|
||||||
<property name="command" type="string" value=""/>
|
|
||||||
<property name="use-label" type="bool" value="true"/>
|
|
||||||
<property name="text" type="string" value="(genmon)"/>
|
|
||||||
<property name="update-period" type="int" value="30000"/>
|
|
||||||
<property name="enable-single-row" type="bool" value="true"/>
|
|
||||||
<property name="font" type="string" value="Roboto 11"/>
|
|
||||||
</property>
|
|
||||||
<property name="plugin-26" type="string" value="whiskermenu"/>
|
|
||||||
<property name="plugin-28" type="string" value="cpugraph">
|
|
||||||
<property name="update-interval" type="int" value="2"/>
|
|
||||||
<property name="time-scale" type="int" value="0"/>
|
|
||||||
<property name="size" type="int" value="16"/>
|
|
||||||
<property name="mode" type="int" value="1"/>
|
|
||||||
<property name="color-mode" type="int" value="0"/>
|
|
||||||
<property name="frame" type="int" value="0"/>
|
|
||||||
<property name="border" type="int" value="1"/>
|
|
||||||
<property name="bars" type="int" value="1"/>
|
|
||||||
<property name="per-core" type="int" value="0"/>
|
|
||||||
<property name="tracked-core" type="int" value="0"/>
|
|
||||||
<property name="in-terminal" type="int" value="1"/>
|
|
||||||
<property name="startup-notification" type="int" value="0"/>
|
|
||||||
<property name="load-threshold" type="int" value="0"/>
|
|
||||||
<property name="smt-stats" type="int" value="0"/>
|
|
||||||
<property name="smt-issues" type="int" value="0"/>
|
|
||||||
<property name="per-core-spacing" type="int" value="1"/>
|
|
||||||
<property name="command" type="string" value=""/>
|
|
||||||
<property name="background" type="array">
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
<value type="double" value="0"/>
|
|
||||||
</property>
|
|
||||||
<property name="foreground-1" type="array">
|
|
||||||
<value type="double" value="0"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
<value type="double" value="0"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
</property>
|
|
||||||
<property name="foreground-2" type="array">
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
<value type="double" value="0"/>
|
|
||||||
<value type="double" value="0"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
</property>
|
|
||||||
<property name="foreground-3" type="array">
|
|
||||||
<value type="double" value="0"/>
|
|
||||||
<value type="double" value="0"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
</property>
|
|
||||||
<property name="smt-issues-color" type="array">
|
|
||||||
<value type="double" value="0.90000000000000002"/>
|
|
||||||
<value type="double" value="0"/>
|
|
||||||
<value type="double" value="0"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
</property>
|
|
||||||
<property name="foreground-system" type="array">
|
|
||||||
<value type="double" value="0.90000000000000002"/>
|
|
||||||
<value type="double" value="0.10000000000000001"/>
|
|
||||||
<value type="double" value="0.10000000000000001"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
</property>
|
|
||||||
<property name="foreground-user" type="array">
|
|
||||||
<value type="double" value="0.10000000000000001"/>
|
|
||||||
<value type="double" value="0.40000000000000002"/>
|
|
||||||
<value type="double" value="0.90000000000000002"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
</property>
|
|
||||||
<property name="foreground-nice" type="array">
|
|
||||||
<value type="double" value="0.90000000000000002"/>
|
|
||||||
<value type="double" value="0.80000000000000004"/>
|
|
||||||
<value type="double" value="0.20000000000000001"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
</property>
|
|
||||||
<property name="foreground-iowait" type="array">
|
|
||||||
<value type="double" value="0.20000000000000001"/>
|
|
||||||
<value type="double" value="0.90000000000000002"/>
|
|
||||||
<value type="double" value="0.40000000000000002"/>
|
|
||||||
<value type="double" value="1"/>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
</channel>
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Start container with the test image (interactive shell)
|
|
||||||
docker run -it --rm \
|
docker run -it --rm \
|
||||||
--tmpfs /tmp:rw \
|
--tmpfs /tmp:rw \
|
||||||
-v "$(pwd)/../post_installation_script/":/workspace/:ro \
|
--entrypoint bash \
|
||||||
mint-script-test
|
-v "$(pwd)/../post_installation_script/":/workspace-source:ro \
|
||||||
|
mint-script-test \
|
||||||
|
-c 'cp -r /workspace-source/* /workspace/ && cd /workspace && exec bash'
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
# Post-Installation Script Testing
|
# Post-Installation Script Testing
|
||||||
|
|
||||||
This directory contains everything needed to test the post-installation script in a safe, isolated container environment.
|
This directory contains a quick (but not complete) test for post-installation script in a safe, isolated container environment.
|
||||||
|
The container has no UI installed and therefore can't test the UI related parts of the script (Taskbar adaptions), but
|
||||||
|
it allows to test the logic, prompts, and error handling of the script.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
- Docker or Podman installed on the host system. If Podman is used, an alias for `docker` command should be set up (e.g. `alias docker=podman`)
|
||||||
|
- in order to use the provided scripts without modification.
|
||||||
|
|
||||||
## Contents
|
## Contents
|
||||||
|
|
||||||
@@ -32,7 +38,7 @@ Run the prepared shell script to build the image
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd post_installation_script_test
|
cd post_installation_script_test
|
||||||
sh 01_create_image.sh
|
bash 01_create_image.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Start a container for testing
|
### Start a container for testing
|
||||||
@@ -41,23 +47,25 @@ image and remove container after it is stopped. After container is started an in
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd post_installation_script_test
|
cd post_installation_script_test
|
||||||
sh 02_start_container_with_image.sh
|
bash 02_start_container_with_image.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Test the script file in the running container
|
### Test the script file in the running container
|
||||||
After container is started an interactive session was started in the container and the script can be started for testing.
|
After container is started an interactive session was started in the container and the script can be started for testing.
|
||||||
If script is changed on the host it just needs to be restarted in the container to reflect the changes.
|
The source script folder is mounted read-only to `/workspace-source` and contents are copied to `/workspace` at container startup.
|
||||||
This works because to folder is mounted into the container.
|
To test changes made on the host, restart the container - it will copy the updated files.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -al
|
ls -al
|
||||||
sh <scriptName>.sh
|
bash <scriptName>.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## Security Notes
|
## Security Notes
|
||||||
|
|
||||||
- The script is mounted read-only (`:ro` flag) to prevent container from modifying host files
|
- The source script folder is mounted read-only to `/workspace-source`
|
||||||
|
- Contents are automatically copied to `/workspace` (writable) at container startup
|
||||||
|
- This keeps the host script folder untouched while allowing the script to write files (e.g., font extraction)
|
||||||
- All apt installations are real but isolated in the container
|
- All apt installations are real but isolated in the container
|
||||||
- Use `--tmpfs /tmp:rw` for any temporary writes inside the container
|
- Use `--tmpfs /tmp:rw` for any temporary writes inside the container
|
||||||
- Container is automatically removed after exit (`--rm` flag)
|
- Container is automatically removed after exit (`--rm` flag)
|
||||||
|
|||||||
Reference in New Issue
Block a user