Browse Source

feat: Add shared network folder (#157)

Kroese 1 năm trước cách đây
mục cha
commit
4e9ac3ef37
5 tập tin đã thay đổi với 78 bổ sung3 xóa
  1. 3 0
      Dockerfile
  2. 1 0
      src/entry.sh
  3. 6 1
      src/install.sh
  4. 5 2
      src/power.sh
  5. 63 0
      src/samba.sh

+ 3 - 0
Dockerfile

@@ -9,7 +9,10 @@ RUN apt-get update \
     && apt-get --no-install-recommends -y install \
         curl \
         7zip \
+        wsdd \
+        samba \
         wimtools \
+        dos2unix \
         cabextract \
         genisoimage \
         libxml2-utils \

+ 1 - 0
src/entry.sh

@@ -12,6 +12,7 @@ cd /run
 . disk.sh       # Initialize disks
 . display.sh    # Initialize graphics
 . network.sh    # Initialize network
+. samba.sh      # Configure samba
 . boot.sh       # Configure boot
 . proc.sh       # Initialize processor
 . power.sh      # Configure shutdown

+ 6 - 1
src/install.sh

@@ -835,11 +835,16 @@ prepareXP() {
           echo "ProductKey=$key"
           echo ""
           echo "[Identification]"
-          echo "JoinWorkgroup"
+          echo "JoinWorkgroup = WORKGROUP"
           echo ""
           echo "[Networking]"
           echo "InstallDefaultComponents=Yes"
           echo ""
+          echo "[URL]"
+          echo "Home_Page = http://www.google.com"
+          echo "Search_Page = http://www.google.com/ie_rsearch.html"
+          echo "AutoConfig = 0"
+          echo ""
           echo "[RegionalSettings]"
           echo "Language=00000409"
           echo ""

+ 5 - 2
src/power.sh

@@ -29,8 +29,8 @@ ready() {
 
   if [ -f "$STORAGE/windows.old" ]; then
     local last
-    local bios="Booting from Hard Disk"
-    last=$(grep "^B.*" "$QEMU_PTY" | tail -1)
+    local bios="Booting from Hard"
+    last=$(grep "^Booting.*" "$QEMU_PTY" | tail -1)
     if [[ "${last,,}" == "${bios,,}"* ]]; then
       return 0
     fi
@@ -74,6 +74,9 @@ finish() {
   pid="/var/run/tpm.pid"
   [ -f "$pid" ] && pKill "$(<"$pid")"
 
+  fKill "wsdd"
+  fKill "smbd"
+
   closeNetwork
 
   sleep 0.5

+ 63 - 0
src/samba.sh

@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+set -Eeuo pipefail
+
+[[ "$DHCP" == [Yy1]* ]] && return 0
+
+SHARE="$STORAGE/shared"
+
+mkdir -p "$SHARE"
+chmod -R 777 "$SHARE"
+
+SAMBA="/etc/samba/smb.conf"
+
+{      echo "[global]"
+        echo "    server string = Dockur"
+        echo "    netbios name = dockur"
+        echo "    workgroup = WORKGROUP"
+        echo "    interfaces = dockerbridge"
+        echo "    bind interfaces only = yes"
+        echo "    security = user"
+        echo "    guest account = nobody"
+        echo "    map to guest = Bad User"
+        echo "    server min protocol = SMB2"
+        echo ""
+        echo "    # disable printing services"
+        echo "    load printers = no"
+        echo "    printing = bsd"
+        echo "    printcap name = /dev/null"
+        echo "    disable spoolss = yes"
+        echo ""
+        echo "[Data]"
+        echo "    path = $SHARE"
+        echo "    comment = Shared"
+        echo "    writable = yes"
+        echo "    guest ok = yes"
+        echo "    guest only = yes"
+        echo "    force user = root"
+        echo "    force group = root"
+} > "$SAMBA"
+
+{      echo "--------------------------------------------------------" 
+        echo " $APP for Docker v$(</run/version)..."
+        echo " For support visit $SUPPORT"
+        echo "--------------------------------------------------------"
+        echo ""
+        echo "Using this folder you can share files with the host machine."
+        echo ""
+        echo "To change the storage location, include the following bind mount in your compose file:"
+        echo ""
+        echo "  volumes:"
+        echo "    - \"/home/user/example:/storage/shared\""
+        echo ""
+        echo "Or in your run command:"
+        echo ""
+        echo "  -v \"/home/user/example:/storage/shared\""
+        echo ""
+        echo "Replace the example path /home/user/example with the desired storage folder."
+        echo ""
+} | unix2dos > "$SHARE/readme.txt"
+
+smbd -D
+wsdd -i dockerbridge -p -n "host.local" &
+
+return 0