TCP完成简易GET

咕咕咕,这段时间主要是期中考试…还关注了几天黑五…然后拖到今天才写完…

这是第一个,用仅TCP实现GET功能

import socket
import ssl
s=ssl.wrap_socket(socket.socket())
s.connect(('www.bilibili.com', 443))
s.send('GET / HTTP/1.1\r\n'.encode())
s.send('Host: www.bilibili.com\r\n'.encode())
s.send('User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36\r\n'.encode())
s.send('Connection: close\r\n\r\n'.encode())
response=b""
while 1:
    temp = s.recv(1024)
    if temp:
        response+=temp
    else:break
s.close()
response=response.decode("utf8").split("\r\n\r\n")[1]
f = open('bilibili.html','w',encoding='utf-8')
f.write(response)
f.close()

这样就行了,很简单的,就是输出出来的文件会有点奇怪:

有些地方UTF-8无法解析,谁来救救我…

参考了许多大佬的文章,在此一并感谢

Python爬取网易云歌手信息

这个同样是作业…

早写完了,鸽了好久才发出来…

首先是根据指定歌手id获取歌手名和简介

import requests
import re
def spider(id):
    url="https://music.163.com/m/artist?id="+id
    headers={"user-agent": "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1"}
    response=requests.get(url,headers=headers)
    response=response.text
    singer=re.findall(r'<meta name="keywords" content="(.*?)" />',response)
    introduce=re.findall('"briefDesc":"(.*?)"',response)
    result=dict(zip(singer,introduce))
    print(result)
id=input('请输入歌手id:\n')
spider(id)

我发现移动版的网易云更好搞,不需要cookie啥的,只要有个UA就能获取成功…

然后稍微处理一下就能取得信息了…

然后是获取所有亚洲男歌手id和姓名

import requests
import re
def spider(id):
    url="https://music.162.com/discover/artist/cat?id=1001&initial="+str(id)
    headers={"user-agent": "Mozilla/4.0 (Windows NT 10.0; Win64; x64; Cortana 1.11.6.17763; 10.0.0.0.17763.805) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"}
    response=requests.get(url,headers=headers)
    response=response.text
    singer=re.findall(r'<a href="/artist\?id=(.*?)" class="nm nm-icn f-thide s-fc-1" title="(.*?)的音乐"',response)
    singer=dict(singer)
    return singer
list={64,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0}
singers=spider(-2)
for id in list:
    singers=dict(singers,**spider(id))
print(singers)

这个也很简单…UA用的Cortana的…虽然不知道有什么用…

就这样吧,这次的没什么难度

如何做一个假wei斯

这个其实也是在完成作业时的副产品,之所以选择百度就是因为便宜还有易于开发

一、获取百度SDK

首先,你需要拥有一个百度账号(估计都有吧,这年代还有人不用百度云?)

然后,登陆 https://console.bce.baidu.com/ai/#/ai/speech/overview/index 创建应用,接口默认即可

点击查看应用详情,获取 AppID,API Key,Secret Key

安装Python SDK

pip install baidu-aip

无pip也可在应用页下载SDK手动安装,解包后执行

python setup.py install

二、安装依赖

这部分没pip的只有自己想办法了…

除SDK外,还需安装playsound,pyaudio,scipy,numpy

第一个用于播放合成出来的语音

后面三个主要用在录音环节

依次执行

pip install 包名

如果pyaudio无法安装

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio 下载对应包

pip install 包名.whl

即可完成安装

另外,还需对playsound进行修改,否则循环时会一直占用音频文件,导致无法写入

请参考 python下playsound模块解除占用

三、码代码

我们分成四个部分来完成

第一部分:语音识别

参考官方文档,我们首先需要将之前获得的APP_IDAPI_KEYSECRET_KEY 填入

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

再参照文档中的示例

# 读取文件
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 识别本地文件
client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {
    'dev_pid': 1536,
})

这个示例是将目录下的audio.pcm上传识别

因此,能想到,如果有什么方法能自动录音,判断我们已经停止说话,然后将文件上传识别,那么这个模块就已经完善

然而,我对这个自动录音想的太过简单,最终,录音部分通过对python录音程序提供的源码进行修改实现

大佬的源码非常完善,我们只需要对其中几个参数进行修改即可,录音阈值可以按环境进行适度调整,为了美观,可以将其中的两个print进行修改

删除源码的最后两行,保存为record.py

录音模块便制作完成

将其import后就可以直接调用了,我们可以直接recording(‘in.wav’)完成录音

再看回百度这边,client.asr调用后会返回一个dict,处理起来非常方便,只需dict.get(‘result’)就可以获取到[‘内容’]形式的结果

我通过对字符串的简单处理去除了[‘和’]

questionall = client.asr(get_file_content('in.wav'), 'pcm', 16000, {'dev_pid': 1536, }) # 此部分实现语音识别,返回值在questionall内
questional = str(questionall.get('result'))
    lens = int(len(questional))
    ques = questional[2:lens - 2]str(questionall.get('result')) # 此部分将结果提取并转为字符串
lens = int(len(questional)) # 获取字符串长度
ques = questional[2:lens - 2] # 只保留内容到ques

第二部分:调用机器人

因为懒,我直接用了一个百度出来的机器人http://api.qingyunke.com/ 说实话,还蛮好的

我们通过GET来获取回答,信息已存入message中,需注意,message必须urlencode,否则可能报错

r=requests.get('http://api.qingyunke.com/api.php?key=free&appid=0&msg='+message)

结果为一个dict和json都会报错的东西(大概是我太蔡了),所以我只能再次进行字符串处理

answer=str(r.json()) # 转为字符串
lens=int(len(answer)) # 计算长度
ans=answer[26:lens-2] # 保留结果

第三部分:语音合成

同样,根据官方文档

result  = client.synthesis('你好百度', 'zh', 1, {
    'vol': 5,
})

# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
    with open('auido.mp3', 'wb') as f:
        f.write(result)

所以我们只需把‘你好百度’换成我们需要的文字即可,可以修改参数来优化语音

播放语音通过playsound(‘out.mp3’)实现

第四部分:逻辑主体

这里主要是逻辑方面的编写,你们自己看着办吧…

比如一阵机械的嘘寒问暖之后,开始循环,直到识别到关键字退出或进行指定回答…

最终节:出来吧,假wei斯

唔,我还是直接贴代码吧,不想写了,安装完依赖后,直接执行应该能得到一个假wei斯吧…(记得替换APP_ID啥的,record.py必须在同目录下)

from aip import AipSpeech
import requests
import urllib.parse
from record import recording
from playsound import playsound

# 认证部分
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 读取文件
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 录音并调用SDK进行语音识别,输出并返回结果
def voice():
    recording('in.wav')
    questionall = client.asr(get_file_content('in.wav'), 'pcm', 16000, {'dev_pid': 1536, })
    questional = str(questionall.get('result'))
    lens = int(len(questional))
    ques = questional[2:lens - 2]
    print('.',end='')
    print(ques)
    ques = urllib.parse.quote(ques)
    return ques

# 根据给入的文字调用SDK输出并播放音频
def voiceout(message):
    result  = client.synthesis(message, 'zh', 1, {'vol': 5,})
    if not isinstance(result, dict):
        with open('out.mp3', 'wb') as f:
            f.write(result)
    playsound('out.mp3')

# 向机器人发送信息并对返回值处理
def ai(message):
    r=requests.get('http://api.qingyunke.com/api.php?key=free&appid=0&msg='+message)
    answer=str(r.json())
    lens=int(len(answer))
    ans=answer[26:lens-2]
    return ans

# 程序主体
print('欢迎使用聊天机器人')
ainame=input('给你的机器人取个名字吧\n')
name=input('你叫什么名字?\n')
print(ainame,':你好',name,',说些什么吧')
voiceout('你好,'+name+',说些什么吧')
i=1;
while i==1:
    print(name,':',end='')
    requ=voice()
    requ=urllib.parse.unquote(requ)
    if '再见' in requ or '晚安' in requ or '退出' in requ or '拜拜' in requ:
        i=0
    anse=ai(requ)
    if anse=='未获取到相关信息':
        anse='听不清,请再说一遍'
    print(ainame,':',anse)
    voiceout(anse)
print('谢谢使用!')
voiceout('谢谢使用!')

最后,再次感谢百度SDK,聊天机器人录音脚本playsound修改等教程或服务的作者或开发者

利用Docker一键安装WordPress

同样,这也是社团任务…

这次,我选用Centos8来进行

配置Docker及系统环境

首先,安装Docker

推荐使用自动脚本安装(省事,快捷),通过mirror选项更换国内源

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun

启用Docker

systemctl enable docker
systemctl start docker

开启v4转发(不开就没法关防火墙…容器也可能连不了外网)

vi /etc/sysctl.conf
#在其中添加
net.ipv4.ip_forward=1
#重启网络生效
systemctl restart network

关闭防火墙及SELinux(也是因为懒)

#停止firewalld服务
systemctl stop firewalld
#禁止firewalld自起
systemctl disable firewalld
#临时关闭SELinux
setenforce 0
#永久关闭SELinux
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled

使用YAML一键构建

建立一个wordpress.yml文件

vi wordpress.yml

在其中键入(3.1版语法)

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 80:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpressuser
      WORDPRESS_DB_PASSWORD: wordpresspass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress:/var/www/html

  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpressuser
      MYSQL_PASSWORD: wordpresspass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

以上根据官方文档修改

一键安装

docker stack deploy -c stack.yml wordpress

安装完成后可通过http://swarm-iphttp://localhost, or http://host-ip访问

附1:

我是使用DaoCloud一键构建的,但由于平台只支持YAML 2.0,因此,我修改了上方代码,形成下方代码(适用于DaoCloud,别的不清楚)

wordpress:
  image: wordpress
  ports:
  - 80:80
  environment:
  - WORDPRESS_DB_HOST=db
  - WORDPRESS_DB_USER=wordpress
  - WORDPRESS_DB_PASSWORD=password
  - WORDPRESS_DB_NAME=wordpress
  restart: always
  links:
  - db
  volumes:
  - wordpress:/var/www/html
db:
  image: mariadb
  restart: always
  environment:
  - MYSQL_DATABASE=wordpress
  - MYSQL_USER=wordpress
  - MYSQL_PASSWORD=password
  - MYSQL_RANDOM_ROOT_PASSWORD='1'
  volumes:
  - db:/var/lib/mysql

附2:

还顺便研究了下Minecraft的Docker一键部署(同样2.0版)

minecraft:
  image: index.docker.io/itzg/minecraft-server:20190824  //有新版本自行更换
  privileged: false
  restart: always
  ports:
  - 25575:25575  //推荐更改此端口,这个为控制端口
  - 25565:25565
  volumes:
  - /data:/data
  environment:
  - EULA=TRUE  //不同意不能部署

详见 https://hub.docker.com/r/itzg/minecraft-server

如何在Ubuntu下手撸LNMP并安装WordPress

前言&Centos8上的失败尝试

手撸LNMP,这个对我来说久远的记忆…(自从用了LNMP一键脚本后,除了特殊环境和省时间外我就没再亲自做了…更何况后来发现更好用的面板)上次手撸LNMP还是高二…(R1D上哦,教程什么的等寒假回家了再说吧) 这次由于社团要求,我首先想到了在Centos8环境进行,毕竟用作服务器似乎Centos好点?… 开始安装后,我首先执行了

yum install nginx php mariadb mariadb-server 

然后初始化数据库mysql_secure_installation,初始化结束后,开始配置nginx和php 由于Centos自带php、nginx默认使用sock,所以不需要其他设置就能通过PHP info验证… 但当我将探针放上去却频繁报错…(搞了1天,日志什么的都看了,没法解决,而且网上似乎也没解决方案…)所以我决定将Centos环境换成Ubuntu18.04

LNMP环境安装

先更新软件源

sudo apt update

安装nginx,php,mariadb

sudo apt install nginx php-fpm php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip php-mysql mariadb-server mariadb-client 

配置nginx

首先,设置nginx自起并启动

sudo systemctl start nginx.service
sudo systemctl enable nginx.service 

这里使用多站点配置方案

sudo vi /etc/nginx/sites-available/wordpress

将以下内容贴入(仅启用了http)

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index  index.php index.html index.htm;
    server_name _;

    client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;        
    }

    location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass             unix:/var/run/php/php7.2-fpm.sock;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

启用配置文件

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

重载nginx

sudo systemctl reload nginx

可用sudo nginx -t检查语法错误

配置数据库

同样,启用数据库

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

初始化数据库

sudo mysql_secure_installation

初始化后,进入数据库

mysql -u root -p

新建数据库

CREATE DATABASE xxx DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
xxx为数据库名,自行修改

创建用户管理该数据库

GRANT ALL ON xxx.* TO 'xxxuser'@'localhost' IDENTIFIED BY 'password';
xxx为刚才数据库名,xxxuser为用户,password为用户密码,自行修改

刷新权限并退出

FLUSH PRIVILEGES;

安装Wordpress

cd /var/www/html/wordpress
wget https://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz
mv wordpress/* .
rm -rf wordpress
sudo chown -R www-data:www-data /var/www/html/wordpress

进入127.0.0.1或localhost即可载入wordpress安装程序

安装到此结束

参考文献较杂较多,在此无法列出,见谅

这是用Makedown写的哟,最近有学Makedown哟

Surface Book の 奇幻之旅

为了方便做笔记以及提高生产力,我决定采购一台支持笔书写的平板用于学习,在进行深思熟虑后(排除一堆国产杂牌,排除某果),我选择了信仰苏菲,平衡了性能与预算后,我选择购入一台Book丐版展示机(买笔买拓展坞还是花了好多…)

Book预装的是已经濒临抛弃的1703,因此给系统升个级是必须操作,排除咖喱系统1903,1803和1809便是最佳选择,考虑网友对1809的文件夹创建卡顿颇有微词,我从msdn上下载了1803的最新补丁版

此处省略万字升级过程,按安装程序装的去就是了,记得装完再更新一下…

由于学习需要,我需要对苏菲进行Win10 X Linux

参考 https://www.jianshu.com/p/3d74e90af751 内容

我对C盘进行了30G压缩并制作了Elementaryos(基于Ubuntu18.04,又有超帅界面,骚年你还犹豫什么)启动盘

修改启动顺序,关闭TPM与Secure Boot后,需要输入BitLocker解锁码(咋没人提这个呢,一定要解密,一定要解密,不然你会被每切一次系统就要输一次解锁码烦死),并且需要重置pin,然后Win10这边就莫问题了

将制作好的启动U盘插入苏菲,系统会自动引导,之后按Ubuntu安装套路安装就行了

安装完成后,需进行驱动安装 https://github.com/jakeday/linux-surface (把脚本跑一遍,然后装上内核即可)

至此,这篇对小白极不友善的教程结束

R1D,从入门到入土

闲来无事,被 无限搁置 的几年前因断电导致硬盘gg的R1D修复项目重新被我想起,鉴于NAS征用了原先的HDD,且考虑到该盘极差的面对断电能力,于是窝在马云家购入一个120G SSD用作主盘

一、刷机

本部分参照网络,只做摘录(我的R1D几年前就刷了,哪记得那么多)

1.打开SSH

必须升为开发版才能开启SSH,链接

下载开启SSH工具包,详见官网

这里只介绍官方方法,其他办法见 http://blog.sina.com.cn/s/blog_680965aa0102yfx1.html

2.备份

小心驶得万年船,翻车了有备份也能翻回来

原理不做解释,详情

下载脚本

然后复制到U盘,在U盘上执行 ./backup.sh 即可

3.刷tomato

先下载固件: https://bitbucket.org/tsynik/tomato-arm/downloads/

以及工具包:http://pan.baidu.com/s/1cMhaKA (内含backup.sh)

在后台记录下MAC

用工具包内的cfe编辑器编辑 cfe_stock.bin ,按图示修改

保存为 cfe.bin

将cfe.bin文件以及工具包里的flash-cfe.sh放到U盘,插入待用

SSH连接路由,cd到U盘,执行 ./flash-cfe.sh

更换完成后,取下U盘,妥善保存备份

确定刷机后门存在

nvram set boot_wait=on && nvram set wait_time=10 && nvram commit && nvram show |grep wait

返回 boot_wait=on wait_time=10 即为成功

关闭路由,将电脑连接路由,设置网卡如下

 固定IP:192.168.1.2
 子网掩码:255.255.255.0
 网关:192.168.1.1

将路由通电,电脑访问192.168.1.1

选择之前下载的固件即可刷机

等待路由灯变蓝代表刷机成功,将网卡改回自动

管理账号及密码默认admin

二、玩法

这是我今天实际操作的部分

以下操作大多在SSH中进行

1.安装TT软件中心

有硬盘的请参照以下部分

刚买的硬盘默认没有分区,我们需要先

fdisk -l

可以发现一个盘没有分区,然后

fdisk /dev/sda #具体是sd什么自行更改
n #新建分区
p #主分区
1 #分区1
接下来默认即可
w #写入

新分区需要进行格式化才能使用,如果数据不要也可执行

mkfs.ext4 -n /dev/sda1 #自行修改

然后在后台可直接挂载

如果你要保留数据(推荐备份出来)以上均无需操作

接下来

mkdir -p /mnt/sda1/jffs #建立目录
mount -o bind /mnt/sda1/jffs /jffs #挂载到/jffs
eval `/usr/bin/wget -q -O - https://ttsoft.ngrok.wang/softcenter/ttsoft` #安装软件中心
注意事项:软件中心会修改你原来默认端口为9527,然后反代原来的端口,意思就是:使用默认端口才能正常访问软件中心,9527是访问系统默认端口,不能使用软件中心,如果原来的默认端突然进不去了,可以尝试9527进入重启路由试试。
因为很多人执行以上的命令完成后发现左侧的菜单栏并没有显示软件中心的字样以为没有安装成功,其实不然,你可以安装完后打开这个链进行验证http://192.168.1.1/#soft-center.asp  如果能成功进入到这个软件中心的界面那就是安装成功了。 

之后到这里进行设置http://192.168.1.1/#admin-scripts.asp

在初始化第一行加入

service usb start
mount -o bind /mnt/sda1/jffs /jffs

至此,软件中心安装完成,可以重启验证(每次访问均要手动输入http://192.168.1.1/#soft-center.asp

无硬盘安装,参照 https://koolshare.cn/thread-162086-1-1.html

2.安装Entware

执行以下命令

mkdir -p /mnt/sda1/opt #建立目录
mount -o bind /mnt/sda1/opt /opt #挂载到/opt
wget http://bin.entware.net/armv7sf-k2.6/installer/generic.sh #下载安装脚本
chmod +x generic.sh #赋予执行权限
./generic.sh #执行

该网站由Cloudflant加速,出现网络错误可自行搭建反代

将此文本粘贴到USB设置中的“挂载后运行”框

#!/bin/sh
/opt/etc/init.d/rc.unslung start

将此文本粘贴到“卸载前运行”框

#!/bin/sh
/opt/etc/init.d/rc.unslung start

在管理脚本页的初始化一栏添加

mount -o bind /mnt/sda1/opt /opt

Entware安装完成,之后可使用opkg自行探索

咕咕咕…

8.25 补充

今天看到极御云安全有提供免费CDN,于是对entware官方源进行了反代,CDN服务器位于洛杉矶(将于下月切换至国内),尚未测试是否对速度有增益(反正对于我这垃圾移动体验极好)

修改/opt/etc/opkg.conf

vi /opt/etc/opkg.conf

将其中bin.entware.net换为entware.yes1.cn,wq保存,执行

opkg update

即可,如安装脚本都无法下载,亦进行如上替换

另:提供上海堡垒资源一份(找了半天…)自行下载

Netsarang系列软件官方下载及”注册码”

Xshell是连接小鸡的常用工具,但试用版有窗口数限制,网上的破解版又让人不敢轻易使用…在参考了 https://51.ruyo.net/11447.html 后,提供获取链接的途径

首先,在官网 https://www.netsarang.com/zh/xshell-download/ 申请评估

然后点击链接开始下载

在下载页可以看到文件链接

将链接复制出来,例如:https://cdn.netsarang.net/1232b308/Xshell-6.0.0147.exe

只需修改 Xshell-6.0.0147.exe 为目标文件即可

实践发现,文件末尾为r为商业版,p为家庭版,无标识为试用版

Xshell 5
商业版:https://cdn.netsarang.net/1232b308/Xshell-5.0.1339r.exe
商业评估版:https://cdn.netsarang.net/1232b308/Xshell-5.0.1339.exe
社区版:https://cdn.netsarang.net/1232b308/Xshell-5.0.1339p.exe
Xshell 6
商业版:https://cdn.netsarang.net/1232b308/Xshell-6.0.0147r.exe
商业评估版:https://cdn.netsarang.net/1232b308/Xshell-6.0.0147.exe
社区版:https://cdn.netsarang.net/1232b308/Xshell-6.0.0147p.exe

链接有效期至19.9.7,如需其他软件自行修改,近期历史版本也可通过修改版本号获得(我只试出6.0.0146能下载)

激活请参照 https://51.ruyo.net/11447.html 相关部分,但需提醒的是,如今Xshell6需要联网才能激活,而老版的无法获取,因此推荐使用Xshell5…

国产山寨平板 の 后续

呃呃呃,上回说到学习平板不能安装任何应用(除了Kingroot),经过查询,许多文章均有提及如何彻底禁止安装应用,思路大致为系统初始化完成后修改createDataDirsLI函数使之失效…然而这是在编译系统时才能进行的修改…

所以刷机才是正道,但受限于选包,所以工具及刷机包均来自淘宝…

首先,安装Betools 链接 ,安装完成后别升级,激活选择一同下载的密钥

虽然不知道为什么,但几乎所有卖家提出的都是看屏幕编号,而非主板型号,但卖家发来的包却是主板通用包…(我这主板是KT107-D315,因而我提供的包也是该版用的… 链接 需解压后替换preload文件…

打开软件,将平板连接至电脑,在软件中选择多口下载,将sca选择为目标机的文件,开始下载,将平板关机或按音量键边的小孔,会自动进入刷机模式,刷完后启动即可,至此平板系统为纯净Android 7.0…

记录一次失败的Centos7安装

众所周知我一直在尝试自建CDN,昨天,看到可乐大佬的一篇 使用CDNPlus自建CDN ,在查询了CDNPlus的相关信息后,发现CDNPlus始于2015,至今仍在更新,抛去可能存在的漏洞,这个还是非常靠谱的,于是我决定抛弃现在的宝塔面板+AppNode的nginx CDN方案,选择更加方便的CDNPlus(实际使用中,平台对于ping值较高地区的支持极差,无法连接时常发生…还是nginx稳),然而,与我惯用的Ubuntu不同,它只支持CentOS及Windows,于是,如何把现有的机器从Ubuntu变成Centos7便成了我努力的方向…

虽然许多主机商提供了Centos7的镜像,但由于制作镜像时某些主机商偷工减料,导致系统体验极差,安装一个官方的,纯净的系统便有了必要…

支持网络启动的鸡可忽略以下内容

我先在网上寻找了许久一键安装的脚本,然而由于MoeClub的脚本只支持到Centos6,一个大佬制作的dd包也失效,网上没有直接安装Centos7的方案(可能可以通过Grub引导安装),于是我决定曲线救国,先安装Centos6,再升级为Centos7

一、安装Centos6

这里选用MoeClub的脚本

安装依赖

#Debian/Ubuntu:
apt-get install -y xz-utils openssl gawk file

#RedHat/CentOS:
yum install -y xz openssl gawk file

下载脚本

wget --no-check-certificate -qO InstallNET.sh 'https://moeclub.org/attachment/LinuxShell/InstallNET.sh' && chmod a+x InstallNET.sh

然后执行(可自行换源)

bash InstallNET.sh -c 6.10 -v 64 -a --mirror 'http://mirror.centos.org/centos'

全自动安装默认root密码:MoeClub.org 安装完成后请立即更改密码.

全自动安装CentOS时默认提供VNC功能,可使用VNC Viewer查看进度,
VNC端口1或者5901,可自行尝试连接.(成功后VNC功能会消失.)

二、升级Centos7

在参考了N多文件后,我终于发现了正确的配置文件

新建 /etc/yum.repos.d/upgrade.repo

[upgrade]
name=upgrade
baseurl=http://buildlogs.centos.org/centos/6/upg/x86_64/
enabled=1
gpgcheck=0

网上一片dev.centos.org,然而现在这个根本打不开…

然后安装升级助手

yum install redhat-upgrade-tool preupgrade-assistant-contents -y

由于openscap版本较新,直接执行会报错,因此需要安装较低版本

yum erase openscap
yum install openscap-1.0.8-1.0.1.el6.centos.x86_64
yum install redhat-upgrade-tool preupgrade-assistant-contents

再执行

preupg -s CentOS6_7

进行校验

然后导入密钥

rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7

开始正式升级

centos-upgrade-tool-cli --network 7 --instrepo=http://vault.centos.org/centos/7.2.1511/os/x86_64/

在重启后,SSH无法连接,VNC连接小鸡,手动关联

ls -l /usr/lib64/libsasl2.so*
ln -s /usr/lib64/libsasl2.so.3.0.0 /usr/lib64/libsasl2.so.2
ls -l /usr/lib64/libpcre.so*
ln -s /usr/lib64/libpcre.so.1.2.0 /usr/lib64/libpcre.so.0

至此,升级基本完成

以下内容提取自极其稀少的关于升级完成后操作的文章

查看残留的CentOS 6.x的文件包,不用的就卸载或卸载后重新安装CentOS 7.x的版本
rpm -qa | grep -i el6
由于grep包还是CentOS 6.x的版本(虽然不影响使用)且版本号比当前CentOS 7.x的版本的版本还高,并且有大量其他包依赖此包,这时候就可以使用 yum 的软件包降版本命令
yum downgrade grep
此时yum update会报错,需要更正EPEL版本
yum remove epel-release
yum --enablerepo=extras install epel-release
yum clean all
如果再次报错需要将python相关包重新安装
卸载python-urllib3
yum remove python-urllib3 -y
安装python-urllib3
yum install python-urllib3 -y

然而,在执行完以上内容后,我Centos6的残留包完全无法清除,yum update依旧报错(可能是我哪里操作时失误了)

至此,我的Centos6升级方案破产…

三、更换方案

联想到大佬的dd包,我决定自制一枚Centos7 dd包(失败,dd后无法启动,估计是硬盘问题,咕咕咕)

事实证明,大多主机商提供的镜像还是十分可靠,是我太过心急,忽略第一次开机时的自动升级,重启导致yum进程中断,致使错误…

好吧,除了搞清楚了Centos6升Centos7比较麻烦(最后一步可以用rpm解决,但是好麻烦呀…),今天又咕咕了…

参考文献:

https://blog.csdn.net/you227/article/details/79140913 (主要参考这个)

https://www.cnblogs.com/osroot/p/5689362.html

https://jingyan.baidu.com/article/d169e186084e8a436611d8bd.html (这个提供了正确网址…)