欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

梅林固件路由器搭建私有云盘服务

程序员文章站 2024-02-11 14:57:16
...

梅林固件路由器搭建私有云盘服务

1.开放路由器ssh登录

2.ssh登录路由器

3.安装服务

  • 安装entware
vi entware-ngu-setup.sh
# 复制文末脚本内容
chmod +x entware-ngu-setup.sh
  • 更新entware缓存,升级软件
opkg update
opkg upgrade
  • 安装nginx 和 php
opkg install nginx php7-cgi
# 备份nginx配置文件
mv /opt/etc/nginx/nginx.conf /opt/etc/nginx/nginx.conf-orig
# 创建nginx配置文件

cat >> /opt/etc/nginx/nginx.conf << 'EOF'
user nobody;
worker_processes 1;
events {
worker_connections 64;
}
http {
include mime.types;
include /opt/etc/nginx/sites-enabled/*;
default_type application/octet-stream;
server {
listen 82;
server_name localhost;
location / {
root /opt/share/nginx/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /opt/share/nginx/50x.html {
root html;
}
location ~ \.php$ {
root /opt/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
EOF
  • 创建php启动脚本
cat >> /opt/etc/init.d/S80php7-cgi << 'EOF'
#!/bin/sh
ENABLED=yes
PROCS=php-cgi
ARGS="-b 127.0.0.1:9000"
PREARGS="/usr/bin/env PHP_FCGI_CHILDREN=2 PHP_FCGI_MAX_REQUESTS=1000"
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. /opt/etc/init.d/rc.func
EOF
# 增加可执行权限
chmod +x /opt/etc/init.d/S80php7-cgi
  • 修改php doc_root
 sed -i 's|doc_root = "/opt/share/www"|doc_root = "/opt/share/www"\
doc_root = "/opt/share/nginx/html"|g' "/opt/etc/php.ini"
  • 启动nginx和php服务
/opt/etc/init.d/S80nginx start
/opt/etc/init.d/S80php7-cgi start
  • 可道云安装
mkdir /opt/share/nginx/html/disk
wget http://static.kodcloud.com/update/download/kodexplorer4.25.zip
unzip kodexplorer4.25.zip
chmod -R 777 ./*
# 安装依赖
opkg install php7-mod-session php7-mod-json php7-mod-curl php7-mod-exif php7-mod-mbstring php7-mod-ldap php7-mod-gd php7-mod-pdo php7-mod-pdo-mysql php7-mod-xml php7-mod-iconv
/opt/etc/init.d/S80php7-cgi restart
/opt/etc/init.d/S80nginx restart

测试访问

# 打开你浏览器访问
http://192.168.1.1:82/disk/

运营商公网ip配合Aliddns的话可以通过万网绑定域名,通过域名访问。

附录:entware安装脚本

#!/bin/sh

export PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin$PATH

# Author: ryzhov_al
# Adapted by TeHashX / [email protected]
# Version: 2.0

BOLD="\033[1m"
NORM="\033[0m"
INFO="$BOLD Info: $NORM"
ERROR="$BOLD *** Error: $NORM"
WARNING="$BOLD * Warning: $NORM"
INPUT="$BOLD => $NORM"

i=1 # Will count available partitions (+ 1)
cd /tmp || exit

echo -e $INFO This script was created by ryzhov_al and modified by TeHashX.
echo -e $INFO Thanks @zyxmon \& @ryzhov_al for New Generation Entware
echo -e $INFO and @Rmerlin for his awesome firmwares
sleep 2
echo -e $INFO This script will guide you through the Entware-NG installation.
echo -e $INFO Script modifies only \"entware-ng\" folder on the chosen drive,
echo -e $INFO no other data will be touched. Existing installation will be
echo -e $INFO replaced with this one. Also some start scripts will be installed,
echo -e $INFO the old ones will be saved on partition where Entware-NG is installed
echo -e $INFO like /tmp/mnt/sda1/jffs_scripts_backup.tgz
echo

if [ ! -d /jffs/scripts ] ; then
  echo -e "$ERROR Please \"Enable JFFS partition\" from \"Administration > System\""
  echo -e "$ERROR from router web UI: www.asusrouter.com/Advanced_System_Content.asp"
  echo -e "$ERROR then reboot router and try again. Exiting..."
  exit 1
fi

case $(uname -m) in
  armv7l)
    PART_TYPES='ext2|ext3|ext4'
    INST_URL='http://pkg.entware.net/binaries/armv7/installer/entware_install.sh'
    ENT_FOLD='entware-ng.arm'
    ;;
  mips)
    PART_TYPES='ext2|ext3'
    INST_URL='http://pkg.entware.net/binaries/mipsel/installer/installer.sh'
    ENT_FOLD='entware-ng'
    ;;
  aarch64)
    PART_TYPES='ext2|ext3|ext4'
    INST_URL='http://pkg.entware.net/binaries/armv7/installer/entware_install.sh'
    ENT_FOLD='entware'
    ;;  
  *)
    echo "This is unsupported platform, sorry."
    ;;
esac

echo -e "$INFO Looking for available partitions..."
for mounted in $(/bin/mount | grep -E "$PART_TYPES" | cut -d" " -f3) ; do
  echo "[$i] --> $mounted"
  eval mounts$i="$mounted"
  i=$((i + 1))
done

if [ $i = "1" ] ; then
  echo -e "$ERROR No $PART_TYPES partitions available. Exiting..."
  exit 1
fi

echo -en "$INPUT Please enter partition number or 0 to exit\n$BOLD[0-$((i - 1))]$NORM: "
read -r partitionNumber
if [ "$partitionNumber" = "0" ] ; then
  echo -e "$INFO" Exiting...
  exit 0
fi

if [ "$partitionNumber" -gt $((i - 1)) ] ; then
  echo -e "$ERROR Invalid partition number! Exiting..."
  exit 1
fi

eval entPartition=\$mounts"$partitionNumber"
echo -e "$INFO $entPartition selected.\n"
entFolder="$entPartition/$ENT_FOLD"
entarmFolder="$entPartition/$ENT_FOLD"
entwareFolder="$entPartition/entware"
entwarearmFolder="$entPartition/entware.arm"
asuswareFolder="$entPartition/asusware"
asuswarearmFolder="$entPartition/asusware.arm"
optwareFolder="$entPartition/optware-ng"
optwarearmFolder="$entPartition/optware-ng.arm"

if [ -d /opt/debian ]
then
  echo -e "$WARNING Found chrooted-debian installation, stopping..."
  debian stop
fi

if [ -f /jffs/scripts/services-stop ]
then
  echo -e "$WARNING stopping running services..."
  /jffs/scripts/services-stop
fi

if [ -d "$entFolder" ] ; then
  echo -e "$WARNING Found previous entware-ng installation, saving..."
  mv "$entFolder" "$entFolder-old_$(date +%F_%H-%M)"
fi

if [ -d "$entarmFolder" ] ; then
  echo -e "$WARNING Found previous entware-ng.arm installation, saving..."
  mv "$entarmFolder" "$entarmFolder-old_$(date +%F_%H-%M)"
fi

if [ -d "$entwareFolder" ] ; then
  echo -e "$WARNING Found old entware installation, saving..."
  mv "$entwareFolder" "$entwareFolder-old_$(date +%F_%H-%M)"
fi

if [ -d "$entwarearmFolder" ] ; then
  echo -e "$WARNING Found previous entware-ng installation, saving..."
  mv "$entwarearmFolder" "$entwarearmFolder-old_$(date +%F_%H-%M)"
fi

if [ -d "$asuswareFolder" ] ; then
  echo -e "$WARNING Found old optware installation, saving..."
  mv "$asuswareFolder" "$asuswareFolder-old_$(date +%F_%H-%M)"
fi

if [ -d "$asuswarearmFolder" ] ; then
  echo -e "$WARNING Found old optware.arm installation, saving..."
  mv "$asuswarearmFolder" "$asuswarearmFolder-old_$(date +%F_%H-%M)"
fi

if [ -d "$optwareFolder" ] ; then
  echo -e "$WARNING Found optware-ng installation, saving..."
  mv "$optwareFolder" "$optwareFolder-old_$(date +%F_%H-%M)"
fi

if [ -d "$optwarearmFolder" ] ; then
  echo -e "$WARNING Found optware.ng.arm installation, saving..."
  mv "$optwarearmFolder" "$optwarearmFolder-old_$(date +%F_%H-%M)"
fi

echo -e "$INFO Creating $entFolder folder..."
mkdir "$entFolder"

if [ -d /tmp/opt ] ; then
  echo -e "$WARNING Deleting old /tmp/opt symlink..."
  rm /tmp/opt
fi

echo -e "$INFO Creating /tmp/opt symlink..."
ln -sf "$entFolder" /tmp/opt

echo -e "$INFO Creating /jffs scripts backup..."
tar -czf "$entPartition/jffs_scripts_backup_$(date +%F_%H-%M).tgz" /jffs/scripts/* >/dev/nul

echo -e "$INFO Modifying start scripts..."
cat > /jffs/scripts/services-start << EOF
#!/bin/sh

RC='/opt/etc/init.d/rc.unslung'

i=30
until [ -x "\$RC" ] ; do
  i=\$((\$i-1))
  if [ "\$i" -lt 1 ] ; then
    logger "Could not start Entware-NG"
    exit
  fi
  sleep 5
done
\$RC start
EOF
chmod +x /jffs/scripts/services-start

cat > /jffs/scripts/services-stop << EOF
#!/bin/sh

/opt/etc/init.d/rc.unslung stop
EOF
chmod +x /jffs/scripts/services-stop

cat > /jffs/scripts/post-mount << EOF
#!/bin/sh

if [ "\$1" = "__Partition__" ] ; then
  ln -nsf \$1/$ENT_FOLD /tmp/opt
fi

sleep 2
if [ -f /opt/swap ]
then
  echo -e "Mounting swap file..."
  swapon /opt/swap
else
  echo -e "Swap file not found or /opt is not mounted..."
fi
EOF

eval sed -i 's,__Partition__,$entPartition,g' /jffs/scripts/post-mount
chmod +x /jffs/scripts/post-mount

cat > /jffs/scripts/unmount << 'EOF'
#!/bin/sh

awk '/SwapTotal/ {if($2>0) {system("swapoff /opt/swap")} else print "Swap not mounted"}' /proc/meminfo
EOF
chmod +x /jffs/scripts/unmount

if [ "$(nvram get jffs2_scripts)" != "1" ] ; then
  echo -e "$INFO Enabling custom scripts and configs from /jffs..."
  nvram set jffs2_scripts=1
  nvram commit
fi

wget -qO - $INST_URL | sh
opkg install terminfo

# Swap file
while :
do
    clear
    echo Router model `cat "/proc/sys/kernel/hostname"`
    echo "---------"
    echo "SWAP FILE"
    echo "---------"
    echo "Choose swap file size (Highly Recommended)"
    echo "1. 512MB"
    echo "2. 1024MB"
    echo "3. 2048MB (recommended for MySQL Server or PlexMediaServer)"  
    echo "4. Skip this step, I already have a swap file / partition"
    echo "   or I don't want to create one right now"
    read -p "Enter your choice [ 1 - 4 ] " choice
    case "$choice" in
        1) 
            echo -e "$INFO Creating a 512MB swap file..."
            echo -e "$INFO This could take a while, be patient..."
            dd if=/dev/zero of=/opt/swap bs=1024 count=524288
            mkswap /opt/swap
            chmod 0600 /opt/swap
            swapon /opt/swap
            read -p "Press [Enter] key to continue..." readEnterKey
            free
            break
            ;;
        2)
            echo -e "$INFO Creating a 1024MB swap file..."
            echo -e "$INFO This could take a while, be patient..."
            dd if=/dev/zero of=/opt/swap bs=1024 count=1048576
            mkswap /opt/swap
            chmod 0600 /opt/swap
            swapon /opt/swap
            read -p "Press [Enter] key to continue..." readEnterKey
            free
            break
            ;;
        3)
            echo -e "$INFO Creating a 2048MB swap file..."
            echo -e "$INFO This could take a while, be patient..."
            dd if=/dev/zero of=/opt/swap bs=1024 count=2097152
            mkswap /opt/swap
            chmod 0600 /opt/swap
            swapon /opt/swap
            read -p "Press [Enter] key to continue..." readEnterKey
            free
            break
            ;;          
        4)
            free
            break
            ;;
        *)
            echo "ERROR: INVALID OPTION!"           
            echo "Press 1 to create a 512MB swap file"
            echo "Press 2 to create a 1024MB swap file"
            echo "Press 3 to create a 2048MB swap file (for Mysql or Plex)"         
            echo "Press 4 to skip swap creation (not recommended)" 
            read -p "Press [Enter] key to continue..." readEnterKey
            ;;
    esac    
done

cat > /opt/bin/services << EOF
#!/bin/sh

export PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin$PATH

case "\$1" in
 start)
   sh /jffs/scripts/services-start
   ;;
 stop)
   sh /jffs/scripts/services-stop
   ;;
 restart)
   sh /jffs/scripts/services-stop
   echo -e Restarting Entware-NG Installed Services...
   sleep 2
   sh /jffs/scripts/services-start
   ;;
 *)
   echo "Usage: services {start|stop|restart}" >&2
   exit 3
   ;;
esac
EOF
chmod +x /opt/bin/services

cat << EOF

Congratulations! If there are no errors above then Entware-NG is successfully initialized.

Found a Bug? Please report at https://github.com/Entware-ng/Entware-ng/issues

Type 'opkg install <pkg_name>' to install necessary package.

EOF