From fc2fb763f5697a7a3eca87748763d6ff432994d2 Mon Sep 17 00:00:00 2001 From: Othman Suseno Date: Mon, 8 Dec 2025 17:16:34 +0000 Subject: [PATCH] Initial commit: Adastra VTL Linux Distribution- Complete build system for VTL-focused Linux distro- mhvtl integration with 4 LTO drives and media changer- iSCSI target configuration for network connectivity- Automated installation and configuration scripts- Comprehensive documentation (architecture, installation, configuration)- Systemd service files and kernel tuning- Quick start wizard for easy setup --- .gitignore | 11 + README.md | 109 ++++++++++ build/build-iso.sh | 176 ++++++++++++++++ config/sysctl-vtl.conf | 17 ++ docs/ARCHITECTURE.md | 299 +++++++++++++++++++++++++++ docs/CONFIGURATION.md | 408 +++++++++++++++++++++++++++++++++++++ docs/INSTALLATION.md | 276 +++++++++++++++++++++++++ quickstart.sh | 97 +++++++++ scripts/configure-iscsi.sh | 104 ++++++++++ scripts/install-mhvtl.sh | 133 ++++++++++++ scripts/post-install.sh | 114 +++++++++++ systemd/mhvtl.service | 15 ++ 12 files changed, 1759 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100755 build/build-iso.sh create mode 100644 config/sysctl-vtl.conf create mode 100644 docs/ARCHITECTURE.md create mode 100644 docs/CONFIGURATION.md create mode 100644 docs/INSTALLATION.md create mode 100755 quickstart.sh create mode 100755 scripts/configure-iscsi.sh create mode 100755 scripts/install-mhvtl.sh create mode 100755 scripts/post-install.sh create mode 100644 systemd/mhvtl.service diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e6ee2b0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +*.iso +*.img +iso/ +*.log +*.tmp +*~ +.DS_Store +*.swp +*.swo +/build/work/ +/build/chroot/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..4fcbe34 --- /dev/null +++ b/README.md @@ -0,0 +1,109 @@ +# VTL Linux Distro + +An opinionated Linux distribution specifically designed for Virtual Tape Library (VTL) operations using mhvtl with iSCSI connectivity. + +## Features + +- **mhvtl Integration**: Pre-configured virtual tape library with multiple tape drives and media changer +- **iSCSI Target**: Network-based storage connectivity for Linux and Windows clients +- **Optimized Performance**: Tuned kernel parameters for tape operations +- **Easy Deployment**: Automated installation and configuration scripts +- **Minimal Footprint**: Stripped-down base system focused on VTL operations + +## Architecture + +``` +┌─────────────────────────────────────┐ +│ VTL Linux Distro (Server) │ +│ ┌──────────────────────────────┐ │ +│ │ mhvtl │ │ +│ │ - Virtual Tape Drives │ │ +│ │ - Media Changer │ │ +│ │ - Tape Media Management │ │ +│ └──────────────────────────────┘ │ +│ ┌──────────────────────────────┐ │ +│ │ iSCSI Target (tgt) │ │ +│ │ - Network Block Devices │ │ +│ │ - Multi-client Support │ │ +│ └──────────────────────────────┘ │ +└─────────────────────────────────────┘ + │ + │ iSCSI (IP Network) + │ + ┌──────┴──────┐ + │ │ +┌───▼────┐ ┌───▼────┐ +│ Linux │ │Windows │ +│ Client │ │ Client │ +└────────┘ └────────┘ +``` + +## Directory Structure + +``` +/vtl/ +├── build/ # Build scripts and configurations +├── config/ # System configuration files +├── scripts/ # Installation and management scripts +├── systemd/ # Systemd service files +├── docs/ # Documentation +└── iso/ # ISO build output +``` + +## Quick Start + +### Building the ISO + +```bash +cd /vtl +sudo ./build/build-iso.sh +``` + +### Installation + +1. Boot from the generated ISO +2. Follow the installation prompts +3. Configure network settings +4. Set up iSCSI targets and mhvtl devices + +### Connecting Clients + +**Linux Client:** +```bash +iscsiadm -m discovery -t st -p :3260 +iscsiadm -m node --login +``` + +**Windows Client:** +```powershell +iscsicli QAddTargetPortal +iscsicli ListTargets +iscsicli LoginTarget +``` + +## Configuration + +### mhvtl Configuration +- Default library: `/etc/mhvtl/` +- Tape storage: `/opt/mhvtl/` +- Supported drives: LTO-5, LTO-6, LTO-7, LTO-8 + +### iSCSI Configuration +- Target configuration: `/etc/tgt/conf.d/` +- Default port: 3260 +- Authentication: CHAP supported + +## Requirements + +- x86_64 architecture +- Minimum 2GB RAM +- 50GB+ storage for tape media +- Network interface for iSCSI + +## License + +MIT License + +## Support + +For issues and questions, please refer to the documentation in `/vtl/docs/` diff --git a/build/build-iso.sh b/build/build-iso.sh new file mode 100755 index 0000000..1d41c4d --- /dev/null +++ b/build/build-iso.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +ISO_DIR="$PROJECT_ROOT/iso" +BUILD_DIR="$PROJECT_ROOT/build" +WORK_DIR="/tmp/vtl-build" + +DISTRO_NAME="VTL-Linux" +DISTRO_VERSION="1.0" +ISO_NAME="${DISTRO_NAME}-${DISTRO_VERSION}-x86_64.iso" + +echo "==========================================" +echo " VTL Linux Distro Builder" +echo " Version: $DISTRO_VERSION" +echo "==========================================" +echo "" + +if [ "$EUID" -ne 0 ]; then + echo "Error: This script must be run as root" + exit 1 +fi + +echo "[1/8] Checking dependencies..." +REQUIRED_PACKAGES="debootstrap squashfs-tools xorriso isolinux syslinux-common" +for pkg in $REQUIRED_PACKAGES; do + if ! dpkg -l | grep -q "^ii $pkg"; then + echo "Installing $pkg..." + apt-get update -qq + apt-get install -y $pkg + fi +done + +echo "[2/8] Cleaning previous build..." +rm -rf "$WORK_DIR" +mkdir -p "$WORK_DIR"/{chroot,iso/{live,isolinux}} + +echo "[3/8] Creating base system with debootstrap..." +debootstrap --arch=amd64 --variant=minbase bookworm "$WORK_DIR/chroot" http://deb.debian.org/debian/ + +echo "[4/8] Configuring chroot environment..." +mount --bind /dev "$WORK_DIR/chroot/dev" +mount --bind /dev/pts "$WORK_DIR/chroot/dev/pts" +mount --bind /proc "$WORK_DIR/chroot/proc" +mount --bind /sys "$WORK_DIR/chroot/sys" + +cat > "$WORK_DIR/chroot/etc/apt/sources.list" << EOF +deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware +deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware +deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware +EOF + +echo "[5/8] Installing VTL packages in chroot..." +chroot "$WORK_DIR/chroot" /bin/bash << 'CHROOT_EOF' +export DEBIAN_FRONTEND=noninteractive +apt-get update +apt-get install -y \ + linux-image-amd64 \ + live-boot \ + systemd-sysv \ + network-manager \ + openssh-server \ + sudo \ + vim \ + curl \ + wget \ + net-tools \ + iproute2 \ + iptables \ + sg3-utils \ + lsscsi \ + tgt \ + open-iscsi \ + build-essential \ + git \ + zlib1g-dev \ + libibverbs-dev \ + libconfig-dev \ + libssl-dev \ + uuid-dev \ + mtx \ + mt-st \ + lsscsi + +apt-get clean +rm -rf /var/lib/apt/lists/* + +echo "vtl-linux" > /etc/hostname + +cat > /etc/hosts << EOF +127.0.0.1 localhost +127.0.1.1 vtl-linux +EOF + +useradd -m -s /bin/bash -G sudo vtladmin +echo "vtladmin:vtladmin" | chpasswd +echo "root:vtlroot" | chpasswd + +systemctl enable NetworkManager +systemctl enable ssh +systemctl enable tgt + +mkdir -p /opt/mhvtl +mkdir -p /etc/mhvtl + +CHROOT_EOF + +echo "[6/8] Copying configuration files..." +cp -r "$PROJECT_ROOT/config/"* "$WORK_DIR/chroot/tmp/" 2>/dev/null || true +cp -r "$PROJECT_ROOT/scripts/"* "$WORK_DIR/chroot/usr/local/bin/" 2>/dev/null || true +cp -r "$PROJECT_ROOT/systemd/"* "$WORK_DIR/chroot/etc/systemd/system/" 2>/dev/null || true + +echo "[7/8] Creating squashfs filesystem..." +mksquashfs "$WORK_DIR/chroot" "$WORK_DIR/iso/live/filesystem.squashfs" -e boot -comp xz + +cp "$WORK_DIR/chroot/boot"/vmlinuz-* "$WORK_DIR/iso/live/vmlinuz" +cp "$WORK_DIR/chroot/boot"/initrd.img-* "$WORK_DIR/iso/live/initrd" + +cat > "$WORK_DIR/iso/isolinux/isolinux.cfg" << 'EOF' +UI menu.c32 +PROMPT 0 +TIMEOUT 100 +DEFAULT vtl-linux + +MENU TITLE VTL Linux Boot Menu + +LABEL vtl-linux + MENU LABEL ^Start VTL Linux + KERNEL /live/vmlinuz + APPEND initrd=/live/initrd boot=live quiet splash + +LABEL vtl-linux-safe + MENU LABEL Start VTL Linux (^Safe Mode) + KERNEL /live/vmlinuz + APPEND initrd=/live/initrd boot=live quiet splash nomodeset + +LABEL vtl-linux-install + MENU LABEL ^Install VTL Linux to Disk + KERNEL /live/vmlinuz + APPEND initrd=/live/initrd boot=live quiet splash toram +EOF + +cp /usr/lib/ISOLINUX/isolinux.bin "$WORK_DIR/iso/isolinux/" +cp /usr/lib/syslinux/modules/bios/*.c32 "$WORK_DIR/iso/isolinux/" + +echo "[8/8] Creating ISO image..." +xorriso -as mkisofs \ + -iso-level 3 \ + -full-iso9660-filenames \ + -volid "${DISTRO_NAME}" \ + -eltorito-boot isolinux/isolinux.bin \ + -eltorito-catalog isolinux/boot.cat \ + -no-emul-boot \ + -boot-load-size 4 \ + -boot-info-table \ + -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ + -output "$ISO_DIR/$ISO_NAME" \ + "$WORK_DIR/iso" + +echo "" +echo "==========================================" +echo " Build Complete!" +echo "==========================================" +echo "ISO Location: $ISO_DIR/$ISO_NAME" +echo "ISO Size: $(du -h "$ISO_DIR/$ISO_NAME" | cut -f1)" +echo "" +echo "Cleaning up..." +umount "$WORK_DIR/chroot/dev/pts" 2>/dev/null || true +umount "$WORK_DIR/chroot/dev" 2>/dev/null || true +umount "$WORK_DIR/chroot/proc" 2>/dev/null || true +umount "$WORK_DIR/chroot/sys" 2>/dev/null || true +rm -rf "$WORK_DIR" + +echo "Done!" diff --git a/config/sysctl-vtl.conf b/config/sysctl-vtl.conf new file mode 100644 index 0000000..ccdf382 --- /dev/null +++ b/config/sysctl-vtl.conf @@ -0,0 +1,17 @@ +net.core.rmem_max = 134217728 +net.core.wmem_max = 134217728 +net.core.rmem_default = 16777216 +net.core.wmem_default = 16777216 +net.ipv4.tcp_rmem = 4096 87380 67108864 +net.ipv4.tcp_wmem = 4096 65536 67108864 +net.ipv4.tcp_congestion_control = cubic +net.ipv4.tcp_mtu_probing = 1 +net.core.netdev_max_backlog = 5000 +net.ipv4.tcp_no_metrics_save = 1 + +vm.swappiness = 10 +vm.dirty_ratio = 15 +vm.dirty_background_ratio = 5 + +kernel.sched_migration_cost_ns = 5000000 +kernel.sched_autogroup_enabled = 0 diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md new file mode 100644 index 0000000..cd47c77 --- /dev/null +++ b/docs/ARCHITECTURE.md @@ -0,0 +1,299 @@ +# VTL Linux - Architecture & Design + +## Overview + +VTL Linux is an opinionated Linux distribution built specifically for Virtual Tape Library operations. It combines mhvtl (virtual tape library) with iSCSI target capabilities to provide enterprise-grade tape backup infrastructure over IP networks. + +## Design Philosophy + +### Opinionated Choices + +1. **Debian-based**: Uses Debian Bookworm for stability and long-term support +2. **Minimal footprint**: Only essential packages included +3. **Pre-configured**: Ready-to-use mhvtl and iSCSI setup out of the box +4. **Performance-tuned**: Optimized kernel parameters for tape operations +5. **Network-first**: Designed for iSCSI connectivity from day one + +### Target Use Cases + +- Enterprise backup infrastructure +- Backup software testing and development +- Tape library simulation +- Disaster recovery testing +- Training environments +- Cost-effective alternative to physical tape libraries + +## System Architecture + +``` +┌─────────────────────────────────────────────────────────────┐ +│ VTL Linux Host │ +│ │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ Kernel Space │ │ +│ │ ┌────────────────────────────────────────────────┐ │ │ +│ │ │ mhvtl Kernel Module │ │ │ +│ │ │ - SCSI Target Framework │ │ │ +│ │ │ - Virtual Device Emulation │ │ │ +│ │ └────────────────────────────────────────────────┘ │ │ +│ │ ┌────────────────────────────────────────────────┐ │ │ +│ │ │ SCSI Generic (sg) Driver │ │ │ +│ │ └────────────────────────────────────────────────┘ │ │ +│ └──────────────────────────────────────────────────────┘ │ +│ │ │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ User Space │ │ +│ │ ┌────────────────────────────────────────────────┐ │ │ +│ │ │ mhvtl Daemons │ │ │ +│ │ │ - vtltape (tape drive emulation) │ │ │ +│ │ │ - vtllibrary (media changer emulation) │ │ │ +│ │ └────────────────────────────────────────────────┘ │ │ +│ │ ┌────────────────────────────────────────────────┐ │ │ +│ │ │ iSCSI Target (tgt) │ │ │ +│ │ │ - Target management │ │ │ +│ │ │ - LUN mapping │ │ │ +│ │ │ - Authentication (CHAP) │ │ │ +│ │ └────────────────────────────────────────────────┘ │ │ +│ │ ┌────────────────────────────────────────────────┐ │ │ +│ │ │ Storage Backend │ │ │ +│ │ │ /opt/mhvtl/ (tape data files) │ │ │ +│ │ └────────────────────────────────────────────────┘ │ │ +│ └──────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ + │ + │ TCP/IP (iSCSI Protocol) + │ Port 3260 + │ + ┌─────────────────┴─────────────────┐ + │ │ +┌───────▼────────┐ ┌────────▼───────┐ +│ Linux Client │ │ Windows Client │ +│ │ │ │ +│ ┌──────────┐ │ │ ┌──────────┐ │ +│ │ iSCSI │ │ │ │ iSCSI │ │ +│ │Initiator │ │ │ │Initiator │ │ +│ └──────────┘ │ │ └──────────┘ │ +│ ┌──────────┐ │ │ ┌──────────┐ │ +│ │ Backup │ │ │ │ Backup │ │ +│ │ Software │ │ │ │ Software │ │ +│ │ (Bacula, │ │ │ │ (Veeam, │ │ +│ │ Amanda) │ │ │ │ Backup │ │ +│ └──────────┘ │ │ │ Exec) │ │ +└────────────────┘ │ └──────────┘ │ + └────────────────┘ +``` + +## Component Details + +### mhvtl (Virtual Tape Library) + +**Purpose**: Emulates physical tape drives and media changers + +**Components**: +- Kernel module: Provides SCSI target framework +- vtltape daemon: Emulates tape drive behavior +- vtllibrary daemon: Emulates robotic media changer +- Configuration files: Define virtual devices and media + +**Default Configuration**: +- 1x STK L700 library (media changer) +- 4x IBM LTO-5/6 tape drives +- 20x LTO-5 tape cartridges +- Compression enabled (LZO algorithm) + +**Storage**: +- Tape data stored as files in `/opt/mhvtl/` +- Each tape is a separate file +- Supports multiple tape formats (LTO-3 through LTO-8) + +### iSCSI Target (tgt) + +**Purpose**: Exports SCSI devices over IP network + +**Features**: +- Multi-target support +- CHAP authentication +- Access control lists +- Performance optimization + +**Configuration**: +- Exports mhvtl SCSI devices as iSCSI LUNs +- Separate targets for each tape drive +- Dedicated target for media changer +- Configurable authentication + +### Network Layer + +**Protocol**: iSCSI (SCSI over TCP/IP) +**Port**: 3260 (standard iSCSI port) +**Authentication**: CHAP (Challenge-Handshake Authentication Protocol) + +**Benefits**: +- No physical tape hardware required +- Remote access over LAN/WAN +- Multiple simultaneous clients +- Standard protocol support + +## Data Flow + +### Write Operation (Backup) + +1. Backup software on client initiates write to tape +2. iSCSI initiator sends SCSI commands over network +3. iSCSI target receives commands on port 3260 +4. Commands forwarded to mhvtl SCSI device +5. vtltape daemon processes write commands +6. Data compressed (if enabled) and written to file in `/opt/mhvtl/` +7. Acknowledgment sent back through iSCSI to client + +### Read Operation (Restore) + +1. Backup software requests tape mount +2. iSCSI sends media changer commands +3. vtllibrary daemon simulates robotic arm movement +4. Virtual tape "loaded" into virtual drive +5. Read commands processed by vtltape +6. Data decompressed and sent via iSCSI to client + +## Performance Considerations + +### Optimizations + +1. **Kernel Parameters**: + - Increased network buffers + - TCP tuning for throughput + - Reduced swappiness + - I/O scheduler optimization + +2. **Compression**: + - LZO compression (fast, good ratio) + - Configurable per drive + - Typical 3:1 compression ratio + +3. **Network**: + - Jumbo frames support + - TCP window scaling + - Congestion control tuning + +### Bottlenecks + +- Network bandwidth (1Gbps recommended minimum) +- Disk I/O for tape storage +- CPU for compression/decompression +- Memory for buffering + +## Security + +### Authentication + +- CHAP authentication for iSCSI +- Username/password per target +- Configurable initiator ACLs + +### Network Security + +- Firewall rules (port 3260) +- Optional VPN/IPsec for WAN +- Network segmentation recommended + +### Access Control + +- User permissions on tape storage +- Systemd service isolation +- SELinux/AppArmor support (optional) + +## Scalability + +### Vertical Scaling + +- Add more virtual drives (up to 16 per library) +- Increase tape media count +- Larger storage backend +- More CPU/RAM for compression + +### Horizontal Scaling + +- Multiple VTL instances +- Load balancing across servers +- Distributed storage backend +- High availability clustering (future) + +## Monitoring & Management + +### System Monitoring + +- systemd service status +- SCSI device enumeration +- iSCSI target status +- Storage utilization + +### Tools Provided + +- `vtl-status`: Comprehensive system status +- `lsscsi`: SCSI device listing +- `mtx`: Media changer control +- `tgt-admin`: iSCSI target management + +### Logging + +- systemd journal for all services +- mhvtl debug logging (configurable) +- iSCSI connection logs +- Kernel messages for SCSI events + +## Future Enhancements + +### Planned Features + +- Web-based management interface +- Automated tape rotation policies +- Replication to cloud storage +- High availability clustering +- Performance metrics dashboard +- Tape encryption support +- Multi-tenancy support + +### Integration Opportunities + +- Prometheus metrics export +- Grafana dashboards +- Ansible playbooks +- Docker containerization +- Kubernetes operators + +## Comparison with Physical Tape + +### Advantages + +- No hardware costs +- Instant provisioning +- Easy scaling +- Remote management +- No mechanical failures +- Faster seeks +- Snapshot/backup capability + +### Limitations + +- Not suitable for long-term archival (use real tape) +- Dependent on disk reliability +- Network latency vs. direct attach +- No physical off-site storage +- Software emulation overhead + +## Best Practices + +1. **Storage**: Use dedicated disk/partition for `/opt/mhvtl/` +2. **Network**: Dedicated network interface for iSCSI traffic +3. **Backup**: Regular backup of VTL configuration and metadata +4. **Monitoring**: Set up alerts for disk space and service status +5. **Security**: Change default passwords immediately +6. **Testing**: Verify backup/restore operations regularly +7. **Documentation**: Maintain inventory of virtual tapes and contents + +## References + +- mhvtl project: https://github.com/markh794/mhvtl +- iSCSI specification: RFC 3720 +- SCSI Architecture Model: ANSI INCITS +- Linux SCSI Target Framework documentation diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md new file mode 100644 index 0000000..f9d83eb --- /dev/null +++ b/docs/CONFIGURATION.md @@ -0,0 +1,408 @@ +# VTL Linux - Configuration Examples + +## mhvtl Device Configuration + +### Basic LTO-5 Library Setup + +```conf +VERSION: 5 + +Library: 10 CHANNEL: 00 TARGET: 00 LUN: 00 + Vendor identification: STK + Product identification: L700 + Unit serial number: XYZZY_A + NAA: 10:22:33:44:ab:cd:ef:00 + Home directory: /opt/mhvtl + Backoff: 400 + +Drive: 00 CHANNEL: 00 TARGET: 01 LUN: 00 + Library ID: 10 Slot: 01 + Vendor identification: IBM + Product identification: ULT3580-TD5 + Unit serial number: XYZZY_A1 + NAA: 10:22:33:44:ab:cd:ef:01 + Compression: factor 3 enabled 1 + Compression type: lzo + Backoff: 400 +``` + +### Multi-Drive LTO-6/7/8 Setup + +```conf +VERSION: 5 + +Library: 20 CHANNEL: 00 TARGET: 00 LUN: 00 + Vendor identification: IBM + Product identification: 03584L32 + Unit serial number: XYZZY_B + NAA: 20:22:33:44:ab:cd:ef:00 + Home directory: /opt/mhvtl + Backoff: 400 + +Drive: 10 CHANNEL: 00 TARGET: 01 LUN: 00 + Library ID: 20 Slot: 01 + Vendor identification: IBM + Product identification: ULT3580-TD6 + Unit serial number: XYZZY_B1 + NAA: 20:22:33:44:ab:cd:ef:01 + Compression: factor 3 enabled 1 + Compression type: lzo + Backoff: 400 + +Drive: 11 CHANNEL: 00 TARGET: 02 LUN: 00 + Library ID: 20 Slot: 02 + Vendor identification: IBM + Product identification: ULT3580-TD7 + Unit serial number: XYZZY_B2 + NAA: 20:22:33:44:ab:cd:ef:02 + Compression: factor 3 enabled 1 + Compression type: lzo + Backoff: 400 + +Drive: 12 CHANNEL: 00 TARGET: 03 LUN: 00 + Library ID: 20 Slot: 03 + Vendor identification: IBM + Product identification: ULT3580-TD8 + Unit serial number: XYZZY_B3 + NAA: 20:22:33:44:ab:cd:ef:03 + Compression: factor 3 enabled 1 + Compression type: lzo + Backoff: 400 +``` + +## iSCSI Target Configuration + +### Basic Target with CHAP Authentication + +```conf + + backing-store /dev/sg1 + initiator-address ALL + incominguser vtl-user vtl-password + write-cache on + +``` + +### Target with IP Restrictions + +```conf + + backing-store /dev/sg1 + initiator-address 192.168.1.0/24 + initiator-address 10.0.0.50 + incominguser backup-server secure-password-here + write-cache on + +``` + +### Multiple Targets for Different Clients + +```conf + + backing-store /dev/sg1 + initiator-address 192.168.1.100 + incominguser client1 password1 + write-cache on + + + + backing-store /dev/sg2 + initiator-address 192.168.1.101 + incominguser client2 password2 + write-cache on + + + + backing-store /dev/sg0 + initiator-address 192.168.1.0/24 + incominguser vtl-admin admin-password + device-type changer + +``` + +### Target with Mutual CHAP + +```conf + + backing-store /dev/sg1 + initiator-address 192.168.1.100 + incominguser vtl-user vtl-password + outgoinguser initiator-user initiator-password + write-cache on + +``` + +## Kernel Tuning + +### High-Performance Network Configuration + +```conf +net.core.rmem_max = 268435456 +net.core.wmem_max = 268435456 +net.core.rmem_default = 33554432 +net.core.wmem_default = 33554432 +net.ipv4.tcp_rmem = 4096 87380 134217728 +net.ipv4.tcp_wmem = 4096 65536 134217728 +net.ipv4.tcp_congestion_control = bbr +net.ipv4.tcp_mtu_probing = 1 +net.core.netdev_max_backlog = 10000 +net.ipv4.tcp_no_metrics_save = 1 +net.ipv4.tcp_timestamps = 1 +net.ipv4.tcp_sack = 1 +net.ipv4.tcp_window_scaling = 1 + +net.core.default_qdisc = fq +``` + +### Storage-Optimized Configuration + +```conf +vm.swappiness = 1 +vm.dirty_ratio = 10 +vm.dirty_background_ratio = 3 +vm.vfs_cache_pressure = 50 + +kernel.sched_migration_cost_ns = 5000000 +kernel.sched_autogroup_enabled = 0 +``` + +## Backup Software Integration + +### Bacula Configuration + +```conf +Autochanger { + Name = VTL-Library + Device = Drive-0, Drive-1, Drive-2, Drive-3 + Changer Command = "/usr/lib/bacula/scripts/mtx-changer %c %o %S %a %d" + Changer Device = /dev/sg0 +} + +Device { + Name = Drive-0 + Media Type = LTO-5 + Archive Device = /dev/nst0 + AutomaticMount = yes + AlwaysOpen = yes + RemovableMedia = yes + RandomAccess = no + AutoChanger = yes + Drive Index = 0 + Maximum Spool Size = 10G + Spool Directory = /var/spool/bacula +} + +Device { + Name = Drive-1 + Media Type = LTO-5 + Archive Device = /dev/nst1 + AutomaticMount = yes + AlwaysOpen = yes + RemovableMedia = yes + RandomAccess = no + AutoChanger = yes + Drive Index = 1 + Maximum Spool Size = 10G + Spool Directory = /var/spool/bacula +} +``` + +### Amanda Configuration + +```conf +tapedev "chg-robot:/dev/sg0" +tpchanger "chg-robot" +changerfile "/var/lib/amanda/vtl/changer" +changerdev "/dev/sg0" + +tapetype LTO-5 +define tapetype LTO-5 { + comment "LTO-5 Virtual Tape" + length 1500000 mbytes + filemark 0 kbytes + speed 140000 kps +} + +labelstr "^VTL-[0-9][0-9]*$" +autolabel "VTL-%%%" EMPTY VOLUME_ERROR +``` + +### Veritas Backup Exec (Windows) + +1. Configure iSCSI initiator to connect to VTL server +2. In Backup Exec, go to Storage → Configure Storage +3. Select "Tape Drive" → "Detect and configure" +4. Backup Exec will auto-detect the tape library +5. Configure media sets and backup jobs + +## Network Configuration Examples + +### Static IP Configuration (NetworkManager) + +```bash +nmcli con add type ethernet con-name vtl-network ifname eth0 \ + ipv4.addresses 192.168.1.100/24 \ + ipv4.gateway 192.168.1.1 \ + ipv4.dns "8.8.8.8,8.8.4.4" \ + ipv4.method manual + +nmcli con up vtl-network +``` + +### Bonded Network Interface + +```bash +nmcli con add type bond con-name bond0 ifname bond0 mode active-backup +nmcli con add type ethernet con-name bond0-slave1 ifname eth0 master bond0 +nmcli con add type ethernet con-name bond0-slave2 ifname eth1 master bond0 +nmcli con mod bond0 ipv4.addresses 192.168.1.100/24 \ + ipv4.gateway 192.168.1.1 \ + ipv4.method manual +nmcli con up bond0 +``` + +### VLAN Configuration + +```bash +nmcli con add type vlan con-name vlan100 ifname eth0.100 dev eth0 id 100 +nmcli con mod vlan100 ipv4.addresses 192.168.100.100/24 \ + ipv4.method manual +nmcli con up vlan100 +``` + +## Firewall Configuration + +### UFW (Ubuntu/Debian) + +```bash +ufw allow from 192.168.1.0/24 to any port 3260 proto tcp +ufw allow 22/tcp +ufw enable +``` + +### firewalld (RHEL/CentOS) + +```bash +firewall-cmd --permanent --add-port=3260/tcp +firewall-cmd --permanent --add-service=ssh +firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3260" protocol="tcp" accept' +firewall-cmd --reload +``` + +### iptables + +```bash +iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3260 -j ACCEPT +iptables -A INPUT -p tcp --dport 22 -j ACCEPT +iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT +iptables -A INPUT -j DROP +iptables-save > /etc/iptables/rules.v4 +``` + +## Monitoring Scripts + +### Tape Usage Monitor + +```bash +#!/bin/bash + +MHVTL_DIR="/opt/mhvtl" +THRESHOLD=80 + +usage=$(df -h "$MHVTL_DIR" | awk 'NR==2 {print $5}' | sed 's/%//') + +if [ "$usage" -gt "$THRESHOLD" ]; then + echo "WARNING: VTL storage usage at ${usage}%" + echo "Consider adding more disk space or removing old tapes" +fi + +echo "Current tape inventory:" +ls -lh "$MHVTL_DIR"/*.data 2>/dev/null | wc -l +``` + +### iSCSI Connection Monitor + +```bash +#!/bin/bash + +echo "Active iSCSI connections:" +netstat -tn | grep :3260 | grep ESTABLISHED | wc -l + +echo "" +echo "Connection details:" +netstat -tn | grep :3260 | grep ESTABLISHED +``` + +## Systemd Service Customization + +### Custom mhvtl Service with Resource Limits + +```ini +[Unit] +Description=mhvtl Virtual Tape Library +After=network.target + +[Service] +Type=forking +ExecStartPre=/sbin/modprobe mhvtl +ExecStart=/usr/bin/vtltape +ExecStart=/usr/bin/vtllibrary +ExecStop=/usr/bin/killall vtltape vtllibrary +Restart=on-failure +RestartSec=5s + +CPUQuota=50% +MemoryLimit=2G +IOWeight=500 + +[Install] +WantedBy=multi-user.target +``` + +### Auto-restart on Failure + +```ini +[Service] +Restart=always +RestartSec=10s +StartLimitInterval=200 +StartLimitBurst=5 +``` + +## Maintenance Scripts + +### Tape Cleanup Script + +```bash +#!/bin/bash + +MHVTL_DIR="/opt/mhvtl" +DAYS_OLD=90 + +echo "Removing tapes older than $DAYS_OLD days..." +find "$MHVTL_DIR" -name "*.data" -mtime +$DAYS_OLD -delete + +echo "Remaining tapes:" +ls -lh "$MHVTL_DIR"/*.data 2>/dev/null | wc -l +``` + +### Configuration Backup Script + +```bash +#!/bin/bash + +BACKUP_DIR="/backup/vtl-config" +DATE=$(date +%Y%m%d-%H%M%S) + +mkdir -p "$BACKUP_DIR" + +tar -czf "$BACKUP_DIR/vtl-config-$DATE.tar.gz" \ + /etc/mhvtl/ \ + /etc/tgt/conf.d/ \ + /etc/sysctl.d/99-vtl.conf \ + /etc/systemd/system/mhvtl.service + +echo "Backup saved to: $BACKUP_DIR/vtl-config-$DATE.tar.gz" + +find "$BACKUP_DIR" -name "vtl-config-*.tar.gz" -mtime +30 -delete +``` diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md new file mode 100644 index 0000000..468b874 --- /dev/null +++ b/docs/INSTALLATION.md @@ -0,0 +1,276 @@ +# VTL Linux - Installation Guide + +## Prerequisites + +- x86_64 compatible hardware +- Minimum 2GB RAM (4GB+ recommended) +- 50GB+ storage for tape media +- Network interface card +- USB drive or CD/DVD for installation media + +## Installation Methods + +### Method 1: Live Boot (Testing) + +1. Write ISO to USB drive: + ```bash + dd if=VTL-Linux-1.0-x86_64.iso of=/dev/sdX bs=4M status=progress + sync + ``` + +2. Boot from USB drive + +3. System will boot into live environment with VTL services + +### Method 2: Full Installation + +1. Boot from ISO + +2. Select "Install VTL Linux to Disk" from boot menu + +3. Follow installation prompts: + - Select target disk + - Configure network + - Set hostname + - Create user account + +4. Reboot after installation + +## Post-Installation Configuration + +### 1. Network Setup + +Configure static IP (recommended for iSCSI): + +```bash +sudo nmcli con mod "Wired connection 1" \ + ipv4.addresses 192.168.1.100/24 \ + ipv4.gateway 192.168.1.1 \ + ipv4.dns "8.8.8.8 8.8.4.4" \ + ipv4.method manual + +sudo nmcli con up "Wired connection 1" +``` + +### 2. Change Default Passwords + +```bash +sudo passwd root +sudo passwd vtladmin +``` + +### 3. Configure mhvtl + +Edit device configuration: +```bash +sudo vim /etc/mhvtl/device.conf +``` + +Restart mhvtl service: +```bash +sudo systemctl restart mhvtl +``` + +### 4. Configure iSCSI Targets + +Edit target configuration: +```bash +sudo vim /etc/tgt/conf.d/vtl-targets.conf +``` + +Update credentials: +```bash +incominguser +``` + +Restart tgt service: +```bash +sudo systemctl restart tgt +``` + +### 5. Verify Installation + +Check system status: +```bash +vtl-status +``` + +List SCSI devices: +```bash +lsscsi -g +``` + +Check library status: +```bash +mtx -f /dev/sg0 status +``` + +View iSCSI targets: +```bash +tgt-admin --show +``` + +## Client Configuration + +### Linux Client + +1. Install iSCSI initiator: + ```bash + sudo apt-get install open-iscsi + ``` + +2. Discover targets: + ```bash + sudo iscsiadm -m discovery -t st -p :3260 + ``` + +3. Login to target: + ```bash + sudo iscsiadm -m node --login + ``` + +4. Configure CHAP authentication (if required): + ```bash + sudo iscsiadm -m node -T -p :3260 \ + --op=update --name node.session.auth.authmethod --value=CHAP + + sudo iscsiadm -m node -T -p :3260 \ + --op=update --name node.session.auth.username --value=vtl-user + + sudo iscsiadm -m node -T -p :3260 \ + --op=update --name node.session.auth.password --value=vtl-password + ``` + +5. Verify connection: + ```bash + lsscsi + ``` + +### Windows Client + +1. Open iSCSI Initiator (Control Panel → Administrative Tools) + +2. Go to Discovery tab, click "Discover Portal" + +3. Enter VTL server IP address and port 3260 + +4. Go to Targets tab, select discovered target + +5. Click "Connect" + +6. For CHAP authentication: + - Click "Advanced" + - Enable CHAP login + - Enter username: vtl-user + - Enter password: vtl-password + +7. Verify in Device Manager under "Tape drives" + +## Backup Software Configuration + +### Bacula + +```bash +Device { + Name = VTL-Drive-0 + Media Type = LTO-5 + Archive Device = /dev/nst0 + AutomaticMount = yes + AlwaysOpen = yes + RemovableMedia = yes + RandomAccess = no + AutoChanger = yes +} + +Autochanger { + Name = VTL-Library + Device = VTL-Drive-0, VTL-Drive-1, VTL-Drive-2, VTL-Drive-3 + Changer Command = "/usr/lib/bacula/scripts/mtx-changer %c %o %S %a %d" + Changer Device = /dev/sg0 +} +``` + +### Amanda + +```bash +tapedev "chg-robot:/dev/sg0" +tpchanger "chg-robot" +changerfile "/var/lib/amanda/vtl/changer" +``` + +### Veeam (Windows) + +1. Add tape server in Veeam console +2. Rescan tape infrastructure +3. VTL devices should appear automatically +4. Configure media pools and backup jobs + +## Troubleshooting + +### mhvtl not starting + +```bash +sudo modprobe mhvtl +sudo systemctl status mhvtl +sudo journalctl -u mhvtl -n 50 +``` + +### iSCSI connection issues + +```bash +sudo systemctl status tgt +sudo tgt-admin --show +sudo netstat -tlnp | grep 3260 +``` + +### SCSI devices not visible + +```bash +sudo modprobe sg +lsmod | grep mhvtl +dmesg | grep -i scsi +``` + +### Performance issues + +Check system resources: +```bash +htop +iostat -x 1 +iotop +``` + +Adjust kernel parameters in `/etc/sysctl.d/99-vtl.conf` + +## Maintenance + +### Adding tape media + +```bash +sudo /usr/bin/mktape -l 10 -s 100 -m /opt/mhvtl -t LTO5 -d 10 +sudo systemctl restart mhvtl +``` + +### Backup configuration + +```bash +sudo tar -czf vtl-config-backup.tar.gz \ + /etc/mhvtl/ \ + /etc/tgt/conf.d/ \ + /etc/sysctl.d/99-vtl.conf +``` + +### Update system + +```bash +sudo apt-get update +sudo apt-get upgrade +sudo reboot +``` + +## Support + +For issues and questions: +- Check logs: `journalctl -xe` +- Review documentation in `/vtl/docs/` +- mhvtl documentation: https://github.com/markh794/mhvtl diff --git a/quickstart.sh b/quickstart.sh new file mode 100755 index 0000000..2861fec --- /dev/null +++ b/quickstart.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +echo "==========================================" +echo " VTL Linux - Quick Start Script" +echo "==========================================" +echo "" + +cat << 'EOF' +This script will help you get started with VTL Linux. + +Prerequisites: + - Debian-based Linux system (for building) + - Root/sudo access + - 10GB+ free disk space + - Internet connection + +What would you like to do? + +1) Build VTL Linux ISO +2) Install mhvtl on current system +3) Configure iSCSI targets +4) Run post-install setup +5) Check VTL status +6) Show documentation +7) Exit + +EOF + +read -p "Enter your choice [1-7]: " choice + +case $choice in + 1) + echo "" + echo "Building VTL Linux ISO..." + echo "This will take 15-30 minutes depending on your system." + read -p "Continue? (y/n): " confirm + if [ "$confirm" = "y" ]; then + cd /vtl + sudo bash build/build-iso.sh + fi + ;; + 2) + echo "" + echo "Installing mhvtl..." + read -p "Continue? (y/n): " confirm + if [ "$confirm" = "y" ]; then + sudo bash /vtl/scripts/install-mhvtl.sh + fi + ;; + 3) + echo "" + echo "Configuring iSCSI targets..." + read -p "Continue? (y/n): " confirm + if [ "$confirm" = "y" ]; then + sudo bash /vtl/scripts/configure-iscsi.sh + fi + ;; + 4) + echo "" + echo "Running post-install setup..." + read -p "Continue? (y/n): " confirm + if [ "$confirm" = "y" ]; then + sudo bash /vtl/scripts/post-install.sh + fi + ;; + 5) + echo "" + if command -v vtl-status &> /dev/null; then + sudo vtl-status + else + echo "vtl-status command not found. Run post-install setup first." + fi + ;; + 6) + echo "" + echo "Available documentation:" + echo " - README: /vtl/README.md" + echo " - Installation Guide: /vtl/docs/INSTALLATION.md" + echo " - Architecture: /vtl/docs/ARCHITECTURE.md" + echo "" + read -p "Open README? (y/n): " confirm + if [ "$confirm" = "y" ]; then + less /vtl/README.md + fi + ;; + 7) + echo "Goodbye!" + exit 0 + ;; + *) + echo "Invalid choice. Please run the script again." + exit 1 + ;; +esac + +echo "" +echo "Done!" diff --git a/scripts/configure-iscsi.sh b/scripts/configure-iscsi.sh new file mode 100755 index 0000000..d08bbb2 --- /dev/null +++ b/scripts/configure-iscsi.sh @@ -0,0 +1,104 @@ +#!/bin/bash + +set -e + +echo "==========================================" +echo " iSCSI Target Configuration Script" +echo "==========================================" +echo "" + +if [ "$EUID" -ne 0 ]; then + echo "Error: This script must be run as root" + exit 1 +fi + +TGT_CONFIG_DIR="/etc/tgt/conf.d" +ISCSI_IQN_BASE="iqn.2024-01.com.vtl-linux" + +echo "[1/4] Installing iSCSI target software..." +apt-get update +apt-get install -y tgt + +echo "[2/4] Configuring iSCSI targets..." +mkdir -p "$TGT_CONFIG_DIR" + +cat > "$TGT_CONFIG_DIR/vtl-targets.conf" << 'EOF' + + backing-store /dev/sg1 + initiator-address ALL + incominguser vtl-user vtl-password + write-cache on + + + + backing-store /dev/sg2 + initiator-address ALL + incominguser vtl-user vtl-password + write-cache on + + + + backing-store /dev/sg3 + initiator-address ALL + incominguser vtl-user vtl-password + write-cache on + + + + backing-store /dev/sg4 + initiator-address ALL + incominguser vtl-user vtl-password + write-cache on + + + + backing-store /dev/sg0 + initiator-address ALL + incominguser vtl-user vtl-password + device-type changer + +EOF + +echo "[3/4] Configuring firewall..." +if command -v ufw &> /dev/null; then + ufw allow 3260/tcp + ufw reload +elif command -v firewall-cmd &> /dev/null; then + firewall-cmd --permanent --add-port=3260/tcp + firewall-cmd --reload +else + iptables -A INPUT -p tcp --dport 3260 -j ACCEPT + iptables-save > /etc/iptables/rules.v4 +fi + +echo "[4/4] Starting iSCSI target service..." +systemctl enable tgt +systemctl restart tgt + +sleep 2 + +echo "" +echo "==========================================" +echo " iSCSI Target Configuration Complete!" +echo "==========================================" +echo "" +echo "Available targets:" +tgt-admin --show +echo "" +echo "Connection information:" +echo " - Port: 3260" +echo " - IQN Base: $ISCSI_IQN_BASE" +echo " - Username: vtl-user" +echo " - Password: vtl-password" +echo "" +echo "Client connection examples:" +echo "" +echo "Linux:" +echo " iscsiadm -m discovery -t st -p :3260" +echo " iscsiadm -m node --login" +echo "" +echo "Windows:" +echo " iscsicli QAddTargetPortal " +echo " iscsicli ListTargets" +echo " iscsicli LoginTarget T * * * * * * * * * * * * * * * " +echo "" diff --git a/scripts/install-mhvtl.sh b/scripts/install-mhvtl.sh new file mode 100755 index 0000000..676386e --- /dev/null +++ b/scripts/install-mhvtl.sh @@ -0,0 +1,133 @@ +#!/bin/bash + +set -e + +echo "==========================================" +echo " mhvtl Installation Script" +echo "==========================================" +echo "" + +if [ "$EUID" -ne 0 ]; then + echo "Error: This script must be run as root" + exit 1 +fi + +MHVTL_VERSION="1.6-7" +MHVTL_DIR="/opt/mhvtl" +MHVTL_CONFIG="/etc/mhvtl" + +echo "[1/5] Installing build dependencies..." +apt-get update +apt-get install -y \ + build-essential \ + git \ + zlib1g-dev \ + libibverbs-dev \ + libconfig-dev \ + libssl-dev \ + uuid-dev \ + linux-headers-$(uname -r) \ + mt-st \ + mtx \ + lsscsi \ + sg3-utils + +echo "[2/5] Downloading mhvtl source..." +cd /tmp +if [ -d "mhvtl" ]; then + rm -rf mhvtl +fi +git clone https://github.com/markh794/mhvtl.git +cd mhvtl + +echo "[3/5] Building mhvtl..." +make + +echo "[4/5] Installing mhvtl..." +make install + +echo "[5/5] Configuring mhvtl..." +mkdir -p "$MHVTL_DIR" +mkdir -p "$MHVTL_CONFIG" + +if [ ! -f "$MHVTL_CONFIG/device.conf" ]; then + cat > "$MHVTL_CONFIG/device.conf" << 'EOF' +VERSION: 5 + +Library: 10 CHANNEL: 00 TARGET: 00 LUN: 00 + Vendor identification: STK + Product identification: L700 + Unit serial number: XYZZY_A + NAA: 10:22:33:44:ab:cd:ef:00 + Home directory: /opt/mhvtl + Backoff: 400 + +Drive: 00 CHANNEL: 00 TARGET: 01 LUN: 00 + Library ID: 10 Slot: 01 + Vendor identification: IBM + Product identification: ULT3580-TD5 + Unit serial number: XYZZY_A1 + NAA: 10:22:33:44:ab:cd:ef:01 + Compression: factor 3 enabled 1 + Compression type: lzo + Backoff: 400 + +Drive: 01 CHANNEL: 00 TARGET: 02 LUN: 00 + Library ID: 10 Slot: 02 + Vendor identification: IBM + Product identification: ULT3580-TD5 + Unit serial number: XYZZY_A2 + NAA: 10:22:33:44:ab:cd:ef:02 + Compression: factor 3 enabled 1 + Compression type: lzo + Backoff: 400 + +Drive: 02 CHANNEL: 00 TARGET: 03 LUN: 00 + Library ID: 10 Slot: 03 + Vendor identification: IBM + Product identification: ULT3580-TD6 + Unit serial number: XYZZY_A3 + NAA: 10:22:33:44:ab:cd:ef:03 + Compression: factor 3 enabled 1 + Compression type: lzo + Backoff: 400 + +Drive: 03 CHANNEL: 00 TARGET: 04 LUN: 00 + Library ID: 10 Slot: 04 + Vendor identification: IBM + Product identification: ULT3580-TD6 + Unit serial number: XYZZY_A4 + NAA: 10:22:33:44:ab:cd:ef:04 + Compression: factor 3 enabled 1 + Compression type: lzo + Backoff: 400 +EOF +fi + +if [ ! -f "$MHVTL_CONFIG/library_contents.10" ]; then + /usr/bin/mktape -l 10 -s 100 -m /opt/mhvtl -t LTO5 -d 20 +fi + +modprobe mhvtl + +systemctl daemon-reload +systemctl enable mhvtl +systemctl start mhvtl + +echo "" +echo "==========================================" +echo " mhvtl Installation Complete!" +echo "==========================================" +echo "" +echo "Configuration:" +echo " - Config directory: $MHVTL_CONFIG" +echo " - Data directory: $MHVTL_DIR" +echo " - Library: STK L700 (ID: 10)" +echo " - Drives: 4x LTO-5/6 drives" +echo " - Media: 20 LTO-5 tapes" +echo "" +echo "Check status:" +echo " systemctl status mhvtl" +echo " lsscsi -g" +echo " mtx -f /dev/sg0 status" +echo "" diff --git a/scripts/post-install.sh b/scripts/post-install.sh new file mode 100755 index 0000000..5026f9b --- /dev/null +++ b/scripts/post-install.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +set -e + +echo "==========================================" +echo " VTL Linux Post-Install Setup" +echo "==========================================" +echo "" + +if [ "$EUID" -ne 0 ]; then + echo "Error: This script must be run as root" + exit 1 +fi + +echo "[1/5] Applying system optimizations..." +if [ -f "/tmp/sysctl-vtl.conf" ]; then + cp /tmp/sysctl-vtl.conf /etc/sysctl.d/99-vtl.conf + sysctl -p /etc/sysctl.d/99-vtl.conf +fi + +echo "[2/5] Installing mhvtl..." +if [ -f "/usr/local/bin/install-mhvtl.sh" ]; then + bash /usr/local/bin/install-mhvtl.sh +else + echo "Warning: mhvtl installation script not found" +fi + +echo "[3/5] Configuring iSCSI targets..." +if [ -f "/usr/local/bin/configure-iscsi.sh" ]; then + bash /usr/local/bin/configure-iscsi.sh +else + echo "Warning: iSCSI configuration script not found" +fi + +echo "[4/5] Setting up monitoring..." +cat > /usr/local/bin/vtl-status << 'EOF' +#!/bin/bash + +echo "==========================================" +echo " VTL System Status" +echo "==========================================" +echo "" + +echo "=== mhvtl Status ===" +systemctl status mhvtl --no-pager | head -n 10 +echo "" + +echo "=== SCSI Devices ===" +lsscsi -g +echo "" + +echo "=== Library Status ===" +if [ -e /dev/sg0 ]; then + mtx -f /dev/sg0 status 2>/dev/null || echo "Library not ready" +fi +echo "" + +echo "=== iSCSI Targets ===" +tgt-admin --show +echo "" + +echo "=== Network Interfaces ===" +ip -br addr +echo "" + +echo "=== Disk Usage ===" +df -h /opt/mhvtl 2>/dev/null || echo "/opt/mhvtl not mounted" +echo "" +EOF + +chmod +x /usr/local/bin/vtl-status + +echo "[5/5] Creating welcome message..." +cat > /etc/motd << 'EOF' + + __ _______ _ _ _ + \ \ / /_ _| | | | (_) + \ \ / / | | | | | | _ _ __ _ ___ __ + \ \/ / | | | | | | | | '_ \| | | \ \/ / + \ / _| |_| |____ | |___| | | | | |_| |> < + \/ |_____|______||_____|_|_| |_|\__,_/_/\_\ + + Virtual Tape Library Distribution v1.0 + +======================================== +Quick Commands: + vtl-status - Show VTL system status + systemctl status mhvtl - Check mhvtl service + lsscsi -g - List SCSI devices + tgt-admin --show - Show iSCSI targets + +Default Credentials: + User: vtladmin / Password: vtladmin + Root: root / Password: vtlroot + +iSCSI Authentication: + Username: vtl-user + Password: vtl-password +======================================== + +EOF + +echo "" +echo "==========================================" +echo " Post-Install Setup Complete!" +echo "==========================================" +echo "" +echo "Next steps:" +echo " 1. Configure network settings" +echo " 2. Change default passwords" +echo " 3. Customize mhvtl configuration in /etc/mhvtl/" +echo " 4. Update iSCSI targets in /etc/tgt/conf.d/" +echo " 5. Run 'vtl-status' to verify setup" +echo "" diff --git a/systemd/mhvtl.service b/systemd/mhvtl.service new file mode 100644 index 0000000..2e10515 --- /dev/null +++ b/systemd/mhvtl.service @@ -0,0 +1,15 @@ +[Unit] +Description=mhvtl Virtual Tape Library +After=network.target + +[Service] +Type=forking +ExecStartPre=/sbin/modprobe mhvtl +ExecStart=/usr/bin/vtltape +ExecStart=/usr/bin/vtllibrary +ExecStop=/usr/bin/killall vtltape vtllibrary +Restart=on-failure +RestartSec=5s + +[Install] +WantedBy=multi-user.target