领客空间 - Lincrow - 专注于分享SEO网络营销、建站技术的自媒体博客 - 技术随笔
今天，使用centos9+宝塔搭建服务器，遇到了一个很有趣的问题：服务器是两张网卡，两个不同的网段，并且都接入了公网。A网段IP需要映射外网。B网端只需要内网访问即可。但实际情况却是：A网段和B网段内网访问都正常。但是A网段在公网访问服务器却不能访问。检测端口，80、443等端口都是关闭的。 经过多次排查，都找不到具体根结。后来突然想到，是不是和网关有关系。查看默认网关，发现系统默认B网关为默认。改A为默认网关即可。 在Linux中，当你为多张网卡配置了不同的网关时，系统默认只会选择一个作为默认网关。而不是每张网卡都会使用它自己的网关。所以，在这样的配置下，通常有一个主要的考虑因素决定哪一个网关被选择为默认网关，那就是网卡或路由的度量（metric）值。 在nmcli和其他网络配置工具中，度量值通常用来决定路由的优先级。具有最低度量值的路由将被选为默认路由。如果两张网卡的度量值相同，那么其它因素，如接口的激活顺序，可能会起作用。 我们如果想查看当前的路由设置和默认网关，可以使用命令： ip route show 如果是安装了NetworkManager route -n 然后，使用route命令来进行设置： route add default gw 192.168.1.1 如果要使用IP-Route2工具，那么请先安装iproute2工具： dnf install iproute2 接着，为网络接口设置IPv4地址： ip addr add 192.168.1.x dev eth0
Centos7把home目录下多余的空间转移到/根目录下 我用Centos7搭建过一个服务器，不过在使用过程中，经常提示根目录使用满了，通过df -h发现，根目录只有50G，而home目录可用的，居然有400G。我现在想只保留100G给home，其他的空间给根目录。 把你需要挂载的机器的逻辑卷记住（上面的图，左边是逻辑卷，右边是虚拟磁盘） /dev/mapper/centos_gyser-home 物理地址（逻辑卷） 其中的centos_gyser就是这个类，不能修改，记住centos_gyser，在第四步后要用，你的可能是叫其他名，都是df -h，后显示的结果，centos_gyser-home，取-前面的值. 1. 备份home mkdir /home-bak mv /home/* /home-bak 2. 取消挂载 先杀掉占用home的进程 fuser -k /home kill -9 umount /home 3. 卸载逻辑卷 lvremove /dev/mapper/centos_gyser-home 4. 创建卷，home目录，卷名为centos_gyser,大小100G lvcreate -L 100G -n home centos_gyser 5. 格式化文件系统 mkfs -t xfs /dev/mapper/centos_gyser-home 6. 挂载到home mount /dev/mapper/centos_gyser-home /home 7. 剩余所有空间扩展至根目录逻辑卷 lvextend -l +100%FREE /dev/mapper/centos_gyser-root 8. 扩展根目录文件系统 xfs_growfs /dev/mapper/centos_gyser-root 9. 还原home mv /home-bak/* /home rm -rf /home-bak/*
宝塔面板邮局 Postfix的Sqlite包异常，修复不了问题解决
宝塔邮局出问题，提示，Postfix的Sqlite包异常，请检查。 重新安装之后、修复也不行，后来子网上找到一个重新下载postfix3-sqlite的方法，标记下。 1、首先在https://rhel.pkgs.org/7/ghettoforge-plus-x86_64/ 网站找到最新postfix3-sqlit版本地址。 例如：postfix3-sqlite-3.8.4-1.gf.el7.x86_64.rpm 在Download下找到下载地址： 运行命令： wget http://mirror.ghettoforge.org/distributions/gf/el/7/plus/x86_64/postfix3-sqlite-3.8.4-1.gf.el7.x86_64.rpm yum install postfix3-sqlite-3.8.4-1.gf.el7.x86_64.rpm -y 完成！！
支持 切换 Live2D 模型了（暂时只有 Pio 和 Tia 酱 支持 随机换装 和 顺序换装（收集了截至目前的 Pio、Tia 全套服装 *需要根据 自身情况 进行定制，不能直接套用（其他资源文件见 打包下载 ** waifu-tips.js 的详细设置说明，和 waifu-tips.json 节点说明，见 Live2D 看板娘小样 ReadMe waifu.css .waifu { position: fixed; bottom: 0; z-index: 1; font-size: 0; -webkit-transform: translateY(3px); transform: translateY(3px); } .waifu:hover { -webkit-transform: translateY(0); transform: translateY(0); } .waifu-tips { opacity: 0; margin: -20px 20px; padding: 5px 10px; border: 1px solid rgba(224, 186, 140, 0.62); border-radius: 12px; background-color: rgba(236, 217, 188, 0.5); box-shadow: 0 3px 15px 2px rgba(191, 158, 118, 0.2); text-overflow: ellipsis; overflow: hidden; position: absolute; animation-delay: 5s; animation-duration: 50s; animation-iteration-count: infinite; animation-name: shake; animation-timing-function: ease-in-out; } .waifu-tool { display: none; color: #aaa; top: 50px; right: 10px; position: absolute; } .waifu:hover .waifu-tool { display: block; } .waifu-tool span { display: block; cursor: pointer; color: #5b6c7d; transition: 0.2s; } .waifu-tool span:hover { color: #34495e; } .waifu #live2d{ position: relative; } @keyframes shake { 2% { transform: translate(0.5px, -1.5px) rotate(-0.5deg); } 4% { transform: translate(0.5px, 1.5px) rotate(1.5deg); } 6% { transform: translate(1.5px, 1.5px) rotate(1.5deg); } 8% { transform: translate(2.5px, 1.5px) rotate(0.5deg); } 10% { transform: translate(0.5px, 2.5px) rotate(0.5deg); } 12% { transform: translate(1.5px, 1.5px) rotate(0.5deg); } 14% { transform: translate(0.5px, 0.5px) rotate(0.5deg); } 16% { transform: translate(-1.5px, -0.5px) rotate(1.5deg); } 18% { transform: translate(0.5px, 0.5px) rotate(1.5deg); } 20% { transform: translate(2.5px, 2.5px) rotate(1.5deg); } 22% { transform: translate(0.5px, -1.5px) rotate(1.5deg); } 24% { transform: translate(-1.5px, 1.5px) rotate(-0.5deg); } 26% { transform: translate(1.5px, 0.5px) rotate(1.5deg); } 28% { transform: translate(-0.5px, -0.5px) rotate(-0.5deg); } 30% { transform: translate(1.5px, -0.5px) rotate(-0.5deg); } 32% { transform: translate(2.5px, -1.5px) rotate(1.5deg); } 34% { transform: translate(2.5px, 2.5px) rotate(-0.5deg); } 36% { transform: translate(0.5px, -1.5px) rotate(0.5deg); } 38% { transform: translate(2.5px, -0.5px) rotate(-0.5deg); } 40% { transform: translate(-0.5px, 2.5px) rotate(0.5deg); } 42% { transform: translate(-1.5px, 2.5px) rotate(0.5deg); } 44% { transform: translate(-1.5px, 1.5px) rotate(0.5deg); } 46% { transform: translate(1.5px, -0.5px) rotate(-0.5deg); } 48% { transform: translate(2.5px, -0.5px) rotate(0.5deg); } 50% { transform: translate(-1.5px, 1.5px) rotate(0.5deg); } 52% { transform: translate(-0.5px, 1.5px) rotate(0.5deg); } 54% { transform: translate(-1.5px, 1.5px) rotate(0.5deg); } 56% { transform: translate(0.5px, 2.5px) rotate(1.5deg); } 58% { transform: translate(2.5px, 2.5px) rotate(0.5deg); } 60% { transform: translate(2.5px, -1.5px) rotate(1.5deg); } 62% { transform: translate(-1.5px, 0.5px) rotate(1.5deg); } 64% { transform: translate(-1.5px, 1.5px) rotate(1.5deg); } 66% { transform: translate(0.5px, 2.5px) rotate(1.5deg); } 68% { transform: translate(2.5px, -1.5px) rotate(1.5deg); } 70% { transform: translate(2.5px, 2.5px) rotate(0.5deg); } 72% { transform: translate(-0.5px, -1.5px) rotate(1.5deg); } 74% { transform: translate(-1.5px, 2.5px) rotate(1.5deg); } 76% { transform: translate(-1.5px, 2.5px) rotate(1.5deg); } 78% { transform: translate(-1.5px, 2.5px) rotate(0.5deg); } 80% { transform: translate(-1.5px, 0.5px) rotate(-0.5deg); } 82% { transform: translate(-1.5px, 0.5px) rotate(-0.5deg); } 84% { transform: translate(-0.5px, 0.5px) rotate(1.5deg); } 86% { transform: translate(2.5px, 1.5px) rotate(0.5deg); } 88% { transform: translate(-1.5px, 0.5px) rotate(1.5deg); } 90% { transform: translate(-1.5px, -0.5px) rotate(-0.5deg); } 92% { transform: translate(-1.5px, -1.5px) rotate(1.5deg); } 94% { transform: translate(0.5px, 0.5px) rotate(-0.5deg); } 96% { transform: translate(2.5px, -0.5px) rotate(-0.5deg); } 98% { transform: translate(-1.5px, -1.5px) rotate(-0.5deg); } 0%, 100% { transform: translate(0, 0) rotate(0); } } @font-face { font-family: 'Flat-UI-Icons'; src: url('flat-ui-icons-regular.eot'); src: url('flat-ui-icons-regular.eot?#iefix') format('embedded-opentype'), url('flat-ui-icons-regular.woff') format('woff'), url('flat-ui-icons-regular.ttf') format('truetype'), url('flat-ui-icons-regular.svg#flat-ui-icons-regular') format('svg'); } [class^="fui-"], [class*="fui-"] { font-family: 'Flat-UI-Icons'; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .fui-cross:before { content: "\e609"; } .fui-info-circle:before { content: "\e60f"; } .fui-photo:before { content: "\e62a"; } .fui-eye:before { content: "\e62c"; } .fui-chat:before { content: "\e62d"; } .fui-home:before { content: "\e62e"; } .fui-user:before { content: "\e631"; } waifu-tips.js window.live2d_settings = Array(); /* く__,.ヘヽ. / ,ー､ 〉 ＼ ', !-─‐-i / /´ ／｀ｰ' L/／｀ヽ､ Live2D 看板娘 参数设置 / ／, /| , , ', Version 1.4.2 ｲ / /-‐/ ｉ L_ ﾊ ヽ! i Update 2018.11.12 ﾚ ﾍ 7ｲ｀ﾄ ﾚ'ｧ-ﾄ､!ハ| | !,/7 '0' ´0iソ| | |.从" _ ,,,, / |./ | 网页添加 Live2D 看板娘 ﾚ'| i＞.､,,__ _,.イ / .i | https://www.lincrow.com/archives/322/ ﾚ'| | / k_７_/ﾚ'ヽ, ﾊ. | | |/i 〈|/ i ,.ﾍ | i | .|/ / ｉ： ﾍ! ＼ | kヽ>､ﾊ _,.ﾍ､ /､! !'〈//｀Ｔ´', ＼ ｀'7'ｰr' ﾚ'ヽL__|___i,___,ンﾚ|ノ ﾄ-,/ |___./ 'ｰ' !_,.:*********************************************************************************/ // 后端接口 live2d_settings['modelAPI'] = '//live2d.gyhd.cc/api/'; // 自建 API 修改这里 live2d_settings['tipsMessage'] = 'waifu-tips.json'; // 同目录下可省略路径 live2d_settings['hitokotoAPI'] = 'lincrow'; // 一言 API，可选'hitokoto.cn', 'jinrishici.com'(古诗词) // 默认模型 live2d_settings['modelId'] = 1; // 默认模型 ID，可在 F12 控制台找到 live2d_settings['modelTexturesId'] = 53; // 默认材质 ID，可在 F12 控制台找到 // 工具栏设置 live2d_settings['showToolMenu'] = true; // 显示 工具栏 ，可选 true(真), false(假) live2d_settings['canCloseLive2d'] = true; // 显示 关闭看板娘 按钮，可选 true(真), false(假) live2d_settings['canSwitchModel'] = true; // 显示 模型切换 按钮，可选 true(真), false(假) live2d_settings['canSwitchTextures'] = true; // 显示 材质切换 按钮，可选 true(真), false(假) live2d_settings['canSwitchHitokoto'] = true; // 显示 一言切换 按钮，可选 true(真), false(假) live2d_settings['canTakeScreenshot'] = true; // 显示 看板娘截图 按钮，可选 true(真), false(假) live2d_settings['canTurnToHomePage'] = true; // 显示 返回首页 按钮，可选 true(真), false(假) live2d_settings['canTurnToAboutPage'] = true; // 显示 跳转关于页 按钮，可选 true(真), false(假) // 模型切换模式 live2d_settings['modelStorage'] = true; // 记录 ID (刷新后恢复)，可选 true(真), false(假) live2d_settings['modelRandMode'] = 'switch'; // 模型切换，可选 'rand'(随机), 'switch'(顺序) live2d_settings['modelTexturesRandMode']= 'rand'; // 材质切换，可选 'rand'(随机), 'switch'(顺序) // 提示消息选项 live2d_settings['showHitokoto'] = true; // 显示一言 live2d_settings['showF12Status'] = true; // 显示加载状态 live2d_settings['showF12Message'] = false; // 显示看板娘消息 live2d_settings['showF12OpenMsg'] = true; // 显示控制台打开提示 live2d_settings['showCopyMessage'] = true; // 显示 复制内容 提示 live2d_settings['showWelcomeMessage'] = true; // 显示进入面页欢迎词 //看板娘样式设置 live2d_settings['waifuSize'] = '280x250'; // 看板娘大小，例如 '280x250', '600x535' live2d_settings['waifuTipsSize'] = '250x70'; // 提示框大小，例如 '250x70', '570x150' live2d_settings['waifuFontSize'] = '12px'; // 提示框字体，例如 '12px', '30px' live2d_settings['waifuToolFont'] = '14px'; // 工具栏字体，例如 '14px', '36px' live2d_settings['waifuToolLine'] = '20px'; // 工具栏行高，例如 '20px', '36px' live2d_settings['waifuToolTop'] = '0px' // 工具栏顶部边距，例如 '0px', '-60px' live2d_settings['waifuMinWidth'] = '768px'; // 面页小于 指定宽度 隐藏看板娘，例如 'disable'(禁用), '768px' live2d_settings['waifuEdgeSide'] = 'left:0'; // 看板娘贴边方向，例如 'left:0'(靠左 0px), 'right:30'(靠右 30px) live2d_settings['waifuDraggable'] = 'disable'; // 拖拽样式，例如 'disable'(禁用), 'axis-x'(只能水平拖拽), 'unlimited'(自由拖拽) live2d_settings['waifuDraggableRevert'] = true; // 松开鼠标还原拖拽位置，可选 true(真), false(假) // 其他杂项设置 live2d_settings['l2dVersion'] = '1.4.2'; // 当前版本 live2d_settings['l2dVerDate'] = '2018.11.12'; // 版本更新日期 live2d_settings['homePageUrl'] = 'auto'; // 主页地址，可选 'auto'(自动), '{URL 网址}' live2d_settings['aboutPageUrl'] = 'https://www.lincrow.com/archives/322/'; // 关于页地址, '{URL 网址}' live2d_settings['screenshotCaptureName']= 'live2d.png'; // 看板娘截图文件名，例如 'live2d.png' /****************************************************************************************************/ String.prototype.render = function(context) { var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g; return this.replace(tokenReg, function (word, slash1, token, slash2) { if (slash1 || slash2) { return word.replace('\\', ''); } var variables = token.replace(/\s/g, '').split('.'); var currentObject = context; var i, length, variable; for (i = 0, length = variables.length; i < length; ++i) { variable = variables[i]; currentObject = currentObject[variable]; if (currentObject === undefined || currentObject === null) return ''; } return currentObject; }); }; var re = /x/; function empty(obj) {return typeof obj=="undefined"||obj==null||obj==""?true:false} function getRandText(text) {return Array.isArray(text) ? text[Math.floor(Math.random() * text.length + 1)-1] : text} function showMessage(text, timeout, flag) { if(flag || sessionStorage.getItem('waifu-text') === '' || sessionStorage.getItem('waifu-text') === null){ if(Array.isArray(text)) text = text[Math.floor(Math.random() * text.length + 1)-1]; if (live2d_settings.showF12Message) console.log('[Message]', text.replace(/<[^<>]+>/g,'')); if(flag) sessionStorage.setItem('waifu-text', text); $('.waifu-tips').stop(); $('.waifu-tips').html(text).fadeTo(200, 1); if (timeout === undefined) timeout = 5000; hideMessage(timeout); } } function hideMessage(timeout) { $('.waifu-tips').stop().css('opacity',1); if (timeout === undefined) timeout = 5000; window.setTimeout(function() {sessionStorage.removeItem('waifu-text')}, timeout); $('.waifu-tips').delay(timeout).fadeTo(200, 0); } function initModel(waifuPath, type) { /* console welcome message */ eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('8.d(" ");8.d("\\U,.\\y\\5.\\1\\1\\1\\1/\\1,\\u\\2 \\H\\n\\1\\1\\1\\1\\1\\b \', !-\\r\\j-i\\1/\\1/\\g\\n\\1\\1\\1 \\1 \\a\\4\\f\'\\1\\1\\1 L/\\a\\4\\5\\2\\n\\1\\1 \\1 /\\1 \\a,\\1 /|\\1 ,\\1 ,\\1\\1\\1 \',\\n\\1\\1\\1\\q \\1/ /-\\j/\\1\\h\\E \\9 \\5!\\1 i\\n\\1\\1\\1 \\3 \\6 7\\q\\4\\c\\1 \\3\'\\s-\\c\\2!\\t|\\1 |\\n\\1\\1\\1\\1 !,/7 \'0\'\\1\\1 \\X\\w| \\1 |\\1\\1\\1\\n\\1\\1\\1\\1 |.\\x\\"\\1\\l\\1\\1 ,,,, / |./ \\1 |\\n\\1\\1\\1\\1 \\3\'| i\\z.\\2,,A\\l,.\\B / \\1.i \\1|\\n\\1\\1\\1\\1\\1 \\3\'| | / C\\D/\\3\'\\5,\\1\\9.\\1|\\n\\1\\1\\1\\1\\1\\1 | |/i \\m|/\\1 i\\1,.\\6 |\\F\\1|\\n\\1\\1\\1\\1\\1\\1.|/ /\\1\\h\\G \\1 \\6!\\1\\1\\b\\1|\\n\\1\\1\\1 \\1 \\1 k\\5>\\2\\9 \\1 o,.\\6\\2 \\1 /\\2!\\n\\1\\1\\1\\1\\1\\1 !\'\\m//\\4\\I\\g\', \\b \\4\'7\'\\J\'\\n\\1\\1\\1\\1\\1\\1 \\3\'\\K|M,p,\\O\\3|\\P\\n\\1\\1\\1\\1\\1 \\1\\1\\1\\c-,/\\1|p./\\n\\1\\1\\1\\1\\1 \\1\\1\\1\'\\f\'\\1\\1!o,.:\\Q \\R\\S\\T v"+e.V+" / W "+e.N);8.d(" ");',60,60,'|u3000|uff64|uff9a|uff40|u30fd|uff8d||console|uff8a|uff0f|uff3c|uff84|log|live2d_settings|uff70|u00b4|uff49||u2010||u3000_|u3008||_|___|uff72|u2500|uff67|u30cf|u30fc||u30bd|u4ece|u30d8|uff1e|__|u30a4|k_|uff17_|u3000L_|u3000i|uff1a|u3009|uff34|uff70r|u30fdL__||___i|l2dVerDate|u30f3|u30ce|nLive2D|u770b|u677f|u5a18|u304f__|l2dVersion|LINCROW|u00b40i'.split('|'),0,{})); /* 判断 JQuery */ if (typeof($.ajax) != 'function') typeof(jQuery.ajax) == 'function' ? window.$ = jQuery : console.log('[Error] JQuery is not defined.'); /* 加载看板娘样式 */ live2d_settings.waifuSize = live2d_settings.waifuSize.split('x'); live2d_settings.waifuTipsSize = live2d_settings.waifuTipsSize.split('x'); live2d_settings.waifuEdgeSide = live2d_settings.waifuEdgeSide.split(':'); $("#live2d").attr("width",live2d_settings.waifuSize[0]); $("#live2d").attr("height",live2d_settings.waifuSize[1]); $(".waifu-tips").width(live2d_settings.waifuTipsSize[0]); $(".waifu-tips").height(live2d_settings.waifuTipsSize[1]); $(".waifu-tips").css("top",live2d_settings.waifuToolTop); $(".waifu-tips").css("font-size",live2d_settings.waifuFontSize); $(".waifu-tool").css("font-size",live2d_settings.waifuToolFont); $(".waifu-tool span").css("line-height",live2d_settings.waifuToolLine); if (live2d_settings.waifuEdgeSide[0] == 'left') $(".waifu").css("left",live2d_settings.waifuEdgeSide[1]+'px'); else if (live2d_settings.waifuEdgeSide[0] == 'right') $(".waifu").css("right",live2d_settings.waifuEdgeSide[1]+'px'); window.waifuResize = function() { $(window).width() <= Number(live2d_settings.waifuMinWidth.replace('px','')) ? $(".waifu").hide() : $(".waifu").show(); }; if (live2d_settings.waifuMinWidth != 'disable') { waifuResize(); $(window).resize(function() {waifuResize()}); } try { if (live2d_settings.waifuDraggable == 'axis-x') $(".waifu").draggable({ axis: "x", revert: live2d_settings.waifuDraggableRevert }); else if (live2d_settings.waifuDraggable == 'unlimited') $(".waifu").draggable({ revert: live2d_settings.waifuDraggableRevert }); else $(".waifu").css("transition", 'all .3s ease-in-out'); } catch(err) { console.log('[Error] JQuery UI is not defined.') } live2d_settings.homePageUrl == 'auto' ? window.location.protocol+'//'+window.location.hostname+'/' : live2d_settings.homePageUrl; if (window.location.protocol == 'file:' && live2d_settings.modelAPI.substr(0,2) == '//') live2d_settings.modelAPI = 'http:'+live2d_settings.modelAPI; $('.waifu-tool .fui-home').click(function (){ window.location = live2d_settings.homePageUrl; }); $('.waifu-tool .fui-info-circle').click(function (){ window.open(live2d_settings.aboutPageUrl); }); if (typeof(waifuPath) == "object") loadTipsMessage(waifuPath); else { $.ajax({ cache: true, url: waifuPath == '' ? live2d_settings.tipsMessage : (waifuPath.substr(waifuPath.length-15)=='waifu-tips.json'?waifuPath:waifuPath+'waifu-tips.json'), dataType: "json", success: function (result){ loadTipsMessage(result); } }); } if (!live2d_settings.showToolMenu) $('.waifu-tool').hide(); if (!live2d_settings.canCloseLive2d) $('.waifu-tool .fui-cross').hide(); if (!live2d_settings.canSwitchModel) $('.waifu-tool .fui-eye').hide(); if (!live2d_settings.canSwitchTextures) $('.waifu-tool .fui-user').hide(); if (!live2d_settings.canSwitchHitokoto) $('.waifu-tool .fui-chat').hide(); if (!live2d_settings.canTakeScreenshot) $('.waifu-tool .fui-photo').hide(); if (!live2d_settings.canTurnToHomePage) $('.waifu-tool .fui-home').hide(); if (!live2d_settings.canTurnToAboutPage) $('.waifu-tool .fui-info-circle').hide(); if (waifuPath === undefined) waifuPath = ''; var modelId = localStorage.getItem('modelId'); var modelTexturesId = localStorage.getItem('modelTexturesId'); if (!live2d_settings.modelStorage || modelId == null) { var modelId = live2d_settings.modelId; var modelTexturesId = live2d_settings.modelTexturesId; } loadModel(modelId, modelTexturesId); } function loadModel(modelId, modelTexturesId=0) { if (live2d_settings.modelStorage) { localStorage.setItem('modelId', modelId); localStorage.setItem('modelTexturesId', modelTexturesId); } else { sessionStorage.setItem('modelId', modelId); sessionStorage.setItem('modelTexturesId', modelTexturesId); } loadlive2d('live2d', live2d_settings.modelAPI+'get/?id='+modelId+'-'+modelTexturesId, (live2d_settings.showF12Status ? console.log('[Status]','live2d','模型',modelId+'-'+modelTexturesId,'加载完成'):null)); } function loadTipsMessage(result) { window.waifu_tips = result; $.each(result.mouseover, function (index, tips){ $(document).on("mouseover", tips.selector, function (){ var text = getRandText(tips.text); text = text.render({text: $(this).text()}); showMessage(text, 3000); }); }); $.each(result.click, function (index, tips){ $(document).on("click", tips.selector, function (){ var text = getRandText(tips.text); text = text.render({text: $(this).text()}); showMessage(text, 3000, true); }); }); $.each(result.seasons, function (index, tips){ var now = new Date(); var after = tips.date.split('-')[0]; var before = tips.date.split('-')[1] || after; if((after.split('/')[0] <= now.getMonth()+1 && now.getMonth()+1 <= before.split('/')[0]) && (after.split('/')[1] <= now.getDate() && now.getDate() <= before.split('/')[1])){ var text = getRandText(tips.text); text = text.render({year: now.getFullYear()}); showMessage(text, 6000, true); } }); if (live2d_settings.showF12OpenMsg) { re.toString = function() { showMessage(getRandText(result.waifu.console_open_msg), 5000, true); return ''; }; } if (live2d_settings.showCopyMessage) { $(document).on('copy', function() { showMessage(getRandText(result.waifu.copy_message), 5000, true); }); } $('.waifu-tool .fui-photo').click(function(){ showMessage(getRandText(result.waifu.screenshot_message), 5000, true); window.Live2D.captureName = live2d_settings.screenshotCaptureName; window.Live2D.captureFrame = true; }); $('.waifu-tool .fui-cross').click(function(){ sessionStorage.setItem('waifu-dsiplay', 'none'); showMessage(getRandText(result.waifu.hidden_message), 1300, true); window.setTimeout(function() {$('.waifu').hide();}, 1300); }); window.showWelcomeMessage = function(result) { var text; if (window.location.href == live2d_settings.homePageUrl) { var now = (new Date()).getHours(); if (now > 23 || now <= 5) text = getRandText(result.waifu.hour_tips.t23-5); else if (now > 5 && now <= 7) text = getRandText(result.waifu.hour_tips.t5-7); else if (now > 7 && now <= 11) text = getRandText(result.waifu.hour_tips.t7-11); else if (now > 11 && now <= 14) text = getRandText(result.waifu.hour_tips.t11-14); else if (now > 14 && now <= 17) text = getRandText(result.waifu.hour_tips.t14-17); else if (now > 17 && now <= 19) text = getRandText(result.waifu.hour_tips.t17-19); else if (now > 19 && now <= 21) text = getRandText(result.waifu.hour_tips.t19-21); else if (now > 21 && now <= 23) text = getRandText(result.waifu.hour_tips.t21-23); else text = getRandText(result.waifu.hour_tips.default); } else { var referrer_message = result.waifu.referrer_message; if (document.referrer !== '') { var referrer = document.createElement('a'); referrer.href = document.referrer; var domain = referrer.hostname.split('.')[1]; if (window.location.hostname == referrer.hostname) text = referrer_message.localhost[0] + document.title.split(referrer_message.localhost[2])[0] + referrer_message.localhost[1]; else if (domain == 'baidu') text = referrer_message.baidu[0] + referrer.search.split('&wd=')[1].split('&')[0] + referrer_message.baidu[1]; else if (domain == 'so') text = referrer_message.so[0] + referrer.search.split('&q=')[1].split('&')[0] + referrer_message.so[1]; else if (domain == 'google') text = referrer_message.google[0] + document.title.split(referrer_message.google[2])[0] + referrer_message.google[1]; else { $.each(result.waifu.referrer_hostname, function(i,val) {if (i==referrer.hostname) referrer.hostname = getRandText(val)}); text = referrer_message.default[0] + referrer.hostname + referrer_message.default[1]; } } else text = referrer_message.none[0] + document.title.split(referrer_message.none[2])[0] + referrer_message.none[1]; } showMessage(text, 6000); }; if (live2d_settings.showWelcomeMessage) showWelcomeMessage(result); var waifu_tips = result.waifu; function loadOtherModel() { var modelId = modelStorageGetItem('modelId'); var modelRandMode = live2d_settings.modelRandMode; $.ajax({ cache: modelRandMode == 'switch' ? true : false, url: live2d_settings.modelAPI+modelRandMode+'/?id='+modelId, dataType: "json", success: function(result) { loadModel(result.model['id']); var message = result.model['message']; $.each(waifu_tips.model_message, function(i,val) {if (i==result.model['id']) message = getRandText(val)}); showMessage(message, 3000, true); } }); } function loadRandTextures() { var modelId = modelStorageGetItem('modelId'); var modelTexturesId = modelStorageGetItem('modelTexturesId'); var modelTexturesRandMode = live2d_settings.modelTexturesRandMode; $.ajax({ cache: modelTexturesRandMode == 'switch' ? true : false, url: live2d_settings.modelAPI+modelTexturesRandMode+'_textures/?id='+modelId+'-'+modelTexturesId, dataType: "json", success: function(result) { if (result.textures['id'] == 1 && (modelTexturesId == 1 || modelTexturesId == 0)) showMessage(waifu_tips.load_rand_textures[0], 3000, true); else showMessage(waifu_tips.load_rand_textures[1], 3000, true); loadModel(modelId, result.textures['id']); } }); } function modelStorageGetItem(key) { return live2d_settings.modelStorage ? localStorage.getItem(key) : sessionStorage.getItem(key); } /* 检测用户活动状态，并在空闲时显示一言 */ if (live2d_settings.showHitokoto) { window.getActed = false; window.hitokotoTimer = 0; window.hitokotoInterval = false; $(document).mousemove(function(e){getActed = true;}).keydown(function(){getActed = true;}); setInterval(function(){ if (!getActed) ifActed(); else elseActed(); }, 1000); } function ifActed() { if (!hitokotoInterval) { hitokotoInterval = true; hitokotoTimer = window.setInterval(showHitokotoActed, 30000); } } function elseActed() { getActed = hitokotoInterval = false; window.clearInterval(hitokotoTimer); } function showHitokotoActed() { if ($(document)[0].visibilityState == 'visible') showHitokoto(); } function showHitokoto() { switch(live2d_settings.hitokotoAPI) { case 'hitokoto.cn': $.getJSON('https://v1.hitokoto.cn',function(result){ if (!empty(result.from)) { var text = waifu_tips.hitokoto_api_message['hitokoto.cn'][0]; text = text.render({source: result.from, creator: result.creator}); window.setTimeout(function() {showMessage(text, 3000, true);}, 5000); } showMessage(result.hitokoto, 5000, true); });break; case 'jinrishici.com': $.ajax({ url: 'https://v2.jinrishici.com/one.json', xhrFields: {withCredentials: true}, success: function (result, status) { if (!empty(result.data.origin.title)) { var text = waifu_tips.hitokoto_api_message['jinrishici.com'][0]; text = text.render({title: result.data.origin.title, dynasty: result.data.origin.dynasty, author:result.data.origin.author}); window.setTimeout(function() {showMessage(text, 3000, true);}, 5000); } showMessage(result.data.content, 5000, true); } });break; default: $.getJSON('https://api.gyhd.cc/get/onesay?tp=arr',function(result){ if (!empty(result.onesay)) { var text = waifu_tips.hitokoto_api_message['lincrow'][0]; text = text.render({from: result.from}); window.setTimeout(function() {showMessage(text, 3000, true);}, 5000); showMessage(result.onesay, 5000, true); } }); } } $('.waifu-tool .fui-eye').click(function (){loadOtherModel()}); $('.waifu-tool .fui-user').click(function (){loadRandTextures()}); $('.waifu-tool .fui-chat').click(function (){showHitokoto()}); } waifu-tips.json { "waifu": { "console_open_msg": ["哈哈，你打开了控制台，是想要看看我的秘密吗？"], "copy_message": ["你都复制了些什么呀，转载要记得加上出处哦"], "screenshot_message": ["照好了嘛，是不是很可爱呢？"], "hidden_message": ["我们还能再见面的吧…"], "load_rand_textures": ["我还没有其他衣服呢", "我的新衣服好看嘛"], "hour_tips": { "t5-7": ["早上好！一日之计在于晨，美好的一天就要开始了"], "t7-11": ["上午好！工作顺利嘛，不要久坐，多起来走动走动哦！"], "t11-14": ["中午了，工作了一个上午，现在是午餐时间！"], "t14-17": ["午后很容易犯困呢，今天的运动目标完成了吗？"], "t17-19": ["傍晚了！窗外夕阳的景色很美丽呢，最美不过夕阳红~"], "t19-21": ["晚上好，今天过得怎么样？"], "t21-23": ["已经这么晚了呀，早点休息吧，晚安~"], "t23-5": ["你是夜猫子呀？这么晚还不睡觉，明天起的来嘛"], "default": ["嗨~ 快来逗我玩吧！"] }, "referrer_message": { "localhost": ["欢迎阅读『", "』", " - "], "baidu": ["Hello! 来自 百度搜索 的朋友 你是搜索 ", " 找到的我吗？"], "so": ["Hello! 来自 360搜索 的朋友 你是搜索 ", " 找到的我吗？"], "google": ["Hello! 来自 谷歌搜索 的朋友 欢迎阅读『", "』", " - "], "default": ["Hello! 来自 ", " 的朋友"], "none": ["欢迎阅读『", "』", " - "] }, "referrer_hostname": { "example.com": ["示例网站"], "www.lincrow.com": ["LINCROW 的博客"] }, "model_message": { "1": ["来自 Potion Maker 的 Pio 酱 ~"], "2": ["来自 Potion Maker 的 Tia 酱 ~"] }, "hitokoto_api_message": { "lincrow": ["这句一言出自 『{from}』，收藏在 LINCROW 博客的经典语句中！"], "jinrishici.com": ["这句诗词出自 《{title}》，是 {dynasty}诗人 {author} 创作的！"], "hitokoto.cn": ["这句一言来自 『{source}』，是 {creator} 在 hitokoto.cn 投稿的。"] } }, "mouseover": [ { "selector": ".container a[href^='http']", "text": ["要看看 {text} 么？"] }, { "selector": ".fui-home", "text": ["点击前往首页，想回到上一页可以使用浏览器的后退功能哦"] }, { "selector": ".fui-chat", "text": ["一言一语，一颦一笑。一字一句，一颗赛艇。"] }, { "selector": ".fui-eye", "text": ["嗯··· 要切换 看板娘 吗？"] }, { "selector": ".fui-user", "text": ["喜欢换装 Play 吗？"] }, { "selector": ".fui-photo", "text": ["要拍张纪念照片吗？"] }, { "selector": ".fui-info-circle", "text": ["这里有关于我的信息呢"] }, { "selector": ".fui-cross", "text": ["你不喜欢我了吗..."] }, { "selector": "#tor_show", "text": ["翻页比较麻烦吗，点击可以显示这篇文章的目录呢"] }, { "selector": "#comment_go", "text": ["想要去评论些什么吗？"] }, { "selector": "#night_mode", "text": ["深夜时要爱护眼睛呀"] }, { "selector": "#qrcode", "text": ["手机扫一下就能继续看，很方便呢"] }, { "selector": ".comment_reply", "text": ["要吐槽些什么呢"] }, { "selector": "#back-to-top", "text": ["回到开始的地方吧"] }, { "selector": "#author", "text": ["该怎么称呼你呢"] }, { "selector": "#mail", "text": ["留下你的邮箱，不然就是无头像人士了"] }, { "selector": "#url", "text": ["你的家在哪里呢，好让我去参观参观"] }, { "selector": "#textarea", "text": ["认真填写哦，垃圾评论是禁止事项"] }, { "selector": ".OwO-logo", "text": ["要插入一个表情吗"] }, { "selector": "#csubmit", "text": ["要[提交]^(Commit)了吗，首次评论需要审核，请耐心等待~"] }, { "selector": ".ImageBox", "text": ["点击图片可以放大呢"] }, { "selector": "input[name=s]", "text": ["找不到想看的内容？搜索看看吧"] }, { "selector": ".previous", "text": ["去上一页看看吧"] }, { "selector": ".next", "text": ["去下一页看看吧"] }, { "selector": ".dropdown-toggle", "text": ["这里是菜单"] }, { "selector": "c-player a.play-icon", "text": ["想要听点音乐吗"] }, { "selector": "c-player div.time", "text": ["在这里可以调整播放进度呢"] }, { "selector": "c-player div.volume", "text": ["在这里可以调整音量呢"] }, { "selector": "c-player div.list-button", "text": ["播放列表里都有什么呢"] }, { "selector": "c-player div.lyric-button", "text": ["有歌词的话就能跟着一起唱呢"] }, { "selector": ".waifu #live2d", "text": ["干嘛呢你，快把手拿开", "鼠…鼠标放错地方了！"] } ], "click": [ { "selector": ".waifu #live2d", "text": [ "是…是不小心碰到了吧", "萝莉控是什么呀", "你看到我的小熊了吗", "再摸的话我可要报警了！⌇●﹏●⌇", "110吗，这里有个变态一直在摸我(ó﹏ò｡)" ] } ], "seasons": [ { "date": "01/01", "text": ["元旦了呢，新的一年又开始了，今年是{year}年~"] }, { "date": "02/14", "text": ["又是一年情人节，{year}年找到对象了嘛~"] }, { "date": "03/08", "text": ["今天是妇女节！"] }, { "date": "03/12", "text": ["今天是植树节，要保护环境呀"] }, { "date": "04/01", "text": ["悄悄告诉你一个秘密~今天是愚人节，不要被骗了哦~"] }, { "date": "05/01", "text": ["今天是五一劳动节，计划好假期去哪里了吗~"] }, { "date": "06/01", "text": ["儿童节了呢，快活的时光总是短暂，要是永远长不大该多好啊…"] }, { "date": "09/03", "text": ["中国人民抗日战争胜利纪念日，铭记历史、缅怀先烈、珍爱和平、开创未来。"] }, { "date": "09/10", "text": ["教师节，在学校要给老师问声好呀~"] }, { "date": "10/01", "text": ["国庆节，新中国已经成立69年了呢"] }, { "date": "11/05-11/12", "text": ["今年的双十一是和谁一起过的呢~"] }, { "date": "12/20-12/31", "text": ["这几天是圣诞节，主人肯定又去剁手买买买了~"] } ] } 加进 header.php 加进 footer.php（须 jQuery 支持） 或 实现自动加载，在 footer.php 的最后加上 autoload.js // 加载 CSS $(" ").attr({href: "https://www.example.com/path/waifu.css", rel: "stylesheet", type: "text/css"}).appendTo('head'); // 插入 DIV $('body').append(' '); // 加载 JS $.ajax({ url: 'https://www.example.com/path/waifu-tips.js', dataType:"script", cache: true, async: false }); $.ajax({ url: 'https://www.example.com/path/live2d.js', dataType:"script", cache: true, async: false }); // 初始化看板娘，加载 waifu-tips.json /* 可直接修改部分参数 */ live2d_settings['modelId'] = 5; // 默认模型 ID live2d_settings['modelTexturesId'] = 1; // 默认材质 ID /* 在 initModel 前添加 */ initModel('https://www.example.com/path/waifu-tips.json'); Demo https://www.lincrow.com/ (本站) https://live2d.gyhd.cc/demo/ 打包下载 看板娘 前端 源码 : Live2D 看板娘小样 模型切换 API 源码 : Live2D 看板娘插件API
（1）gitLab版本升级，是先小版本升级到最高版本，在升级到下一个大版本，进行依次升级 （2）比如：16.4.0->16.4.1->16.4.2->16.4.0 小版本升级到最高级，在向下一个版本升级 （3）升级前需要备份，或者做镜像、快照等操作 （4）升级完成后，重启服务，查看响应版本号是否正确 一、升级前备份 1、手动备份 gitlab-rake gitlab:backup:create 注意：gitlab升级的时候，会自动备份 2、配置文件备份 配置文件须备份 /etc/gitlab/gitlab.rb 二、检测最新版本 检测最新版本，若相邻版本可直接升级。 yum install gitlab-ce 三、开始升级 查看现版本：GitLab -> 帮助 查看官方版本： 查看 官方源：查看 清华源：查看 四、跨版本升级 逐步小版本升级 1.下载安装包 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.2.4-ce.0.el7.x86_64.rpm gitlab-ce-15.2.4-ce.0.el7.x86_64.rpm 为需要下载升级的版本 2.关闭部分gitlab服务（不要全关，因为升级中可能需要部分服务） gitlab-ctl stop unicorn gitlab-ctl stop sidekiq gitlab-ctl stop nginx 3.安装新版本 rpm -Uvh gitlab-ce-15.2.4-ce.0.el7.x86_64.rpm gitlab-ce-15.2.4-ce.0.el7.x86_64.rpm 为需要下载升级的版本 4.刷新配置 gitlab-ctl reconfigure 五、其他命令 1、停止所有服务 gitlab-ctl stop 2、GitLab停止某服务 gitlab-ctl stop 服务名 3、GitLab打开服务 gitlab-ctl start 4、GitLab停止某服务 gitlab-ctl start 服务名 5、查看Gitlab状态 gitlab-ctl status 6、恢复备份 gitlab-rake gitlab:backup:restore BACKUP=/var/opt/gitlab/backups/1665366086_2022_10_10_15.4.0_gitlab_backup.tar /var/opt/gitlab/backups/1665366086_2022_10_10_15.4.0_gitlab_backup.tar 为备份文件
DSM 服务需要使用特定的端口以确保功能正常运作，本文将列出 DSM 服务所需的网络端口及通讯协议。 设定工具 业务名称 端口编号 通讯协议 Synology Assistant 9999、9998、9997 UDP 备份 业务名称 端口编号 通讯协议 Active Backup for Business 5510(Synology NAS);443(vCenter Server 与 ESXi 主机)、902(ESXi 主机);445(Hyper-V 主机的 SMB)、5985(Hyper-V 主机的 HTTP)、5986(Hyper-V 主机的 HTTPS) TCP Data Replicator、Data Replicator II、Data Replicator III 9999、9998、9997、137、138、139、445 TCP DSM 5.2 资料备份、rsync、共享文件夹同步、远程 Time Backup 873、22(若通过 SSH 加密) TCP Hyper Backup (目的地端) 6281(远程 Synology NAS)、22(开启传输加密时使用 rsync)、873(关闭传输加密时使用 rsync) TCP Hyper Backup Vault 6281 DSM 7.0 或以上版本：5000(HTTP)、5001(HTTPS) TCP DSM 5.2 Archiving Backup 6281 TCP LUN 备份 3260(iSCSI）873、22(若通过 SSH 加密) TCP Snapshot Replication 5566(高级 LUN 和共享文件夹)、3261(旧版进阶 LUN) TCP 下载 业务名称 端口编号 通讯协议 BT DSM 2.0.1 或以上版本：16881 TCP / UDP DSM 2.0.1-3.0401 或较旧版本：6890-6999 eMule 4662 TCP 4672 UDP 网页应用程序 业务名称 端口编号 通讯协议 DSM 5000 (HTTP)、5001 (HTTPS) TCP 邮件服务 业务名称 端口编号 通讯协议 IMAP 143 TCP IMAP 含 SSL / TLS 993 TCP POP3 110 TCP POP3 含 SSL / TLS 995 TCP SMTP 协议 25 TCP SMTP-SSL 465 TCP SMTP-TLS 587 TCP 档案传输 业务名称 端口编号 通讯协议 AFP 548 TCP CIFS / SMB smbd：139 (netbios-ssn)、445 (microsoft-ds) TCP / UDP Nmbd：137、138 UDP FTP、FTP 含 SSL、FTP 含 TLS 21 （命令）、20 （主动模式的数据连接） TCP 1025 - 65535 （被动模式的数据连接） iSCSI 3260、3263、3265 TCP NFS 111、892、2049 TCP / UDP TFTP 69 UDP WebDAV 5005、5006 (HTTPS) TCP 套件 业务名称 端口编号 通讯协议 Audio Station 1900 （UDP）、5000 （HTTP）、5001 （HTTPS）、5353 （Bonjour 服务）、6001-6010 （AirPlay 控制 / 计时) TCP / UDP C2 Identity Edge Server 389 (LDAP), 7712 (HTTP), 8864 TCP 53 UDP Central Management System 5000 (HTTP)、5001 (HTTPS) TCP CIFS 向外延展丛集 49152 - 49252 TCP / UDP 17909、17913、19998、24007、24008、24009 - 24045、38465 - 38501、4379 TCP Cloud Station 6690 TCP DHCP Server 53、67、68 TCP / UDP DNS Server 53 (named) TCP / UDP LDAP Server （原名称为 Directory Server） 389 （LDAP）、636 （LDAP 含 SSL） TCP Download Station 5000 (HTTP)、5001 (HTTPS) TCP File Station 5000 (HTTP)、5001 (HTTPS) TCP Hybrid Share 50051 (catalog)、443 (API)、4222 (NATS) TCP iTunes 服务器 3689 TCP 日志中心 （syslog server） 514 （可添加更多端口） TCP / UDP Logitech® Media Server 3483、9002 TCP MailPlus Server 1344、4190、5000 (HTTP)、5001 (HTTPS)、5252、8500 - 8520、8893、9526 - 9529、10025、10465、10587、11211、11332 - 11334、12340、24245、24246 TCP MailPlus 网页客户端 5000 (HTTP)、5001 (HTTPS) TCP Mail Station 80 (HTTP)、443 (HTTPS) TCP 媒体服务器 1900 （UPnP）、50001 （针对媒体内容浏览）、50002 （针对媒体内容流） TCP / UDP Migration Assistant 7400-7499 (DRBD)、22 (SSH) DRBD Note Station 5000 (HTTP)、5001 (HTTPS) TCP Photo Station、Web Station 80 (HTTP)、443 (HTTPS) TCP Presto File Server 3360、3361 TCP / UDP Proxy Server 3128 TCP RADIUS Server 1812, 18120 UDP SMI-S Provider 5988 (HTTP)、5989 (HTTPS) TCP Surveillance Station 5000 (HTTP)、5001 (HTTPS) TCP Synology Calendar 5000 (HTTP)、5001 (HTTPS) TCP Synology CardDAV Server 8008 (HTTP)、8443 (HTTPS) TCP Synology Chat 5000 (HTTP)、5001 (HTTPS) TCP Synology Contacts 5000 (HTTP)、5001 (HTTPS) TCP Synology Directory Server 88 （Kerberos）、389 （LDAP）、464 （Kerberos 密码变更） TCP / UDP 135 （RPC 端点对应程序）、636 （LDAP SSL）、1024 （RPC）、3268 （LDAP GC）、3269 （LDAP GC SSL）、49152 （RPC）4、49300-49320 （RPC） TCP Synology Drive Server 80 （分享链接）、443 （分享链接）、5000 （HTTP）、5001 （HTTPS）、6690 （文件同步 / 备份） TCP Synology High Availability (HA) 123 (NTP)、ICMP、5000 (HTTP)、5001 (HTTPS) 1234、9997、9998、9999 (Synology Assistant)、874、5405、5406、7400 - 7999 (HA) TCP / UDP Synology Moments 5000 (HTTP)、5001 (HTTPS) TCP Synology Photos 5000 (HTTP)、5001 (HTTPS) TCP Video Station 1900 （UDP）、5000 （HTTP）、5001 （HTTPS）、9025 - 9040、5002、5004、65001 （使用 HDHomeRun 网络调谐器的情况） TCP / UDP Virtual Machine Manager 2379-2382 （丛集网络）、ICMP、3260-3265 （iSCSI）、5000 （HTTP）、5001 （HTTPS）、5566 （复写）、16509、16514、30200-30300、5900-5999 （QEMU）、2385 （Redis Server） TCP VPN Server (OpenVPN) 1194 UDP VPN Server (PPTP) 1723 TCP VPN Server (L2TP / IPSec) 500、1701、4500 UDP 行动应用程序 业务名称 端口编号 通讯协议 DS audio 5000 (HTTP)、5001 (HTTPS) TCP DS cam 5000 (HTTP)、5001 (HTTPS) TCP DS cloud 6690 TCP DS file 5000 (HTTP)、5001 (HTTPS) TCP DS finder 5000 (HTTP)、5001 (HTTPS) TCP DS get 5000 (HTTP)、5001 (HTTPS) TCP DS note 5000 (HTTP)、5001 (HTTPS) TCP DS photo 80 (HTTP)、443 (HTTPS) TCP DS video 5000 (HTTP)、5001 (HTTPS) TCP MailPlus 5000 (HTTP)、5001 (HTTPS) TCP Synology Drive 5000 (HTTP)、5001 (HTTPS) TCP Synology Moments 5000 (HTTP)、5001 (HTTPS) TCP Synology Photos 5000 (HTTP)、5001 (HTTPS) TCP 外围设备 业务名称 端口编号 通讯协议 Bonjour 5353 UDP LPR 515 UDP 网络打印机（IPP）/ CUPS 631 TCP 网络MFP 3240 - 3259 TCP 不断电系统 3493 TCP 系统 业务名称 端口编号 通讯协议 LDAP 389、636 (SLAPD) TCP MySQL 3306 TCP NTP 123 UDP 资源监控 / SNMP 161 TCP / UDP SSH / SFTP 22 TCP Telnet 23 TCP WS-Discovery 3702 UDP WS-Discovery 5357 (Nginx) TCP
很多小伙伴新买了 M1 /2芯片的 MacBook，而一些应用厂商也在快速的对自家的应用针对 Apple Silicon M1/2 进行原生适配。但还是有些应用没有适配，在运行的时候会出现闪退的情况，下面就教大家如何修复： [scode type="blue"]Rosetta 2是什么？[/scode] 苹果从 Intel 的 X86 芯片换到自研的 Apple Silicon M1/2 芯片后，原来 Intel 架构的应用在 M1/2上不兼容了，这需要应用厂商对自家的应用针对 Apple Silicon M1 /2进行原生适配更新，需要大量的时间，而且还有很多应用厂商不在更新自家应用了。 所以苹果为了这段时间的过渡，推出了 Rosetta 2 技术：Rosetta 2是一种仿真器，用于桥接 Intel 和 Apple 芯片之间的过渡。当你使用 Intel 架构的应用时，Rosetta 2都会在后台运行，自动翻译转化，使应用可以在 Apple 芯片的 Mac 上运行。 [scode type="blue"]查看应用的架构[/scode] 右键单击应用程序里的APP，选择 显示简介，种类中有三种类型：通用、Apple 芯片、Intel 通用 表示 App 既支持 Apple 芯片也支持 Intel 处理器，并且在默认情况下使用 Apple 芯片。一般通用 App 不需要 Rosetta。 Apple 芯片 表示 App 仅支持 Apple 芯片，不能在 Intel 处理器上安装。 Intel 表示 App 仅支持 Intel 处理器，并且需要 Rosetta 才能在搭载 Apple 芯片的 Mac 上运行。 如果没有这个选项的的话，是电脑未安装 Rosetta 2，需要执行以下命令安装一下，我们打开终端（command+空格 聚焦搜索：终端），复制以下命令粘贴到终端并回车执行： /usr/sbin/softwareupdate --install-rosetta --agree-to-license 安装完成后，勾选重新打开应用就可以了
MacOS苹果系统出现「意外退出」及「崩溃闪退」问题修复方法
最近有部分网友反映更新系统后有很多软件打不开，或者出现闪退的情况，其实是因为Apple苹果公司在新系统中删除了TNT/HCISO的证书。 先安装Command Line Tools 工具，打开终端，复制以下命令粘贴到终端： xcode-select --install 弹出安装窗口后选择安装，安装过程需要几分钟，请耐心等待。安装过【xcode-select】不用再次安装，直接看下面的终端签名教程 [scode type="blue"]终端签名教程[/scode] 安装完成后对应用进行签名，复制以下命令粘贴到终端： sudo codesign --force --deep --sign - 注意最后的–后面加一个空格！然后打开Finder（访达），点击左侧的 应用程序，找到相关应用拖进终端，然后按下回车键，输入电脑的开机密码（输入过程中密码是看不到的）输入完成后再按下回车键即可。 正常情况下只有一行提示，即成功： /文件位置 : replacing existing signature 如遇如下错误： /文件位置 : replacing existing signature /文件位置 : resource fork,Finder information,or similar detritus not allowed 先在终端执行： xattr -cr 应用路径（直接将应用拖进去） 然后再次执行如下指令即可： codesign --force --deep --sign - 应用路径（直接将应用拖进去） 到这儿，百分之九十五的应用都可以正常运行了。如果还不行，那要关闭SIP了。 关闭SIP教程:[button color="info" icon="" url="/archives/259/" type="round"]点我查看[/button]
[scode type="yellow"]出现的原因[/scode] 这是因为 mac 启用了新的安全机制 苹果默认是只允许安装自家「App Store」来源的应用，够霸道的！如果你想安装第三方的，那么需要在 【系统偏好设置】 -> 【隐私与安全性】 -> 【安全性】 中勾选「App Store 和被认可的开发者」选项，而被认可的开发者是需要购买苹果的企业证书对应用进行签名，然后再提交给苹果审核才可以的，这一点对破解应用来说很不现实，因为破解应用必定会修改应用的文件，从而导致签名证书失效。 解决方法就是要开启「任何来源」选项，但是 mac 默认是隐藏了这个选项的，需要手动通过终端执行命令行代码来开启。 [scode type="blue"]如何开启「任何来源」选项：[/scode] 先打开 【系统偏好设置】 -> 【安全与隐私】 -> 【安全性】或者【通用】 选项卡，检查是否已经启用了「任何来源」选项。如果没有启用，先点击左下角的小黄锁图标解锁，然后选中任何来源。 ⚠️注意！如果没有「任何来源」选项，我们打开终端（command+空格 聚焦搜索：终端），复制以下命令粘贴到终端： sudo spctl --master-disable 然后按下回车键，出现钥匙图标后输入电脑的开机密码（输入过程中密码是看不到的）输入完成后再按下回车键即可。现在回到 【系统偏好设置】 -> 【安全性与隐私】 -> 【安全性】或者【通用】 里，就会发现已选中任何来源选项了。 到这里一般情况下应用都可以运行了 然而有的应用，尤其是游戏开启了任何来源还是不行，这是因为苹果进一步收缩了对未签名应用的权限，这时候就需要通过终端执行命令行代码来绕过应用签名认证就可以了。 [scode type="yellow"]绕过公证Gatekeeper（移除这个应用的安全隔离属性）也解决应用损坏打不开！[/scode] 这是需要我们移除镜像的 Quarantine 属性 这里给大家科普下知识：苹果系统有一个GateKeeper保护机制（自 OSX 10.5 加入）。从互联网上下载来的文件，会被自动打上com.apple.quarantine标志，翻译过来就是免疫隔离，系统根据这个附加属性对这个文件作出限制。 打开终端，复制以下命令粘贴到终端： sudo xattr -rd com.apple.quarantine 注意最后quarantine 后面加一个空格！然后打开Finder（访达），点击左侧的 应用程序，找到相关应用，拖进终端quarantine 的后面，然后按下回车键，出现钥匙图标后输入电脑的开机密码（输入过程中密码是看不到的）输入完成后再按下回车键即可。 到这里一般情况下应用都可以运行了，还是打不开的 Finder-应用程序，找到你打开损坏的App，鼠标右键打开即可
MacOS苹果系统如何关闭SIP系统完整性保护方法
许多Mac用户反应，装了部分软件后打不开，那可能是sip系统完整性没有关闭。下面我们就来看一下如何关闭sip系统完整性。 [scode type="blue"]SIP是什么？[/scode] 系统完整性保护是 macOS 所采用的一项安全技术，能够帮助防止潜在恶意软件修改 Mac 上受保护的文件和文件夹。系统完整性保护可以限制 root 用户帐户，以及 root 用户能够在 Mac 操作系统的受保护部分完成的操作。 这可能对一些新人来说不太好理解，我们换一个说法，SIP 类似 Windows 的防火墙，安卓手机 Root，这应该可以解决很多的人困惑。 要更好的理解 SIP 可以做什么，我们需要先来了解一个概念：沙盒。 [scode type="blue"]沙盒[/scode] macOS 自从 10.6 系统开始引入了沙盒机制，规定发布到 Mac App Store 中的应用必须使用并遵守沙盒约定。沙盒对应用访问的系统文件、硬件信息、网络等等都做了严格的限制，这样可以防止恶意的 App 通过系统漏洞来攻击系统并获取控制权限，也可以避免应用越权执行不安全的操作导致系统出现故障，从而保障 macOS 系统的安全。 沙盒相当于给每个 App 一个独立的空间，你只能在自己的小天地里面玩耍，要获取自己空间之外的资源必须获得授权（这个也有限制，只能获取有限的资源）。 现在你就大致了解沙盒是什么了。上面说了，因为 Mac App Store 中的应用必须要遵循沙盒约定，所以苹果应用商店的软件都是用沙盒运行的，无法访问修改系统底层文件，所以大部分软件如果想做的功能强一些又想上架 AppStore 那只能发阉割版的了。很多优秀软件没有在 Apple Store 上架就是因为需要一些沙盒外的资源权限，于是一些软件采取双版本，分为官方版全功能版和 App Store 精简版，就是因为这个原因，比如腾讯柠檬之类的系统应用。 你应该能也看出来，苹果为了大家的系统安全可真是煞费苦心。 [scode type="blue"]macOS 应用的安全划分[/scode] 综上所述，我们可以把 macOS 应用按安全来划分为这三类： 沙盒运行：严格遵守苹果的沙盒机制，只能访问限定的目录及执行有限的操作 未关闭 SIP 且不使用沙盒运行：除系统底层受保护的文件外，通过用户授权后可以访问及修改任意文件 关闭 SIP 且不使用沙盒运行：几乎可以访问及修改所有系统文件。 [scode type="blue"]关闭 SIP 的影响[/scode] 关闭 SIP 后运行应用将不会再提示： 常见报错一：无法打开xxx，因为 Apple 无法检查其是否包含恶意软件/因为它来自身份不明的开发者/因为无法验证开发者 常见报错二：xxx已损坏，无法打开，您应该将它移到废纸篓 也就是说，只要应用本身可以运行，那不管应用是否签名/公证，不管应用是不是恶意应用，你打开后它都会直接运行在你的系统中，此时你的电脑如同透明，毫无安全可言，它可以操作你系统的所有文件，如果这个应用是恶意应用，如果你不小心对它授权过，那它后面可以不经你允许在你系统上进行任何操作。 所以如非必要，不建议大家关闭 SIP！如果一定要使用某个需要关闭 SIP 的应用，那一定要自行判断一下应用的来源是否安全。 [scode type="blue"]检查SIP状态[/scode] 在sip系统完整性关闭前，我们先检查是否启用了SIP系统完整性保护。 在终端（command+空格 聚焦搜索：终端）上输入以下命令然后回车： csrutil status 你会看到以下信息中的一个，指示SIP状态 未关闭 enabled System Integrity Protection status: enabled 已关闭 disabled System Integrity Protection status: disabled 如果是未关闭状态就需要关闭SIP了! [scode type="blue"]如何关闭SIP[/scode] 1、 关机，然后重新启动你的Mac电脑，在开机时一直按住 Command+R 迸入Recovery模式（m1改为长按电源键，点击选项，选择一个用户进去） 2、 进入Recovery模式后在顶部菜单栏点击 实用工具 -> 终端 3、 在终端上输入以下命令然后回车： csrutil disable 4、点击左上角苹果图标，点击重新启动 [scode type="blue"]如何开启SIP[/scode] 1、 关机，然后重新启动你的Mac电脑，在开机时一直按住 Command+R 迸入Recovery模式（m1改为长按电源键，点击选项，选择一个用户进去） 2、 进入Recovery模式后在顶部菜单栏点击 实用工具 -> 终端 3、 在终端上输入以下命令然后回车： csrutil enable 4、点击左上角苹果图标，点击重新启动