• 让你少走弯路的搭建树莓派的Net与NodeJS运行环境


      树莓派是当前最火的嵌入计算平台没有之一,树莓派可以给我们无数的想象,树莓派的高性能、低功耗、低成本、可扩展性(最新的树莓派原生支持WIFI和蓝牙,这功能太赞了)深受大家的喜爱。虽然树莓派到目前为止已经很好安装系统了。但是要想方便的使用和部署开发的软件还是比较麻烦的。

      安装环境的话,你的有树莓派硬件(此图为:树莓派3 Model B),你还得需要一个支持HDMI显示器(电视机也可以)、HDMI线、MicroSD卡(8G+,Class10+级别)、电源适配器(5V、2A+、MicroUSB接口)、读卡器(支持MicroSD卡),至于还有键盘、鼠标、散热片、风扇、保护壳等。

      树莓派的供电能力有限,大功率IO设备需要外置供电,尤其是USB口,建议买个供电的扩展坞!!!

      有了这些东西就可以开始搭建环境,下面的例子以树莓派3 Model B为硬件搭建。

      1.安装系统

      在官网下载NOOBS,NOOBS相当PC的BIOS,手机的Recovery。用于引导和配置系统硬件环境,这里我下载的是NOOBS带Raspbian桌面环境的版本(快速下载-移入查看密码)。

      准备MicroSD,并用工具格式化SDFormatter,选择待格式化的盘符,点击进行格式化(快速下载-移入查看密码)。

      解压NOOBS,拷贝NOOBS_XXX解压文件夹下面的文件与文件夹到MicroSD的根目录。

    将MicroSD插入树莓派,接上显示器与电源、鼠标、键盘。(树莓派电路自身是裸露的,千万不要直接与金属表面接触,注意释放手上静电)。

      开机出现彩色封面表示正常启动,系统即将出现引导界面,点击“Shift”键指导进入安装界面。

      进入一下界面,表示大功告成,选择Raspbian,点击Install,进行安装系统。

      如何进行分辨率适配?在NOOBS的管理界面中找到“EditConfig”,进入编辑框,找到hdmi_group和hdmi_mode的值对应想要调整的分辨率,其他分辨率可自行谷歌、百度。

    以下是计算机显示器使用的分辨率。这些分辨率的hdmi_group=2
    hdmi_mode=1    640x350   85Hz
    hdmi_mode=2    640x400   85Hz
    hdmi_mode=3    720x400   85Hz
    hdmi_mode=4    640x480   60Hz
    hdmi_mode=5    640x480   72Hz
    hdmi_mode=6    640x480   75Hz
    hdmi_mode=7    640x480   85Hz
    hdmi_mode=8    800x600   56Hz
    hdmi_mode=9    800x600   60Hz
    hdmi_mode=10   800x600   72Hz
    hdmi_mode=11   800x600   75Hz
    hdmi_mode=12   800x600   85Hz
    hdmi_mode=13   800x600   120Hz
    hdmi_mode=14   848x480   60Hz
    hdmi_mode=15   1024x768  43Hz  DO NOT USE
    hdmi_mode=16   1024x768  60Hz
    hdmi_mode=17   1024x768  70Hz
    hdmi_mode=18   1024x768  75Hz
    hdmi_mode=19   1024x768  85Hz
    hdmi_mode=20   1024x768  120Hz
    hdmi_mode=21   1152x864  75Hz
    hdmi_mode=22   1280x768        reduced blanking
    hdmi_mode=23   1280x768  60Hz
    hdmi_mode=24   1280x768  75Hz
    hdmi_mode=25   1280x768  85Hz
    hdmi_mode=26   1280x768  120Hz reduced blanking
    hdmi_mode=27   1280x800        reduced blanking
    hdmi_mode=28   1280x800  60Hz
    hdmi_mode=29   1280x800  75Hz
    hdmi_mode=30   1280x800  85Hz
    hdmi_mode=31   1280x800  120Hz reduced blanking
    hdmi_mode=32   1280x960  60Hz
    hdmi_mode=33   1280x960  85Hz
    hdmi_mode=34   1280x960  120Hz reduced blanking
    hdmi_mode=35   1280x1024 60Hz
    hdmi_mode=36   1280x1024 75Hz
    hdmi_mode=37   1280x1024 85Hz
    hdmi_mode=38   1280x1024 120Hz reduced blanking
    hdmi_mode=39   1360x768  60Hz
    hdmi_mode=40   1360x768  120Hz reduced blanking
    hdmi_mode=41   1400x1050       reduced blanking
    hdmi_mode=42   1400x1050 60Hz
    hdmi_mode=43   1400x1050 75Hz
    hdmi_mode=44   1400x1050 85Hz
    hdmi_mode=45   1400x1050 120Hz reduced blanking
    hdmi_mode=46   1440x900        reduced blanking
    hdmi_mode=47   1440x900  60Hz
    hdmi_mode=48   1440x900  75Hz
    hdmi_mode=49   1440x900  85Hz
    hdmi_mode=50   1440x900  120Hz reduced blanking
    hdmi_mode=51   1600x1200 60Hz
    hdmi_mode=52   1600x1200 65Hz
    hdmi_mode=53   1600x1200 70Hz
    hdmi_mode=54   1600x1200 75Hz
    hdmi_mode=55   1600x1200 85Hz
    hdmi_mode=56   1600x1200 120Hz reduced blanking
    hdmi_mode=57   1680x1050       reduced blanking
    hdmi_mode=58   1680x1050 60Hz
    hdmi_mode=59   1680x1050 75Hz
    hdmi_mode=60   1680x1050 85Hz
    hdmi_mode=61   1680x1050 120Hz reduced blanking
    hdmi_mode=62   1792x1344 60Hz
    hdmi_mode=63   1792x1344 75Hz
    hdmi_mode=64   1792x1344 120Hz reduced blanking
    hdmi_mode=65   1856x1392 60Hz
    hdmi_mode=66   1856x1392 75Hz
    hdmi_mode=67   1856x1392 120Hz reduced blanking
    hdmi_mode=68   1920x1200       reduced blanking
    hdmi_mode=69   1920x1200 60Hz
    hdmi_mode=70   1920x1200 75Hz
    hdmi_mode=71   1920x1200 85Hz
    hdmi_mode=72   1920x1200 120Hz reduced blanking
    hdmi_mode=73   1920x1440 60Hz
    hdmi_mode=74   1920x1440 75Hz
    hdmi_mode=75   1920x1440 120Hz reduced blanking
    hdmi_mode=76   2560x1600       reduced blanking
    hdmi_mode=77   2560x1600 60Hz
    hdmi_mode=78   2560x1600 75Hz
    hdmi_mode=79   2560x1600 85Hz
    hdmi_mode=80   2560x1600 120Hz reduced blanking
    hdmi_mode=81   1366x768  60Hz
    hdmi_mode=82   1080p     60Hz
    hdmi_mode=83   1600x900        reduced blanking
    hdmi_mode=84   2048x1152       reduced blanking
    hdmi_mode=85   720p      60Hz
    hdmi_mode=86   1366x768        reduced blanking
    

      修改系统默认密码、位置、时区、键盘、WiFi地区。

      开启VNC,SSH方面远程无屏管理。

      修改系统用户密码。

      获取ROOT权限打开命令终端(Ctrl + Alt + T),输入以下内容(“sudo” 是临时使用最高权限执行命令的意思)。

    sudo passwd root
    执行此命令后系统会提示输入两遍的root密码,输入你想设的密码即可,然后在执行
    sudo passwd --unlock root
    

       修改软件中心镜像地址提高下载速度,镜像地址可以自行谷歌、百度。

    su #(如果已经是root账户登录,即可跳过此步骤)
    cd /etc/apt/&&mv sources.list sources.list.bak #(备份现有的源文件)
    sudo nano /etc/apt/sources.list #(添加新配置文件)
    =================
    deb http://mirrors.cqu.edu.cn/Raspbian/raspbian/ wheezy main contrib non-free rpi #(添加重庆大学的镜像)
    #Ctrl + O、Enter、Ctrl + X #保存退出
    =================
    sudo apt-get update && apt-get upgrade #(测试更新)
    

      文件授权,注意不要滥用。

    sudo chmod 777 /xxx  #目录为Everyone
    sudo chmod -R 777 /xxx  #目录以及子文件全部为Everyone
    

      输入法管理器与输入法安装,我这里选择iBus(因为符合国人的操作习惯,设置也比较人性化点点,同时内置拼音。但是不能和PC的国产输入法比较。其实还有fcitx输入法管理器)

    sudo apt-get install ibus ibus-pinyin
    

    配置开机自动启动方面使用,默认下每次开机需要手动启动。

    #添加自启动脚本
    cd /home/pi
    cd .config
    mkdir autostart
    cd autostart
    #添加脚本文件(可以写入多个脚本文件,用于配置不同分辨率连接)
    nano input.desktop
    #添加脚本
    [Desktop Entry]
    Type=Application
    Name=InputManger
    Exec=ibus-daemon --xim
    StartupNotify=false
    #Ctrl + O、Enter、Ctrl + X #保存退出
    

      设置桌面样式

      永久挂载新分区

      

    df -h #查看未使用的分区
    sudo umount /dev/xxxx #对应分区卸载,记住你的这个分区路径
    sudo mkdir /xxx #创建自定义的挂载位置,将卸载的分区挂载到自己的目录
    
    #临时挂载
    sudo mount /dev/xxx /xxx #将分区挂载到自己创建的目录
    
    #永久挂载
    sudo nano /etc/fstab #进入系统的磁盘分区的配置表,系统开机会进行分区映射
    #添加一行,将分区挂载到自定义的位置
    ======================================================
    /dev/xxx  /xxx    auto    defaults          0       0
    ======================================================
    #Ctrl + O、Enter、Ctrl + X #保存退出

      制作系统镜像

      镜像是个非常方便的东西,可以将系统打包。如果运行的系统损坏或不想要了,可以用备份的镜像文件将其恢复。通过Win32DiskImager进行备份和还原,平时备份可以将镜像压缩,可以节约空间。(快速下载-移入查看密码

      第一次如何恢复根分区容量

    #运行命令终端
    sudo raspi-config #进入系统配置

      2.远程桌面的安装

      最新的Raspbian内置VNCServer工具,所以就不需要在单独安装VNCServer工具了,上一步已经启动的VNC功能,同时需要注意的是用户名,密码。VNC可以添加多个不同名称的端口。

    #添加自启动脚本
    cd /home/pi
    cd .config
    mkdir autostart
    cd autostart
    #添加脚本文件(可以写入多个脚本文件,用于配置不同分辨率连接)
    nano vnc.desktop #脚本名称
    #添加脚本
    [Desktop Entry]
    Type=Application
    Name=VNC #名称
    Exec=vncserver -geometry 1920x1080 :1 #设置分辨率1920x1080,以及VNC端口为1
    StartupNotify=false
    #Ctrl + O、Enter、Ctrl + X #保存退出
    

    使用VNCViewer进行远程连接,VNCViewer支持多平台版本可以到官网下载。(快速下载-移入查看密码

    3.安装NodeJS

      在NodeJS官网下载安装包或在线安装,注意安装ARM版本。(快速下载-移入查看密码

    #方法一、
    #作者地址:https://github.com/nodesource/distributions
    #命令终端
    curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
    #方法二、
    #命令终端
    cd /home/pi
    
    #离线安装
    #拷入node-v6.9.1-linux-armv7l.tar.gz 到 /home/pi
    
    #在线安装(其他版本同理,只需要修改版本名称即可)
    wget https://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-armv7l.tar.gz
    
    #命令终端
    tar zxvf node-v6.9.1-linux-armv7l.tar.gz   
    sudo mv node-v6.9.1-linux-armv7l  /usr/local/bin
    sudo ln /usr/local/bin/node-v6.9.1-linux-armv7l/bin/node /usr/local/bin/node
    sudo ln -s /usr/local/bin/node-v6.9.1-linux-armv7l/lib/node_modules/npm/bin/npm /usr/local/bin/npm

      NodeJSARM版NPM存在路径问题,需要以下方式解决。

    #尝试npm -v发现出错了,原因是路径问题,修改相对路径(注意查看脚本中的相对路径),跳转到/usr/local/bin目录。
    #打开文本npm
    #贴上修改后的文件内容:
    #!/bin/sh
    (set -o igncr) 2>/dev/null && set -o igncr; # cygwin encoding fix
    
    basedir=$(dirname `readlink -f $0`)
    cd $basedir
    
    case `uname` in
        *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
    esac
    
    NODE_EXE="$basedir/node.exe"
    if ! [ -x "$NODE_EXE" ]; then
      NODE_EXE=node
    fi
    
    NPM_CLI_JS="$basedir/node-v6.9.1-linux-armv7l/lib/node_modules/npm/bin/npm-cli.js"
    if ! [ -x "$NPM_CLI_JS" ]; then
      NPM_CLI_JS=npm-cli.js
    fi
    
    case `uname` in
      *CYGWIN*)
        NPM_PREFIX=`"$NODE_EXE" "$NPM_CLI_JS" prefix -g`
        NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node-v6.9.1-linux-armv7l/lib/node_modules/npm/bin/npm-cli.js"
        if [ -f "$NPM_PREFIX_NPM_CLI_JS" ]; then
          NPM_CLI_JS="$NPM_PREFIX_NPM_CLI_JS"
        fi
        ;;
    esac
    
    "$NODE_EXE" "$NPM_CLI_JS" "$@"

      NodeJS升级命令。

    sudo npm install -g n
    #更新到最新稳定版
    sudo n stable
    #更新到最新版本
    sudo n latest
    #更新到具体版本
    sudo n v6.9.1

    4.安装Net环境

      这里使用的是Mono,而非Net Core,因为Net Core坑太多了,不适合跨平台移植软件。还有做跨平台软件需要注意外部文件路径问题,通过 Path.DirectorySeparatorChar 获取平台路径特征与通过 AppDomain.CurrentDomain.BaseDirectory 获取运行程序的绝对根目录,同时,win32的类库目前是不能被Mono运行的。Net的类库是完全可运行,需要注意的是Windows下有些原生类库在Mono里面没有集成,需要设置生成时复制到输出目录。(快速下载-移入查看密码

      首先下载Mono官方的源代码,然后在树莓派上进行编译,编译时间过长,清耐心等待数小时。安装过程中会出现依赖的软件未安装,导致安装停止,需要一步一步的进行安装依赖通过“sudo apt-get xxx”或“sudo apt-get xxx=xxx.xxx.xxx”来解决。

    方法一、
    #这里是案例,可以下载最新版进行编译(需要耐心等待6~8小时),安装
    #下载官方源码包,可以离线下载提高速度
    wget http://download.mono-project.com/sources/mono/mono-4.0.1.44.tar.bz2
    #解压
    tar -xvf mono-4.0.1.44.tar.bz2
    #切换路径
    cd mono-4.0.1
    #配置编译安装路径
    ./configure --prefix=/usr/local
    #编译
    make
    #安装
    make install
    
    #注意通过sudo apt-get安装libgdiplus类库,方便图像程序的运行,如:WinForm等图像库相关的软件的使用
    
    方法二、
    #通过Mono官网:https://www.mono-project.com/download/stable/#download-lin-raspbian,树莓派专栏命令安装完整Net环境
    安装命令:
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://download.mono-project.com/repo/debian raspbianjessie main" | sudo tee /etc/apt/sources.list.d/mono-official.list sudo apt-get update
    sudo apt-get install mono-develsudo 
    sudo apt-get install mono-completesudo 
    sudo apt-get install mono-dbgsudo 
    sudo apt-get install referenceassemblies-pclsudo 
    sudo apt-get install ca-certificates-monosudo 
    sudo apt-get install mono-xsp4
    
    由于树莓派的内存容量有限,可以适当对Mono的性能进行优化:
    关于MONO_GC_PARAMS
    mono中的内存分为三块:nursery, major heap和large object space
    nursery主要存放新生成的小对象和被pinned住的小对象
    major heap是老年代,主要存放在gc中从nursery移过来的对象
    large object space存放大于8K的对象,SGen-GC把大对象直接分配在操作系统的内存页上,垃圾回收时直接释放内存回操作系统
    MONO_GC_PARAMS需要被设置成环境变量,多个参数用逗号隔开,可以使用以下参数:
    max-heap-size:最大堆大小
    major:老年代垃圾回收策略,默认只使用单CPU进行垃圾回收,有以下值:`marksweep', `marksweep-conc', `marksweep-par', 'marksweep-fixed' or 'marksweep-fixed-par'
    major-heap-size:老年代堆大小,默认为512M,该参数必须和major参数一起使用,单独使用会报错
    minor:新生代垃圾回收策略,有以下值:`simple' or `split'
    nursery-size:新生代大小,默认为4M,采用的是copying collection, 值必须是2的幂
    soft-heap-limit:当内存使用小于该值会较少进行垃圾回收,大于该值则会有更多的垃圾回收次数
    stack-mark:线程堆栈扫描策略。有两个值:precise,  conservative。SGen垃圾回收器默认使用precise
    evacuation-threshold:内存碎片阈值。取值范围[0 - 100(占堆的%)],默认66
    wbarrier: 按照官方文档的说法, major collection会扫描整个堆,而nursery collection只会扫描新生代,为了避免冲突,需要追踪从老年代指向新生代的任何引用,mono支持两种数据结构来保持追踪:cardtable 和 remset
    save-target-ratio: 保留触发比例 0.1-2 (%)
    default-allowance-ratio: 默认限额比例 1-10 (%)
    
    运行案例(根据实际设备的内存可以自行调整):
    su xxx #登录要运行程序的用户
    cd xxx #进入程序对应的文件夹
    ulimit -m 524288 #限制物理内存(KB) = 物理内存 - 524288(KB),如果物理内存低于512MB就需要用512MB - 系统占用内存,注意单位必须换算为KB,防止导致系统崩溃
    ulimit -v 1048576 #限制虚拟内存(KB) = 物理内存
    export MONO_GC_PARAMS=max-heap-size=512m,major=marksweep-conc,nursery-size=4m,soft-heap-limit=512m,stack-mark=precise,evacuation-threshold=10 #设置内存回收策略,限制Mono能申请的最大内存 = 上面限制的物理内存
    mono xxx.exe #运行exe程序
    

      

    耐心等待数小时后,安装完成,可以用C#写个HelloWorld试试还有WinForm等,看看惊喜。

    如果还需要AspNet程序的运行,则需要安装 Jexus Web服务器,用于支持AspNet程序的运行。以下是Jexus安装。(快速下载-移入查看密码

    #安装
    cd /tmp
    wget linuxdot.net/down/jexus-5.6.5.tar.gz
    tar -zxvf jexus-5.6.5.tar.gz 
    cd jexus-5.6.5
    sudo ./install 
    
    #更新
    cd /tmp
    sudo /usr/jexus/jws stop
    wget http://linuxdot.net/down/jws-v5.6.4-arm.zip
    tar -zxvf jws-v5.6.4-arm.zip
    cd jws-v5.6.4-arm
    sudo ./upgrade
    sudo /usr/jexus/jws regsvr
    sudo /usr/jexus/jws restart
    
    ===测试/var/www/default/index.aspx=======
    <%@Page Language="C#"%>
    <%=DateTime.Now.ToString()%> 
    ==============================
    #添加自启动脚本
    cd /home/pi
    cd .config
    mkdir autostart
    cd autostart
    #添加脚本文件(可以写入多个脚本文件,用于配置不同分辨率连接)
    nano webserver.desktop
    #添加脚本
    [Desktop Entry]
    Type=Application
    Name=WebServer
    Exec=lxterminal --command="sudo /usr/jexus/jws start"
    StartupNotify=false
    #Ctrl + O、Enter、Ctrl + X #保存退出

    Jexus的全局配置在/usr/jexus/jws.conf,可以通过“sudo nano /usr/jexus/jws.conf”配置。

    SiteLogDir=log #指定日志目录
    SiteConfigDir=siteconf #指定每个站点的配置信息位置
    
    httpd.processes=1          #: 1-8. (0 is auto) 这是Jexus服务器使用的进程数量,建议每1核CPU用一个进程,最多可设8个进程,如果设置大于1,需要启动独立的会话服务。否则出现Session丢失问题
    httpd.MaxTotalMemory=0     #: In megabytes. Set to 0 for auto. 允许使用的最大内存,0是自动分配
    httpd.MaxCpuTime=2400      #: In seconds. Set to 0 for unlimited. 允许CPU执行的最长时间,如果超时系统会终端当前运行的线程,0是不限制。
    httpd.MaxConnPerIp=0       #: 0 is unlimited 单个IP的最大并发连接数
    # httpd.User=www-data #工作进程以什么用户身份和对应权限工作,默认为root
    # php-fcgi.set=/usr/bin/php-cgi,6 #如果需要Jexus同时充当PHP FastCGI服务器,这一句就是fast-cgi设置,分两个部分,逗号前为php-cgi这个文件的路径,逗号后是php进程数
    
    # CertificateFile=/xxxx/xx.crt #SS证书
    # CertificateKeyFile=/xxxx/xx.key #SSL证书秘钥文件
    # SSL_Ciphers=RC4-MD5 #使用的加密套件类型
    
    
    
    # Runtime=v2.0.50727

    Jexus的每个站点的配置/usr/jexus/siteconf/xxx,例如配置default:“sudo nano /usr/jexus/siteconf/default”配置,可以配置多个,通过“sudo nano /usr/jexus/siteconf/xxx”进行添加其他网站配置。

    ######################
    # Web Site: Default 
    ########################################
    
    port=80 #网站的端口号
    root=/ /home/pi/Project/www/default #网站的根目录
    hosts=*    #OR your.com,*.your.com #允许访问域名
    
    
    # addr=0.0.0.0 #网站允许访问本地IP
    # CheckQuery=false #查询检查
    NoLog=true #不开启日志
    # NoFile=/index.aspx  #默认的主页
    Keep_Alive=false #是否保持长连接
    UseGZIP=true #是否启动GZIP压缩
    # UseHttps=true #网站是否使用SSL安全访问
    # DenyFrom=192.168.0.233, 192.168.1.*, 192.168.2.0/24 #禁止访问的IP限制
    # AllowFrom=192.168.*.* #允许访问的IP限制
    # DenyDirs=~/cgi, ~/upfiles #禁止访问的目录
    # indexes=myindex.aspx #首页文件名,可以写多个,用英文逗号分开(可以不填。因为JWS系统含有常用首页名)
    # rewrite=^/.+?.(asp|php|cgi|pl|sh)$ /index.aspx #URL重写是指WEB服务器将访问者的请求URL路径资源按指定的匹配规则解释和匹配为另外的一个真实RUL路径资源。
    # reproxy=/bbs/ http://192.168.1.112/bbs/ #反向代理功能,当用户访问/abc/时,jexus就会随机选择一台服务器进行访问,达到负载均衡或服务器集群的效果。
    
    # Jexus php fastcgi address is '/var/run/jexus/phpsvr'
    #######################################################
    # fastcgi.add=php|socket:/var/run/jexus/phpsvr
    
    # php-fpm listen address is '127.0.0.1:9000'
    ############################################
    # fastcgi.add=php|tcp:127.0.0.1:9000

    5.如何创建内存虚拟磁盘

    在树莓派上创建内存盘,将频繁读写的缓存等小文件放到内存,减少对SD卡的寿命消耗。

    mkdir /ram
    mount -t tmpfs -o size=10m,mode=0777 tmpfs /ram

    6.时间不准校正方法

    手动方式:

    sudo date  --s="2018-03-18 00:00:00"

    自动方式:

    sudo ntpd -s -d

    如果没有配置NTP服务器,那么需要重新配置,如下: 

    # 打开ntp服务的配置文件
    sudo nano /etc/ntp.conf
    # 找到这两行
    # You do need to talk to an NTP server or two (or three).
    # server ntp.your-provider.example
    # 添加
    server ntp.fudan.edu.cn iburst perfer
    server time.asia.apple.com iburst
    server asia.pool.ntp.org iburst
    server ntp.nict.jp iburst
    server time.nist.gov iburst
    # Ctrl+X保存退出
    # 重启ntp服务
    sudo /etc/init.d/ntp restart 

    7.如何开机自动运行命令行工具

    下面运行Git服务器为例:

    #添加自启动脚本
    cd /home/pi
    cd .config
    mkdir autostart
    cd autostart
    #添加脚本文件(可以写入多个脚本文件,用于配置不同分辨率连接)
    nano gogsserver.desktop
    #添加脚本
    [Desktop Entry]
    Type=Application
    Name=GogsServer
    Exec=lxterminal --working-directory=/home/pi/Software/GogsServer/gogs --command="./gogs web"
    StartupNotify=false
    #Ctrl + O、Enter、Ctrl + X #保存退出

    8.Linux分区以及SSD优化

    fdisk -l #查看分区信息
    df -T #查看挂载点新
    cfdisk /dev/sda #分区工具
    umount /XXX #卸载要格式化的分区
    mkfs -t ext4 /dev/sdaXXX #格式化分区
    mount /dev/sdaXXX /mnt/XXX #挂载分区
    mount /dev/sdaXXX  /media/XXX #手动挂载分区
    umount /media/XXX 卸载分区
    e2label /dev/sdaXXX /XXX #修改分区别名
    /etc/fstab #添加自动挂载分区
    tune2fs -m 1 /dev/sdaXXX #减少Ext4分区预留空间到1%
    
    #SSD优化
    #https://www.jianshu.com/p/nQpqsN
    #方法1-修改/etc/rc.local文件
    在最后一条命令exit 0 前增加如下内容:
    fstrim -v /
    /为root分区(SSD硬盘分区)
    不建议使用fstrim-all命令,在非三星和Intel SSD上会有性能瓶颈,
    
    #方法2-cron
    echo -e "#x21/bin/sh
    fstrim -v /" | sudo tee /etc/cron.daily/trim
    sudo chmod +x /etc/cron.daily/trim
    
    #方法3-修改/etc/fstab文件
    修改SSD相关分区条目,增加discard 和 noatime参数
    /dev/sda1 / ext4 discard,noatime,commit=600,errors=remount-ro 0 1
    discard参数启动SSD的TRIM功能,可以提升性能和使用持久性。
    notime参数告诉文件系统不要记录文件的最后访问(读取)时间,只记录最后修改时间。可以有效减少对磁盘的读写次数,因为访问频率相对修改来说非常多
    
    #SSD优化后记
    新买得一块SSD,听说开启TRIM才能更好的发挥SSD的性能,Linux并没有默认开启TRIM,但开启还是比较简单。
    首先要检测SSD是否支持TRIM:
    sudo hdparm -I /dev/sda | grep "TRIM supported"
    如果支持则会出现:”Data Set Management TRIM supported”
    如果SSD支持TRIM, 则可以开启TRIM了, 这里介绍常用的两种方法。
    
    #方法1:修改fstab, 添加discard属性
    sudo vim /etc/fstab
    
    #下面是我机器上fstab的配置
    UUID=27dd31b4-8aa4-4043-b921-540a312c056c / ext4 rw,relatime,data=ordered,discard 0 1
    UUID=42f79958-0776-4b2f-8aa3-db827bf257b6 /home ext4 rw,relatime,data=ordered,discard 0 2
    
    #方法2:使用fstrim定期执行trim任务
    #以我用的archlinux为例,首先安装并运行cron服务:
    sudo pacman -S cronie
    sudo systemctl start cronie
    sudo systemctl enable cronie
    
    #然后创建一个任务配置:
    sudo gedit /etc/cron.daily/trim
    
    #并将下面的内容拷贝到里面:
    #!/bin/sh
    LOG=/var/log/trim.log
    echo "*** $(date -R) ***" >> $LOG
    fstrim -v / >> $LOG
    fstrim -v /home >> $LOG 
    

      

      以上是基本安装方式,随着版本更新,可能存在出入。同时命令中的注释需要去掉。

  • 相关阅读:
    功能强大的T4文本模版
    C#中.snk文件的作用
    ASP.NET MVC中实现多个按钮提交的几种方法
    asp.net mvc强大的分页控件MvcPager
    设计模式—观察者模式
    Http响应码

    编码习惯
    vim 快捷键 转
    makefilevvhttp://www.tudou.com/programs/view/e3Z8RbxFIZE/
  • 原文地址:https://www.cnblogs.com/BruceWan/p/6144692.html
Copyright © 2020-2023  润新知