Merge pull request #7 from RubyMetric/Obey-rule-os

Add feature os-netbsd
This commit is contained in:
Gchuchu 2023-09-05 21:09:50 +08:00 committed by GitHub
commit 904642dec2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 244 additions and 111 deletions

308
chsrc.c
View File

@ -837,7 +837,7 @@ os_ubuntu_setsrc (char* option)
xy_info ("chsrc: 备份文件名: /etc/apt/sources.list.bak");
char* arch = xy_getcmd("arch");
char* arch = xy_getcmd("arch",NULL);
char* cmd;
if(strncmp(arch,"x86_64",6)==0)
{
@ -871,53 +871,62 @@ os_ubuntu_setsrc (char* option)
void
os_debian_setsrc (char* option)
{
int selected = 0;
for (int i=0;i<sizeof(os_ubuntu_sources);i++) {
// 循环测速
}
const char* source_name = os_ubuntu_sources[selected].mirror->name;
const char* source_abbr = os_ubuntu_sources[selected].mirror->abbr;
const char* source_url = os_ubuntu_sources[selected].url;
int index = 0;
xy_info("如果遇到无法拉取 HTTPS 源的情况,我们会使用 HTTP 源并 需要您 安装");
xy_info("sudo apt install apt-transport-https ca-certificates");
if (NULL!=option) {
index = lets_find_mirror(os_debian, option);
} else {
index = lets_test_speed(os_debian);
}
source_info source = os_debian_sources[index];
chsrc_say_selection(&source);
xy_info ("chsrc: 如果遇到无法拉取 HTTPS 源的情况,我们会使用 HTTP 源并 需要您 安装");
xy_info ("chsrc: sudo apt install apt-transport-https ca-certificates");
char* backup = "cp -rf /etc/apt/sources.list /etc/apt/sources.list.bak";
chsrc_logcmd(backup);
system(backup);
xy_info ("chsrc: 备份文件名: /etc/apt/sources.list.bak");
char* cmd = xy_strjoin(3, "sed -E \'s@(^[^#]* .*)http[:|\\.|\\/|a-z|A-Z]*\\/debian\\/@\\1",
source_url,
char * cmd = xy_strjoin(3,"chsrc: 备份文件名: /etc/apt/.*)http[:|\\.|\\/|a-z|A-Z]*\\/debian\\/@\\1",
source.url,
"@\'< /etc/apt/sources.list.bak | cat > /etc/apt/sources.list");
chsrc_logcmd(cmd);
system(cmd);
free(cmd);
// char* rm = "rm -rf /etc/apt/source.list.bak";
// system(rm);
xy_info ("chsrc: 为 debian 命令换源");
xy_success (xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
chsrc_say_thanks(&source);
}
/**
* fedora29版本及以下暂不支持
*
*/
void
os_fedora_setsrc (char* option)
{
int selected = 0;
for (int i=0;i<sizeof(os_fedora_sources);i++) {
// 循环测速
}
const char* source_name = os_fedora_sources[selected].mirror->name;
const char* source_abbr = os_fedora_sources[selected].mirror->abbr;
const char* source_url = os_fedora_sources[selected].url;
int index = 0;
xy_info("fedora29版本及以下暂不支持");
if (NULL!=option) {
index = lets_find_mirror(os_fedora, option);
} else {
index = lets_test_speed(os_fedora);
}
source_info source = os_fedora_sources[index];
chsrc_say_selection(&source);
xy_info ("chsrc: fedora29版本及以下暂不支持");
char* backup = "cp -rf /etc/yum.repos.d/fedora.repo /etc/yum.repos.d/fedora.repo.bak";
chsrc_logcmd(backup);
system(backup);
backup = "cp -rf /etc/yum.repos.d/fedora-updates.repo /etc/yum.repos.d/fedora-updates.repo.bak";
chsrc_logcmd(backup);
system(backup);
xy_info ("chsrc: 备份文件名:1. /etc/yum.repos.d/fedora.repo.bak");
@ -926,120 +935,147 @@ os_fedora_setsrc (char* option)
char* cmd = xy_strjoin(9, "sed -e 's|^metalink=|#metalink=|g' ",
"-e 's|^#baseurl=http://download.example/pub/fedora/linux/|baseurl=",
source_url,
source.url,
"|g' ",
"-i.bak ",
"/etc/yum.repos.d/fedora.repo ",
"/etc/yum.repos.d/fedora-modular.repo ",
"/etc/yum.repos.d/fedora-updates.repo ",
"/etc/yum.repos.d/fedora-updates-modular.repo");
chsrc_logcmd(cmd);
system(cmd);
free(cmd);
xy_info("替换文件:/etc/yum.repos.d/fedora.repo");
xy_info("新增文件:/etc/yum.repos.d/fedora-modular.repo");
xy_info("替换文件:/etc/yum.repos.d/fedora-updates.repo");
xy_info("新增文件:/etc/yum.repos.d/fedora-updates-modular.repo");
xy_info ("chsrc: 替换文件:/etc/yum.repos.d/fedora.repo");
xy_info ("chsrc: 新增文件:/etc/yum.repos.d/fedora-modular.repo");
xy_info ("chsrc: 替换文件:/etc/yum.repos.d/fedora-updates.repo");
xy_info ("chsrc: 新增文件:/etc/yum.repos.d/fedora-updates-modular.repo");
// char* rm = "rm -rf /etc/yum.repos.d/fedora.repo.bak";
// system(rm);
// char* rm = "rm -rf /etc/yum.repos.d/fedora-updates.repo.bak";
// system(rm);
xy_info ("chsrc: 为 fedora 命令换源");
xy_success (xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
chsrc_say_thanks(&source);
}
/**
*
*/
void
os_kali_setsrc(char* option)
{
int selected = 0;
for (int i=0;i<sizeof(os_kali_sources);i++) {
// 循环测速
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_kali, option);
} else {
index = lets_test_speed(os_kali);
}
const char* source_name = os_kali_sources[selected].mirror->name;
const char* source_abbr = os_kali_sources[selected].mirror->abbr;
const char* source_url = os_kali_sources[selected].url;
source_info source = os_kali_sources[index];
chsrc_say_selection(&source);
char* backup = "cp -rf /etc/apt/sources.list /etc/apt/sources.list.bak";
chsrc_logcmd(backup);
system(backup);
xy_info ("chsrc: 备份文件名: /etc/apt/sources.list.bak");
char* cmd = xy_strjoin(3, "sed -i \'s@(^[^#]* .*)http[:|\\.|\\/|a-z|A-Z]*\\/kali\\/@\\1",
source_url,
source.url,
"@g\' /etc/apt/sources.list");
chsrc_logcmd(cmd);
system(cmd);
free(cmd);
// char* rm = "rm -rf /etc/apt/source.list.bak";
// system(rm);
xy_info ("chsrc: 为 kali 命令换源");
xy_success (xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
chsrc_say_thanks(&source);
}
/**
*
*/
void
os_openbsd_setsrc(char* option)
{
int selected = 0;
for (int i=0;i<sizeof(os_openbsd_sources);i++) {
// 循环测速
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_openbsd, option);
} else {
index = lets_test_speed(os_openbsd);
}
const char* source_name = os_openbsd_sources[selected].mirror->name;
const char* source_abbr = os_openbsd_sources[selected].mirror->abbr;
const char* source_url = os_openbsd_sources[selected].url;
source_info source = os_openbsd_sources[index];
chsrc_say_selection(&source);
char* backup = "cp -rf /etc/installurl /etc/installurl.bak";
chsrc_logcmd(backup);
system(backup);
xy_info ("chsrc: 备份文件名: /etc/installurl.bak");
char* cmd = xy_strjoin(3,"echo ",source_url," > /etc/installurl");
char* cmd = xy_strjoin(3,"echo ",
source.url,
" > /etc/installurl");
chsrc_logcmd(cmd);
system(cmd);
free(cmd);
// char* rm = "rm -rf /etc/installurl.bak";
// system(rm);
xy_info ("chsrc: 为 openbsd 命令换源");
xy_success (xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
chsrc_say_thanks(&source);
}
/**
*
*/
void
os_mysys2_setsrc(char* option)
{
int selected = 0;
for (int i=0;i<sizeof(os_mysys2_sources);i++) {
// 循环测速
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_mysys2, option);
} else {
index = lets_test_speed(os_mysys2);
}
const char* source_name = os_mysys2_sources[selected].mirror->name;
const char* source_abbr = os_mysys2_sources[selected].mirror->abbr;
const char* source_url = os_mysys2_sources[selected].url;
source_info source = os_mysys2_sources[index];
chsrc_say_selection(&source);
char* backup = "cp -rf /etc/pacman.d/mirrorlist.mingw32 /etc/pacman.d/mirrorlist.mingw32.bak";
chsrc_logcmd(backup);
system(backup);
backup = "cp -rf /etc/pacman.d/mirrorlist.mingw64 /etc/pacman.d/mirrorlist.mingw64.bak";
chsrc_logcmd(backup);
system(backup);
backup = "cp -rf /etc/pacman.d/mirrorlist.msys /etc/pacman.d/mirrorlist.msys.bak";
chsrc_logcmd(backup);
system(backup);
xy_info ("chsrc: 备份文件名:1. /etc/pacman.d/mirrorlist.mingw32.bak");
xy_info ("chsrc: 备份文件名:2. /etc/pacman.d/mirrorlist.mingw64.bak");
xy_info ("chsrc: 备份文件名:3. /etc/pacman.d/mirrorlist.msys.bak");
char* prev = xy_strjoin(3,"请针对你的架构下载安装此目录下的文件:",source_url,"distrib/<架构>/");
char* prev = xy_strjoin(3,"请针对你的架构下载安装此目录下的文件:",
source.url,
"distrib/<架构>/");
xy_info (prev);
free(prev);
char* cmd = xy_strjoin(3,"sed -i \"s#https\?://mirror.msys2.org/#",source_url,"#g\" /etc/pacman.d/mirrorlist* ");
char* cmd = xy_strjoin(3,"sed -i \"s#https\?://mirror.msys2.org/#",
source.url,
"#g\" /etc/pacman.d/mirrorlist* ");
chsrc_logcmd(cmd);
system(cmd);
free(cmd);
// char* rm = "rm -rf /etc/pacman.d/mirrorlist.mingw32.bak";
// system(rm);
@ -1048,73 +1084,139 @@ os_mysys2_setsrc(char* option)
// rm = "rm -rf /etc/pacman.d/mirrorlist.msys.bak";
// system(rm);
xy_info ("chsrc: 为 mysys2 命令换源");
xy_success (xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
chsrc_say_thanks(&source);
}
/**
*
*/
void
os_archlinux_setsrc(char* option)
os_arch_setsrc(char* option)
{
int selected = 0;
for (int i=0;i<sizeof(os_archlinux_sources);i++) {
// 循环测速
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_arch, option);
} else {
index = lets_test_speed(os_arch);
}
const char* source_name = os_archlinux_sources[selected].mirror->name;
const char* source_abbr = os_archlinux_sources[selected].mirror->abbr;
const char* source_url = os_archlinux_sources[selected].url;
source_info source = os_arch_sources[index];
chsrc_say_selection(&source);
char* backup = "cp -rf /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak";
chsrc_logcmd(backup);
system(backup);
xy_info ("chsrc: 备份文件名: /etc/pacman.d/mirrorlist.bak");
char* new_file = xy_strjoin("Server = ",source_url,"$repo/os/$arch");
char* cmd = xy_strjoin(3,"echo ",new_file," > /etc/pacman.d/mirrorlist");
char* new_file = xy_strjoin(3,"Server = ",
source.url,
"$repo/os/$arch");
char* cmd = xy_strjoin(3,"echo ",
new_file,
" > /etc/pacman.d/mirrorlist");
chsrc_logcmd(cmd);
system(cmd);
free(cmd);
cmd = "cat /etc/pacman.d/mirrorlist.bak >> /etc/pacman.d/mirrorlist";
chsrc_logcmd(cmd);
system(cmd);
free(new_file);
// char* rm = "rm -rf /etc/pacman.d/mirrorlist.bak";
// system(rm);
xy_info ("chsrc: 为 archlinux 命令换源");
xy_success (xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
chsrc_say_thanks(&source);
xy_info ("Please use \"pacman -Syyu \" to update your source");
}
/**
*
*/
void
os_gentoolinux_setsrc(char* option)
os_gentoo_setsrc(char* option)
{
int selected = 0;
for (int i=0;i<sizeof(os_gentoolinux_sources);i++) {
// 循环测速
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_gentoo, option);
} else {
index = lets_test_speed(os_gentoo);
}
const char* source_name = os_gentoolinux_sources[selected].mirror->name;
const char* source_abbr = os_gentoolinux_sources[selected].mirror->abbr;
const char* source_url = os_gentoolinux_sources[selected].url;
source_info source = os_arch_sources[index];
chsrc_say_selection(&source);
char* backup = "cp -rf /etc/portage/repos.conf/gentoo.conf /etc/portage/repos.conf/gentoo.conf.bak";
chsrc_logcmd(backup);
system(backup);
xy_info ("chsrc: 备份文件名: /etc/portage/repos.conf/gentoo.conf.bak");
char* cmd = xy_strjoin(3,"sed -i \"s#rsync[:|\\.|\\/|a-z|A-Z]*/gentoo-portage#rsync://",source_url,"gentoo-portage#g");
char* cmd = xy_strjoin(3,"sed -i \"s#rsync[:|\\.|\\/|a-z|A-Z]*/gentoo-portage#rsync://",
source.url,
"gentoo-portage#g");
chsrc_logcmd(cmd);
system(cmd);
free(cmd);
char * yuan = xy_strjoin(3,"GENTOO_MIRRORS=\"https://",source_url,"gentoo\"");
char * yuan = xy_strjoin(3,"GENTOO_MIRRORS=\"https://",
source.url,
"gentoo\"");
cmd = xy_strjoin("cat ",yuan," >> /etc/portage/make.conf");
chsrc_logcmd(cmd);
system(cmd);
free(cmd);
free(yuan);
// char* rm = "rm -rf /etc/portage/repos.conf/gentoo.conf.bak";
// system(rm);
xy_info ("chsrc: 为 gentoolinux 命令换源");
xy_success (xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
chsrc_say_thanks(&source);
}
/**
*
*/
void
os_netbsd_setsrc(char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_netbsd, option);
} else {
index = lets_test_speed(os_netbsd);
}
source_info source = os_netbsd_sources[index];
chsrc_say_selection(&source);
char* backup = "cp -rf /usr/pkg/etc/pkgin/repositories.conf /usr/pkg/etc/pkgin/repositories.conf.bak";
chsrc_logcmd(backup);
system(backup);
xy_info ("chsrc: 备份文件名: /usr/pkg/etc/pkgin/repositories.conf.bak");
char* arch = xy_getcmd("arch",NULL);
char* version = "cat /etc/os-release | grep \"VERSION=\" | grep -Po [8-9].[0-9]+";
char* cmd = xy_strjoin(6,"echo ",
source.url,
arch,
"/",
version,
"/All > /usr/pkg/etc/pkgin/repositories.conf");
chsrc_logcmd(cmd);
system(cmd);
// char* rm = "rm -rf /etc/portage/repos.conf/gentoo.conf.bak";
// system(rm);
chsrc_say_thanks(&source);
}
/************************************** Begin Target Matrix ****************************************/
def_target_info(pl_ruby);
def_target_info(pl_python);
@ -1158,9 +1260,10 @@ target_info
os_fedora_target = {os_fedora_setsrc, NULL, os_fedora_sources, 7},
os_kali_target = {os_kali_setsrc, NULL, os_kali_sources, 7},
os_openbsd_target = {os_openbsd_setsrc, NULL, os_openbsd_sources, 7},
os_mysys2_target = {os_mysys2_setsrc, NULL, os_mysys2_sources, 7},
os_archlinux_target = {os_archlinux_setsrc, NULL, os_archlinux_sources, 7},
os_gentoolinux_target = {os_gentoolinux_setsrc, NULL, os_gentoolinux_sources, 7};
os_mysys2_target = {os_mysys2_setsrc, NULL, os_mysys2_sources, 7},
os_arch_target = {os_arch_setsrc, NULL, os_arch_sources, 7},
os_gentoo_target = {os_gentoo_setsrc, NULL, os_gentoo_sources, 7},
os_netbsd_target = {os_netbsd_setsrc, NULL, os_netbsd_sources, 7};
static const char const
*os_ubuntu [] = {"ubuntu", NULL, targetinfo(&os_ubuntu_target)},
*os_debian [] = {"debian", NULL, targetinfo(&os_debian_target)},
@ -1168,11 +1271,12 @@ static const char const
*os_kali [] = {"kali", NULL, targetinfo(&os_kali_target)},
*os_openbsd [] = {"openbsd", NULL, targetinfo(&os_openbsd_target)},
*os_mysys2 [] = {"mysys2", NULL, targetinfo(&os_mysys2_target)},
*os_archlinux [] = {"mysys2", NULL, targetinfo(&os_archlinux_target)},
*os_gentoolinux [] = {"mysys2", NULL, targetinfo(&os_gentoolinux_target)},
*os_arch [] = {"arch", NULL, targetinfo(&os_arch_target)},
*os_gentoo [] = {"gentoo", NULL, targetinfo(&os_gentoo_target)},
*os_netbsd [] = {"netbsd", NULL, targetinfo(&os_netbsd_target)},
**os_systems[] =
{
os_ubuntu, os_debian,os_fedora,os_kali,os_openbsd,os_mysys2,os_archlinux,os_gentoolinux
os_ubuntu, os_debian,os_fedora,os_kali,os_openbsd,os_mysys2,os_arch,os_gentoo,os_netbsd
};

21
chsrc.h
View File

@ -379,7 +379,7 @@ os_mysys2_sources[] = {
*
* TODO: 1.
*/
os_archlinux_sources[] = {
os_arch_sources[] = {
{&Ali, "https://mirrors.aliyun.com/archlinux/"},
{&Bfsu, "https://mirrors.bfsu.edu.cn/archlinux/"},
{&Ustc, "https://mirrors.ustc.edu.cn/archlinux/"},
@ -394,7 +394,7 @@ os_archlinux_sources[] = {
*
* TODO: 1.
*/
os_gentoolinux_sources[] = {
os_gentoo_sources[] = {
{&Ali, "mirrors.aliyun.com"},
{&Bfsu, "mirrors.bfsu.edu.cn"},
{&Ustc, "mirrors.ustc.edu.cn"},
@ -402,6 +402,21 @@ os_gentoolinux_sources[] = {
{&Tencent, "mirrors.tencent.com"},
{&Netease, "mirrors.163.com"},
{&Sohu, "mirrors.sohu.com"}
},
/**
* 2023-09-05
*
* TODO: 1.
*/
os_netbsd_sources[] = {
{&Ali, "https://mirrors.aliyun.com/pkgsrc/packages/NetBSD/"},
{&Bfsu, "https://mirrors.bfsu.edu.cn/pkgsrc/packages/NetBSD/"},
{&Ustc, "https://mirrors.ustc.edu.cn/pkgsrc/packages/NetBSD/"},
{&Tuna, "https://mirrors.tuna.tsinghua.edu.cn/pkgsrc/packages/NetBSD/"},
{&Tencent, "https://mirrors.tencent.com/pkgsrc/packages/NetBSD/"},
{&Netease, "https://mirrors.163.com/pkgsrc/packages/NetBSD/"},
{&Sohu, "https://mirrors.sohu.com/pkgsrc/packages/NetBSD/"}
}
;
@ -455,7 +470,7 @@ def_target_sources_n(pl_r); def_target_sources_n(pl_julia);
def_target_sources_n(os_ubuntu); def_target_sources_n(os_debian); def_target_sources_n(os_fedora);
def_target_sources_n(os_kali); def_target_sources_n(os_openbsd); def_target_sources_n(os_mysys2);
def_target_sources_n(os_archlinux); def_target_sources_n(os_gentoolinux);
def_target_sources_n(os_arch); def_target_sources_n(os_gentoo); def_target_sources_n(os_netbsd);
/* Target Info */
typedef struct {

26
xy.h
View File

@ -444,8 +444,8 @@ xy_str_strip (const char* str)
* cmd后拿到cmd的执行结果 free掉这段内存
*
*/
char *
xy_getcmd(const char * cmd)
char *
xy_getcmd(const char * cmd, bool (*func)(const char*))
{
const int BUFSIZE = 1024;
@ -462,15 +462,29 @@ xy_getcmd(const char * cmd)
// 从 stream 指针指向的文件中读取数据。
char *ret;
do {
ret = fgets(buf, sizeof(buf), stream);
if(ret==NULL)
break;
if(fgets(buf, sizeof(buf), stream)==NULL)
{
break;
}
if(func==NULL)
{
ret = buf;
}
else
{
if(func(buf))
{
ret = buf;
break;
}
}
}while(1);
// 关闭 stream 指针。
pclose(stream);
return buf;
return ret;
}
#endif