deb-mock/docs/FAQ.md
2025-08-03 22:16:04 +00:00

327 lines
No EOL
7.8 KiB
Markdown

# Deb-Mock FAQ
## Frequently Asked Questions
This FAQ addresses common issues and questions about **Deb-Mock**, a Debian-focused alternative to Fedora's Mock.
### Environment Variables in Chroot
**Q: I set environment variables in my configuration, but they're not preserved in the chroot environment.**
**A:** This is a common issue with chroot environments. **Deb-Mock** provides several solutions:
#### Solution 1: Use the `--preserve-env` flag
```bash
deb-mock shell --preserve-env
```
#### Solution 2: Configure specific environment variables
```yaml
# deb-mock.yaml
preserve_environment:
- CC
- CXX
- CFLAGS
- CXXFLAGS
- DEB_BUILD_OPTIONS
- CCACHE_DIR
```
#### Solution 3: Disable environment sanitization
```yaml
# deb-mock.yaml
environment_sanitization: false
```
#### Solution 4: Use the `--env-var` option
```bash
deb-mock shell --env-var CC=gcc --env-var CFLAGS="-O2"
```
**Why this happens:** Chroot environments sanitize environment variables for security reasons. **Deb-Mock** provides controlled ways to preserve necessary variables while maintaining security.
### Cross-Distribution Package Building
**Q: I'm on Debian Stable but need to build packages for Debian Sid. How can I do this?**
**A:** Use **Deb-Mock**'s bootstrap chroot feature, similar to Mock's `--bootstrap-chroot`:
#### Solution: Use bootstrap chroot
```bash
# Create a Sid chroot using bootstrap
deb-mock init-chroot debian-sid-amd64 --suite sid --bootstrap
# Build packages in the Sid chroot
deb-mock -r debian-sid-amd64 build package.dsc
```
#### Configuration-based approach
```yaml
# deb-mock.yaml
use_bootstrap_chroot: true
bootstrap_chroot_name: "debian-stable-bootstrap"
suite: "sid"
architecture: "amd64"
```
**Why this is needed:** Building packages for newer distributions on older systems can fail due to package manager version incompatibilities. Bootstrap chroots create a minimal environment with the target distribution's tools to build the final chroot.
### Build Dependencies Not Found
**Q: My build fails with "Package not found" errors for build dependencies.**
**A:** This usually indicates repository or dependency resolution issues:
#### Solution 1: Update the chroot
```bash
deb-mock update-chroot debian-bookworm-amd64
```
#### Solution 2: Check repository configuration
```yaml
# deb-mock.yaml
mirror: "http://deb.debian.org/debian/"
security_mirror: "http://security.debian.org/debian-security/"
backports_mirror: "http://deb.debian.org/debian/"
```
#### Solution 3: Install missing dependencies manually
```bash
deb-mock shell debian-bookworm-amd64
# Inside chroot:
apt-get update
apt-get install build-essential devscripts
```
#### Solution 4: Use verbose output for debugging
```bash
deb-mock --verbose build package.dsc
```
### Chroot Creation Fails
**Q: I get permission errors when creating chroots.**
**A:** Chroot creation requires root privileges:
#### Solution 1: Use sudo
```bash
sudo deb-mock init-chroot debian-bookworm-amd64
```
#### Solution 2: Add user to appropriate groups
```bash
sudo usermod -a -G sbuild $USER
# Log out and back in
```
#### Solution 3: Check disk space
```bash
df -h /var/lib/deb-mock
```
#### Solution 4: Verify debootstrap installation
```bash
sudo apt-get install debootstrap schroot
```
### Build Performance Issues
**Q: My builds are slow. How can I speed them up?**
**A:** **Deb-Mock** provides several performance optimization features:
#### Solution 1: Enable caching
```yaml
# deb-mock.yaml
use_root_cache: true
use_package_cache: true
use_ccache: true
```
#### Solution 2: Use parallel builds
```yaml
# deb-mock.yaml
parallel_jobs: 8
parallel_compression: true
```
#### Solution 3: Use tmpfs for temporary files
```yaml
# deb-mock.yaml
use_tmpfs: true
tmpfs_size: "4G"
```
#### Solution 4: Clean up old caches
```bash
deb-mock cleanup-caches
```
### Network and Proxy Issues
**Q: I'm behind a proxy and can't download packages.**
**A:** Configure proxy settings in your configuration:
#### Solution: Configure proxy
```yaml
# deb-mock.yaml
http_proxy: "http://proxy.example.com:3128"
https_proxy: "http://proxy.example.com:3128"
no_proxy: "localhost,127.0.0.1"
```
### Package Signing Issues
**Q: How do I sign packages with GPG keys?**
**A:** **Deb-Mock** supports package signing through configuration:
#### Solution: Configure signing
```yaml
# deb-mock.yaml
sign_packages: true
gpg_key: "your-gpg-key-id"
gpg_passphrase: "your-passphrase" # Use environment variable in production
```
### Debugging Build Failures
**Q: My build failed. How can I debug it?**
**A:** **Deb-Mock** provides several debugging tools:
#### Solution 1: Use verbose output
```bash
deb-mock --verbose build package.dsc
```
#### Solution 2: Keep chroot for inspection
```bash
deb-mock build package.dsc --keep-chroot
deb-mock shell # Inspect the failed build environment
```
#### Solution 3: Check build logs
```bash
# Build logs are automatically captured
ls -la ./output/
cat ./output/build.log
```
#### Solution 4: Use debug mode
```bash
deb-mock --debug build package.dsc
```
### Chain Building Issues
**Q: My chain build fails because later packages can't find earlier packages.**
**A:** This is a common issue with chain builds:
#### Solution 1: Use the chain command
```bash
deb-mock chain package1.dsc package2.dsc package3.dsc
```
#### Solution 2: Continue on failure
```bash
deb-mock chain package1.dsc package2.dsc --continue-on-failure
```
#### Solution 3: Check package installation
```bash
deb-mock shell
# Inside chroot, check if packages are installed:
dpkg -l | grep package-name
```
### Configuration Issues
**Q: How do I create a custom configuration?**
**A:** **Deb-Mock** supports custom configurations:
#### Solution 1: Create a custom config file
```yaml
# my-config.yaml
chroot_name: "custom-debian"
architecture: "amd64"
suite: "bookworm"
mirror: "http://deb.debian.org/debian/"
use_root_cache: true
use_ccache: true
parallel_jobs: 4
```
#### Solution 2: Use the config file
```bash
deb-mock -c my-config.yaml build package.dsc
```
#### Solution 3: Use core configurations
```bash
# List available configurations
deb-mock list-configs
# Use a core configuration
deb-mock -r debian-bookworm-amd64 build package.dsc
```
### Common Error Messages
#### "Chroot does not exist"
```bash
# Create the chroot first
deb-mock init-chroot debian-bookworm-amd64
```
#### "Permission denied"
```bash
# Use sudo for chroot operations
sudo deb-mock init-chroot debian-bookworm-amd64
```
#### "Package not found"
```bash
# Update the chroot
deb-mock update-chroot debian-bookworm-amd64
```
#### "Build dependencies not satisfied"
```bash
# Install build dependencies
deb-mock shell
# Inside chroot:
apt-get install build-essential devscripts
```
### Getting Help
**Q: Where can I get more help?**
**A:** Several resources are available:
1. **Documentation**: Check the main README and configuration documentation
2. **Verbose Output**: Use `--verbose` and `--debug` flags for detailed information
3. **Error Messages**: **Deb-Mock** provides detailed error messages with suggestions
4. **Logs**: Check build logs in the output directory
5. **Community**: Report issues on the project's issue tracker
### Performance Tips
1. **Use caching**: Enable root cache, package cache, and ccache
2. **Parallel builds**: Set appropriate `parallel_jobs` for your system
3. **Clean up**: Regularly run `deb-mock cleanup-caches`
4. **Monitor resources**: Use `deb-mock cache-stats` to monitor cache usage
5. **Optimize chroots**: Use tmpfs for temporary files if you have sufficient RAM
### Security Considerations
1. **Environment sanitization**: Keep environment sanitization enabled unless necessary
2. **Root privileges**: Only use sudo when required for chroot operations
3. **Package verification**: Verify source packages before building
4. **Network security**: Use HTTPS mirrors and configure proxies securely
5. **Cache security**: Regularly clean caches to remove sensitive build artifacts