该功能依赖kingroot是什么意思思

在Azure服务总线既是一个主题和一个相关的认购暴露DefaultMessageTimeToLive财产;初始化像这样:
if (!NamespaceManager.TopicExists(TopicName))
NamespaceManager.CreateTopic(
new TopicDescription(TopicName)
MaxSizeInMegabytes = 5120,
DefaultMessageTimeToLive = TimeSpan.FromDays(14)
if (!NamespaceManager.SubscriptionExists(TopicName, SubscriptionName))
NamespaceManager.CreateSubscription(
new SubscriptionDescription(TopicName, SubscriptionName)
LockDuration = TimeSpan.FromMinutes(5),
DefaultMessageTimeToLive = TimeSpan.FromDays(7),
EnableDeadLetteringOnMessageExpiration = true
二,什么是有两个TTL设置的目的之间的区别是什么?此外;如果过期就事给它什么样的主题?
本文地址 :CodeGo.net/1351883/
-------------------------------------------------------------------------------------------------------------------------
1.上一主题中的TTL设置应用到所有的subscription。如果需要subscription可以有自己的TT,但是它应该小于标题的TTL。 TTL施加在subscription被施加在所有发送给它可以有自己的TTL这应该再次小于套餐TTL。
如果过期,如果在认购启用DeadLettering,将被移动到死信队列否则将被永久删除。
从这里开始:
本文标题 :主题DefaultMessageTimeToLive及认购DefaultMessageTimeToLive对Azure服务总线之间的差异
本文地址 :CodeGo.net/1351883/
Copyright (C) 2014 CodeGo.net 沪ICP备号 联&系& c&o&d&e&g&o &@&1&2&6&.&c&o&m无root下依赖环境变量怎么设置_linux吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:102,021贴子:
无root下依赖环境变量怎么设置收藏
貌似是红帽,内核版本2.6.35………要安装libbz2.so.1.0用于直接运行chrome19自带的ff8很难用,可用的firebug功能也不完整求解
redhat没用过,标配sh是什么不知道。如果是bash,每个用户自己目录下有.bash-profile,可登记。bash版本不同,文件也有不同,看看.bash的文档。
2.6内核。。。你用的是多老的。。。
自行升级了一个 Firefox 23 。不过现在又冒提示要我更新到 25 。懒得理。
_20-45 -& _21-10 升级 Firefox : 0. 从
处下载简体中文版。 1. 备份 /usr/share 下的图标等文件,留待后用:   /usr/share/applications/mozilla-firefox.desktop
   /usr/share/icons/hicolor/16x16/apps/firefox.png
   /usr/share/icons/hicolor/22x22/apps/firefox.png
   /usr/share/icons/hicolor/24x24/apps/firefox.png
   /usr/share/icons/hicolor/256x256/apps/firefox.png
   /usr/share/icons/hicolor/32x32/apps/firefox.png
   /usr/share/icons/hicolor/48x48/apps/firefox.png
   /usr/share/man/man1/firefox.1.gz
   && /usr/share/firefox_bk 2. 卸载:   rpm -e firefox 3. 残留目录重命名:   mv /usr/lib/firefox /usr/lib/firefox.v10.0.2-1 4. 安装:   cd /usr/   tar jxvf /ext/backup/soft/c_net/c_browser/FireFox/Firefox23/firefox.v23.0.1.\[linux-x86\]/firefox-23.0.1.tar.bz2;   mv firefox firefox.v23.0.1;   ln -s firefox.v23.0.1   cd -;   cd /usr/   ln -s /usr/lib/firefox/   cd -; 5. 【用户】配置:   原“~/.mozilla”下“firefox/”或“eclipse/”的内容可导致   “在新建标签页中打开”和“在新建窗口中打开”失效等状况,需要清理掉。 6. 安装 Flash 插件:   mkdir /usr/lib/firefox-   cd /usr/lib/firefox/   ln -s ../../firefox-   cd -;   cd /usr/lib/firefox/browser/   cp /ext/backup/soft/c_relax/c_media/Adobe_Flash_Player/v11.2.202.297.\[linux-x86\]/libflashplayer.so libflashplayer.v11.2.202.297.   cd -;  结果:   可用。 7. 安装支付宝登录插件:   cp /ext/backup/soft/c_net/c_browser/FireFox/Firefox-Plugins/Aliedit/v2011.\[linux-x86\]/installed/libaliedit32.so /usr/lib/firefox/browser/  结果:   可用。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或HKEY_CLASSES_ROOT是什么意思呀?_百度知道
HKEY_CLASSES_ROOT是什么意思呀?
HKEY_CLASSES_ROOT是什么意思呀?请各位高手指点一下?有什么作用呢!谢谢了!
提问者采纳
它其实就是 HKEY_LOCAL_MACHINE&#92包括所有已注册的文件类型;CLASSES子键的内容(在这里称为“别名”),只是单独把它作为根键列出来以便查阅、OLE信息以及更多的内容;Software&#92
其他类似问题
为您推荐:
其他1条回答
什么是注册表?
注册表因为它复杂的结构和没有任何联系的CLSID键使得它可能看上去很神秘。不幸的是,微软并没有完全公开讲述关于注册表正确设置的支持信息,这样使得注册表看上去更不可琢磨。处理和编辑注册表如同“黑色艺术”一样,它在系统中的设置让用户感觉象在黑暗中摸索一样找不到感觉。这样,因为用户对这方面的缺乏了解使得注册表更多的出现故障。
Windows注册表是帮助Windows控制硬件、软件、用户环境和Windows界面的一套数据文件,注册表包含在Windows目录下两个文件system.dat和user.dat里,还有它们的备份system.da0和user.da0。通过Windows目录下的regedit.exe程序可以存取注册表数据库。在以前,在windows的更早版本(在win95以前),这些功能是靠win.ini,system.ini和其他和应用程序有关联...
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁微信公众号:centoscn
centos浅谈之rpm和rpmbuild
一、简介&&&&&
&&&&&& RPM(Red Hat Package Manager)是用于 Linux 分发版(distribution)的最常见的软件包管理器。RPM包命名方式:name-version-release.architecture.rpm。RPM有五种基本的操作功能:安装、卸载、升级、查询和验证。这五种基本功能的实现仅仅需要用rpm + 选项 + rpm包就能轻易地实现。
&&&&&& 如果想发布rpm格式的源码包或者是二进制包,就要使用rpmbuild工具(rpm最新打包工具)。rpmbuild根据本地源码包的成功编译安装而写了spec文件(该文件要以.spec结束)。
(1)rpm二进制包(.rpm文件)
常用命令组合:
[cpp]&view plaincopy
&&&& &&&rpm -i your-package.rpm(your-package.rpm是rpm包的文件名),安装过程中可能出现下面的警告或者提示:.. conflict with ... ,则可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情况下是无法正确安装的可以用rpm-i&--force强制安装即可。若出现... is needed by ...和... is not installed ... 此包需要的一些软件你没有安装可以用rpm-i&--nodeps可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能 。
&&&&&&rpm -qa 将列出所有安装过的包 ,rpm&-qa&|&grep&httpd& #[搜索指定rpm包是否安装]--all搜索*httpd*
&&&&&&rpm&-ql&httpd& #[搜索rpm包]--list所有文件安装目录
&&&&&&which mysql&& #查找rpm包中的文件安装到那里去了
&&&&&&rpm&-qpi&Linux-1.4-6.i368.rpm #[查看rpm包]--query--package--install&package信息
&&&&&&rpm&-qpf&Linux-1.4-6.i368.rpm #[查看rpm包]--file
&&&&&&rpm&-qpR&file.rpm       #[查看包]依赖关系
&&&&&&查找rpm中包含哪些文件:一个没有安装过的软件包,使用rpm -qlp *.rpm;一个已经安装的软件包,可以使用rpm -ql *.rpm 。
&&&&&&获取关于一个软件包的信息:一个没有安装过的软件包,使用rpm -qlp *.rpm ;一个已经安装过的软件包,使用rpm -qi *.rpm。
&&&&& rpm -qf `which 程序名` 返回软件包的全名
&&& & rpm -qif `which 程序名` 返回软件包的有关信息&
&&&&& rpm -qlf `which 程序名` 返回软件包的文件列表&
&&&&& 首先获得这个程序的完整路径,可以用whereis或者which,然后使用rpm -qf例如:
# whereis ftptop&
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz&
# rpm -qf /usr/bin/ftptop&
proftpd-1.2.8-1&
# rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt&
proftpd-1.2.8-1
rpm&-e&file.rpm&&&&&&#[删除一个rpm包]--erase
有时会出现一些错误或者警告: ... is needed by ... 这说明这个软件被其他软件需要,不能随便卸载 ,可以用rpm -e --nodeps强制卸载 。
rpm&-Uvh&file.rpm&&&&#[升级一个rpm]--upgrade
rpm &V&file.rpm。对已经安装了的程序进行验证。
(2)rpm源码包(.src.rpm文件)
.src.rpm结尾的文件是由软件的源代码包装而成的,用户要安装这类RPM软件包,必须使用命令:
rpmbuild --recompile vim-4.6-4.src.rpm&&&#这个命令会把源代码解包并编译、安装它,如果用户使用命令。
rpmbuild --rebuild vim-4.6-4.src.rpm  #在安装完成后,还会把编译生成的可执行文件重新包装成i386.rpm的RPM软件包。
一般会采用的方法:
1.执行rpm -i you-package.src.rpm&
2. cd /usr/src/redhat/SPECS&
3. rpmbuild -bb your-package.specs 一个和你的软件包同名的specs文件,这时在/usr/src/redhat/RPM/i386/ (根据具体包的不同,也可能是i686,noarch等等) 这个目录下,有一个新的rpm包,这个是编译好的二进制文件。
执行rpm -i new-package.rpm即可安装完成。
1.执行rpm -i your-package.src.rpm&
2. cd /usr/src/redhat/SPECS&
3. rpmbuild -bp your-package.specs 一个和你的软件包同名的specs文件&
4. cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录&
5. ./configure 这一步和编译普通的源码软件一样,可以加上参数&
7. make install&
(3)不安装获取rpm包中的文件
使用工具rpm2cpio和cpio,命令格式: rpm2cpio file.rpm |cpio -div
rpm2cpio file.rpm | cpio -vi&
rpm2cpio file.rpm | cpio -idmv&
rpm2cpio file.rpm | cpio --extract --make-directories&
&&&&& 其中参数i和extract相同,表示提取文件;v表示指示执行进程 ;d和make-directory相同,表示根据包中文件原来的路径建立目录 ;m表示保持文件的更新时间。
&&&&& 同样适用于.src.rpm源码包。
(4)rpm的配置文件
&RPM包管理的配置文件是 rpmrc ,可以在自己的系统中找到。
[root@localhost RPMS]# locate rpmrc
/usr/lib/rpm/rpmrc
/usr/lib/rpm/redhat/rpmrc
也可以通过 rpm --showrc 。&
2、RPMBUILD
&&&&&它是用来指示转换的源码编译成二进制文件的包,在centos下默认目录为当前用户下,如/root。因为系统有默认的rpm构建的目录,若要重新指定rpm构建的目录位置,需要在当前用户目录下建一个.rpmmacros文件,通过更改 %_topdir 设置来告诉 RPM 查找和创建不同目录集中的文件,如%_topdir /home/your_userid/rpm,然后手动创建这样一个完整的目录树:~/rpm ~/rpm/SOURCES ~/rpm/SPECS ~/rpm/BUILD ~/rpm/RPMS ~/rpm/RPMS/i386 ~/rpm/SRPMS(也可运行时程序自动创建,比如任意执行个spec文件,rpmbuild -bp file.spec虽然执行失败但会创建目录)。
&&&&&& 此次在当前root用户下手动创建目录,mkdir &p /root/rpmbuild,mkdir&-pv&~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}。
--BUILD #编译之前,如解压包后存放的路径
--BUILDROOT #编译后存放的路径
--RPMS #打包完成后rpm包存放的路径
--SOURCES #源包所放置的路径
--SPECS #spec文档放置的路径
--SPRMS #源码rpm包放置的路径
注:一般我们都把源码打包成tar.gz格式然后存放于SOURCES路径下(rpm -ivh +源码包,会自动解压到SOURCES目录下),而在SPECS路径下编写spec文档,通过命令打包后,默认会把打包后的rpm包放在RPMS下,而源码包会被放置在SRPMS下
(2)rpmbuild相关命令
基本格式:rpmbuild [options] [spec文档|tarball包|源码包],以下依次列出三种不同文件
1.从spec文档建立有以下选项:
-bp&&#只执行spec的%pre 段(解开源码包并打补丁,即只做准备)
-bc&&#执行spec的%pre和%build 段(准备并编译)
-bi&&#执行spec中%pre,%build与%install(准备,编译并安装)
-bl&&#检查spec中的%file段(查看文件是否齐全)
-ba&&#建立源码与二进制包(常用)
-bb&&#只建立二进制包(常用)
-bs&&#只建立源码包
2.从tarball包建立,与spec类似
-tp #对应-bp
-tc #对应-bc
-ti #对应-bi
-ta #对应-ba
-tb #对应-bb
-ts #对应-bs
3.从源码包建立
--rebuild&&#建立二进制包,通-bb
--recompile&&#同-bi
4.其他的一些选项
--buildroot=DIRECTORY&&#确定以root目录建立包
--clean&&#完成打包后清除BUILD下的文件目录
--nobuild&&#不进行%build的阶段
--nodeps&&#不检查建立包时的关联文件
--nodirtokens
--rmsource&&#完成打包后清除SOURCES
--rmspec #完成打包后清除SPEC
--short-cricuit
--target=CPU-VENDOR-OS #确定包的最终使用平台
&(3) spec文档的编写
Name:软件包的名称,后面可使用%{name}的方式引用,具体命令需跟源包一致
Summary: 软件包的内容概要
Version: 软件的实际版本号,具体命令需跟源包一致
Release: 发布序列号,具体命令需跟源包一致
Group: 软件分组,建议使用标准分组
-----------------------------------------
软件包所属类别,具体类别有:
Amusements/Games (娱乐/游戏)
Amusements/Graphics(娱乐/图形)
Applications/Archiving (应用/文档)
Applications/Communications(应用/通讯)
Applications/Databases (应用/数据库)
Applications/Editors (应用/编辑器)
Applications/Emulators (应用/仿真器)
Applications/Engineering (应用/工程)
Applications/File (应用/文件)
Applications/Internet (应用/因特网)
Applications/Multimedia(应用/多媒体)
Applications/Productivity (应用/产品)
Applications/Publishing(应用/印刷)
Applications/System(应用/系统)
Applications/Text (应用/文本)
Development/Debuggers (开发/调试器)
Development/Languages (开发/语言)
Development/Libraries (开发/函数库)
Development/System (开发/系统)
Development/Tools (开发/工具)
Documentation (文档)
System Environment/Base(系统环境/基础)
System Environment/Daemons (系统环境/守护)
System Environment/Kernel (系统环境/内核)
System Environment/Libraries (系统环境/函数库)
System Environment/Shells (系统环境/接口)
User Interface/Desktops(用户界面/桌面)
User Interface/X (用户界面/X窗口)
User Interface/X Hardware Support (用户界面/X硬件支持)
----------------------------------------------------
License: 软件授权方式,通常就是GPL
Source:源代码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用
BuildRoot: 这个是安装或编译时使用的&虚拟目录&,考虑到多用户的环境,一般定义为:
%{_tmppath}/%{name}-%{version}-%{release}-root
%{_tmppath}/%{name}-%{version}-%{release}-buildroot-%(%{__id_u}-n}
该参数非常重要,因为在生成rpm的过程中,执行makeinstall时就会把软件安装到上述的路径中,在打包的时候,同样依赖&虚拟目录&为&根目录&进行操作。
后面可使用$RPM_BUILD_ROOT 方式引用。
URL: 软件的主页
Vendor: 发行商或打包组织的信息,例如RedFlag Co,Ltd
Disstribution: 发行版标识
Patch: 补丁源码,可使用Patch1、Patch2等标识多个补丁,使用%patch0或%{patch0}引用
Prefix: %{_prefix}这个主要是为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录的情况。这样,必须在这里定义该标识,并在编写%install脚本的时候引用,才能实现rpm安装时重新指定位置的功能
Prefix: %{_sysconfdir}这个原因和上面的一样,但由于%{_prefix}指/usr,而对于其他的文件,例如/etc下的配置文件,则需要用%{_sysconfdir}标识
Build Arch:指编译的目标处理器架构,noarch标识不指定,但通常都是以/usr/lib/rpm/marcros中的内容为默认值
Requires:该rpm包所依赖的软件包名称,可以用&=或&=表示大于或小于某一特定版本,例如:
libpng-devel &= 1.0.20 zlib
※&&=&号两边需用空格隔开,而不同软件名称也用空格分开
还有例如PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都是针对不同阶段的依赖指定
Provides: 指明本软件一些特定的功能,以便其他rpm识别
Packager: 打包者的信息
%description 软件的详细说明
#spec脚本主体
spec脚本的主体中也包括了很多关键字和描述,下面会一一列举。我会把一些特别需要留意的地方标注出来。
%prep 预处理脚本
%setup -n %{name}-%{version} 把源码包解压并放好
注:可根据你的源码的名字格式,来确认解压后名字的格式,否则可能导致install的时候找不到对应的目录
通常是从/usr/src/redhat/SOURCES里的包解压到/usr/src/redhat/BUILD/%{name}-%{version}中。
一般用%setup-c就可以了,但有两种情况:一就是同时编译多个源码包,二就是源码的tar包的名称与解压出来的目录不一致,此时,就需要使用-n参数指定一下了。
%patch 打补丁
通常补丁都会一起在源码tar.gz包中,或放到SOURCES目录下。一般参数为:
%patch -p1 使用前面定义的Patch补丁进行,-p1是忽略patch的第一层目录
%Patch2 -p1 -b xxx.patch 打上指定的补丁,-b是指生成备份文件
◎补充一下
%setup 不加任何选项,仅将软件包打开。
%setup -n newdir 将软件包解压在newdir目录。
%setup -c 解压缩之前先产生目录。
%setup -b num 将第num个source文件解压缩。
%setup -T 不使用default的解压缩操作。
%setup -T -b 0 将第0个源代码文件解压缩。
%setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。
%patch 最简单的补丁方式,自动指定patch level。
%patch 0 使用第0个补丁文件,相当于%patch ?p 0。
%patch -s 不显示打补丁时的信息。
%patch -T 将所有打补丁时产生的输出文件删除。
%build 开始构建包
在/usr/src/redhat/BUILD/%{name}-%{version}目录中进行make的工作 ,常见写法:
make %{?_smp_mflags} OPTIMIZE=&%{optflags}&
都是一些优化参数,定义在/usr/lib/rpm/marcros中
%install 开始把软件安装到虚拟的根目录中
在/usr/src/redhat/BUILD/%{name}-%{version}目录中进行makeinstall的操作。这个很重要,因为如果这里的路径不对的话,则下面%file中寻找文件的时候就会失败。 常见内容有:
%makeinstall 这不是关键字,而是rpm定义的标准宏命令。也可以使用非标准写法:
make DESTDIR=$RPM_BUILD_ROOT install
make prefix=$RPM_BUILD_ROOT install
需要说明的是,这里的%install主要就是为了后面的%file服务的。所以,还可以使用常规的系统命令:
install -d $RPM_BUILD_ROOT/ #建立目录
cp -a * $RPM_BUILD_ROOT/
%clean 清理临时文件
通常内容为:
[ &$RPM_BUILD_ROOT& != &/& ] && rm-rf &$RPM_BUILD_ROOT&
rm -rf $RPM_BUILD_DIR/%{name}-%{version}
※注意区分$RPM_BUILD_ROOT和$RPM_BUILD_DIR:
$RPM_BUILD_ROOT是指开头定义的BuildRoot,而$RPM_BUILD_DIR通常就是指/usr/src/redhat/BUILD,其中,前面的才是%file需要的。
%pre rpm安装前执行的脚本
%post rpm安装后执行的脚本
%preun rpm卸载前执行的脚本
%postun rpm卸载后执行的脚本
%preun %postun 的区别是什么呢?
前者在升级的时候会执行,后者在升级rpm包的时候不会执行
%files 定义那些文件或目录会放入rpm中
这里会在虚拟根目录下进行,千万不要写绝对路径,而应用宏或变量表示相对路径。如果描述为目录,表示目录中除%exclude外的所有文件。
%defattr (-,root,root)指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755
%exclude 列出不想打包到rpm中的文件
※小心,如果%exclude指定的文件不存在,也会出错的。
%changelog 变更日志
(4) spec文档中常用的几个宏(变量)
1.RPM_BUILD_DIR:&&&/usr/src/redhat/BUILD
2. RPM_BUILD_ROOT:&&/usr/src/redhat/BUILDROOT
3. %{_sysconfdir}:&&&/etc
4.%{_sbindir}:&&&&/usr/sbin
5.%{_bindir}:&&&&&&/usr/bin
6.%{_datadir}:&&&&&/usr/share
7.%{_mandir}:&&&&&&/usr/share/man
8.%{_libdir}:&&&&&&/usr/lib64
9.%{_prefix}:&&&&&&/usr
10. %{_localstatedir}:&&/usr/var
(5) 创建RPM包的例子
要创建的rpm包为:test-1.0.1-1.el6.i686.rpm,打包的压缩文件为:test-1.0.1.tar.gz。
1.把test-1.0.1.tar.gz拷贝到SOURCE目录底下。
2.转至SPECS目录底下,编写test.spec描述文件,这个文件是创建rpm包最重要的部分,它会制定rpm包里的软件的安装目录,以及安装软件前后要注意的问题,软件的依赖及系统要求。
3.编译RPM,执行命令:rpmbuild &ba test.spec。这样以后,就开始创建rpm包。
4.执行rpmbuild &ba test.spec后,会首先把test-1.0.1.tar.gz解压缩到BUILD目录,BUILDROOT这个目录用来存放执行时存放的临时文件夹,这个目录也很重要,需要把在此目录建立相关目录以及拷贝相关文件信息的脚本写入test.spec文件里,以防编译出错,无法生成RPM包。成功执行完成之后,会在RPMS这个目录生成i686/ test-1.0.1-1.el6.i686.rpm文件。
(6) 附加SPEC文件
&&&&& 文件是官方发布的anaconda.spec,Anaconda是RedHat、CentOS、Fedora等Linux的安装管理程序,以后还有很重要的应用。分析该文件对系统的定制很有帮助,因文件内容过长,删除后面不太重要的日志部分。
[cpp]&view plaincopy
(1)IBM官方网站中rpm包的使用讲解的很全面,参看/developerworks/cn/linux/management/package/rpm/part1/和rpmbuild的spec文件的解析参看/developerworks/cn/linux/l-rpm/。
(2)rpm和rpmbuild内容众多丰富,该博客总结部分内容,以便使用时能快速查找到。
(3)若有读者想沟通交流的,可发信息到邮箱yang.ao@.cn。
------分隔线----------------------------该功能依赖root是什么意思_百度知道
该功能依赖root是什么意思
就是需要手机的最高权限~手机root了才能用,这一般是安全软件需要的
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 一键root是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信