Category Archives: 从这里发布的

从blog.newnaw.com发布的

北京联通,DigitalOcean和Shadowsocks

  最近家里宽带换成了北京联通20M,相比之前的宽带通,质量确实高了不少,国外网站和公司vpn的速度明显快了很多。但比较奇怪的是自己搭在DigitalOcean上的Shadowsocks速度没有太大提升,有时反而还不如以前。   首先公司网络里测试Shadowsocks的时候速度比较理想,也非常稳定,说明不是DigitalOcean的问题;自己家里上国外网站速度明显快了不少,而且只要能访问的网站速度都比较快,说明北京联通也没有问题。那问题只可能是北京联通与DigitalOcean之间水土不服了。   之前自己的vps一直放在DigitalOcean的旧金山机房,因为国内这个机房的口碑普遍比较好。但在家里打开newnaw.com和自己博客的时候也能感觉到速度不如以前了,难道是联通到这个机房度的问题?ping了一下DigitalOcean在旧金山的测速页面:   11%丢包率,平均响应也都在310ms以上……感觉联通到旧金山机房确实有问题,看看其他的机房吧。DigitalOcean去年在亚洲开通了新加坡机房,但之前就看到过,据说到国内的速度不稳定,还不如其他机房。抱着试试看的心态,也ping了一下新加坡的测速页面:   平均响应时间172ms,快了几乎一倍。立刻去新建了一个vps,机房选择新加坡,之后上面部署了Shadowsocks测试了一下速度,youtube的4k视频都可以流畅观看了,有点小感动…   测试后发现Shadowsocks的速度比较稳定,于是就在DigitalOcean上创建snapshot,转移之到新加坡机房,重建vps…整个操作很简单,DigitalOcean便利性还是很好的。   后来又用traceroute试了一下新加坡机房的测试页面,发现并不像网上所说,会先绕去北美一圈,然后才到新加坡,而是直接从日本到了新加坡:   那单从传输距离来说,新加坡明显还是比旧金山近很多,也就解释了为什么新加坡机房速度会比较快了。   Shadowsocks是国内的clowwindy写的工具,在goagent沦陷,ssh速度偏慢的情况下确实给大家带来了非常大的便利。前两天中文维基百科也不能愉快地从国内访问了,借网络上一张图看看,世界前30的网站我们还能上几个……希望这已经是最坏的时候了。

从Internet访问没有外网ip的NAS服务器的解决办法

  最近家里买了一台NAS服务器,用来完成多项任务,比如存储和管理大量的照片,用做24小时离线下载机器等。但其中NAS比较吸引我的一个功能是,能够随时随地从外网访问家里NAS机器上的数据,并且能够在外地游玩的时候,把照片通过互联网随时传到家里的NAS机器上备份并腾出设备空间继续拍照。   这样做的前提是你的路由器得有一个外网ip。有了外网ip后,可通过设置路由器的端口转发,再设置一个DDNS域名就可随时访问家里的NAS了。但恰好自己使用的网络是鹏博士集团下的一家公司(宽带通,长城宽带都是),恰好他们以转卖二手带宽,不给拨号用户外网ip而著称。他们给你的拨号ip实际是经过多层NAT转发的一个大局域网ip。为了实现目的,必须解决所谓的NAT穿透/NAT打洞/内网穿透问题。   一开始搜到了花生壳,最近刚好除了内网版,号称可以实现没有公网ip的情况下访问你的内网设备。测试了一下果然可以,但需要交年费,并且限制流量,要想用更多的流量就得交更多的钱,弃用之。   最后找到了ssh的反向端口转发(reverse port forwarding)功能,这是常被忽略但是非常强大的一个用途。原理是在本地机器的端口和远程机器的端口建立映射关系,这样访问远程机器指定端口时,所有请求都会被加密并传输到本地机器的端口上,本地机器响应后将结果在转发回远程机器的端口,整个过程看起来就像远程机器做出响应一样,强大之处是远程机器可以直接绕过防火墙和各种NAT转发,准确找到你的内网机器。   具体做法很简单,只需要一个命令:   ssh -NfR <remote port>:localhost:<local port> remoteuser@remoteserver   其中remote port是要接受请求的远程机器端口,local port是要做出响应的本地机器的端口, remoteserver是远程机器的地址,remoteuser是负责转发的具体用户。比如家里的NAS端口是8080,你的vps外网地址1.2.3.4,那么可以通过在你的NAS上执行ssh –NfR 8888:localhost:8080 user1@1.2.3.4命令后,访问vps的8888端口来访问家里的NAS机器了。   几个需要注意的问题:1. 需要设置远程机器ssh配置文件中的GatewayPorts参数来达到允许任意地址机器来使用这个转发规则的目的,  否则上述命令只允许在远程机器本机上的请求通过,centos上操作见此;2. 该命令执行后,如果一段时间内没有请求被转发,则ssh反向连接会自动断开,这时候就需要autossh之类的工具来维持这个连接(实时监测,断开后自动重连),具体使用方法可以搜到很多例子;3. ssh通过autossh自动重连时不可能每次都手动输入用户密码,所以需要改用key authentication的方式连接(将本地机器的用户公钥添加到远程机器用户的~/.ssh/authorized_keys文件中)。   虽然鹏博士的实际出口网速很慢,但在大局域网下迅雷下载能满10M/s,可在线看1080p视频,性价比还是挺高的,明年不用换高价的宽带了。。。   PS: 此方法可用于其他场景,比如回家后远程访问公司机器上的资料,给外网客户演示公司内网机器上的demo等。   参考资料: Bypassing corporate firewall with reverse ssh port forwarding 实战 SSH 端口转发

Nexus 7电池充电慢耗电快的解决办法

最近发现前两年买的Nexus 7一代出现了充电非常慢(充满电整个需要10个小时以上),并且充满后使用耗电超快的问题,以为是电池寿命到了,想看看别人是怎么解决的,最后在youtube上找到一个解决办法,测试后确实解决了电池问题,电池又和新的差不多了。 解决办法就是:在充电的时候,把充电器一头的usb线(usb线两头中大头的那一边)反复插拔若干次。看起来很奇怪,但确实解决了此问题。

在Docker的container中授权Portal for ArcGIS失败的解决办法

Docker是一中基于传统的Linux container, Namespaces, Control groups等技术发展而来的开源并且超轻量的虚拟化技术。相比传统的虚拟化技术,Docker省去了hypervisor(如VMWare,Hyper-V等)软件以及guest os两层,节约了相当可观的软硬件资源,但又实现了软硬件资源的完全隔离。所以你几乎可以在Docker的虚拟机实例(叫做container)中做传统虚拟机可以办到的任何事情,唯一的区别就是更快。 这次尝试在Docker的container中安装Portal for ArcGIS 10.3软件,以便更快地分发给其他人来使用。软件的静默安装可以利用类似“./Setup -m silent -l yes -a /path/to/portal.ecp -d /opt/arcgis/portal”的命令来实现,但装完启动Portal服务后,仍然提示需要授权,利用./authorizeSoftware –f portal.ecp授权时报错: Software authorization failed. Please make sure your authorization file is valid and try again. 检查了ecp文件并没有问题。于是查看authorizeSoftware脚本文件,发现有相应的授权日志文件: 查看该日志文件发现,是由于缺少so库引起的: 安装相应类库后,再次授权成功。 附上在从docker hub中下载的centos:centos6 image启动的container里,安装Portal for ArcGIS 10.3时需要用到的类库列表: tar, gettext, libpng-1.2.49-1.el6_2.x86_64, freetype-2.3.11-14.el6_3.1.x86_64, libSM-1.2.1-2.el6.x86_64, libXrender-0.9.8-2.1.el6.x86_64, fontconfig-2.8.0-5.el6.x86_64, libXext-1.3.2-2.1.el6.x86_64

ArcGIS for Server中PublishingTools启动后又崩溃的解决办法

现象:ArcGIS for Server安装完成后,会自动创建并启动系统级别的几个GP服务,比如用于生成缓存切片的CachingTools服务,用于发布所有服务的PublishingTools服务等。这次安装完ArcGIS for Server后,发布一个服务失败。去Manager里查看,发现PublishingTools的GP服务是停止状态,启动之,提示成功,但几分钟该服务又停止了。在日志中看到如下信息:Service containing process crashed for ‘System/PublishingTools.GPServer’. 原因:Google搜到了这个帖子,发现是注册表中记录的ArcGIS for Server所使用的64位Python安装路径出错引起的。在注册表中查找HKEY_LOCAL_MACHINESOFTWAREPythonPythonCore2.7这个位置, 发现记录的64位Python安装路径是C:Python271408420255115ArcGISX6410.3,这个路径是之前用脚本安装Server时的遗留路径,新的有效路径已经改为C:Python27_x64ArcGISX6410.3了。产生这个错误的原因可能有所不同,我这里是因为使用了自定义的脚本重新安装ArcGIS for Server导致的。 解决:将HKEY_LOCAL_MACHINESOFTWAREPythonPythonCore2.7注册表路径下所有包含安装路径的键值修改成当前的有效安装路径之后,就可以成功启动PublishingTools的GP服务了。

Portable Basemap Server发布3.1版本

更新内容: ~在线切片转换为MBTiles时,增加RecreateEmptyCache模式。当你想继续上次未完成的任务或打算合并多个级别/范围的切片时,RecreateEmptyCache模式会非常适合;~在CustomOnlineMaps.xml中自定义数据源时,增加Multi-Layer模式,比如可将标注和影像两个数据源融合为一个服务。具体用法请参考自带示例;~修复已知Bug。 下载地址:https://geopbs.codeplex.com/详见:https://blog.newnaw.com/?p=890

快速实现ArcGIS缓存切片线性偏移的办法

  来自客户的需求:某省范围创建大比例尺缓存切片的工作已经全部完成,但由于不可抗拒因素,生产缓存切片的原始矢量数据被线性偏移了,有什么办法能够在不重新创建缓存的基础上,能够使得现有切片和偏移后的矢量数据准确叠加,并且地理坐标与偏移后的矢量数据保持一致?  问题分析:站在客户端的角度来分析此问题。客户端绘制切片的过程是,地图缩放或平移后,获得当前屏幕对应的地理坐标范围,通过计算,获得与当前地理范围相交的所有切片的行列号,然后下载并拼接显示。计算的过程可参考《ArcGIS Server的切图原理深入》,《ArcGIS Server 10中的切图/缓存机制深入》。计算的过程中,有三个关键变量:缓存策略(Tiling Scheme)的切图原点(TileOrigin),当前比例尺的分辨率(Resolution)以及当前屏幕的地理范围。可以看出,客户端在加载切片时,后两个变量即当前比例尺的分辨率与客户端当前屏幕的地理范围都是无法改变的,所以我们能做出干预的就是切图原点这个变量了。  解决办法:通过计算比较可以得知,只需修改conf.xml文件,对切图原点(TileOrigin中的X和Y)进行偏移,偏移量和矢量数据的偏移保持一致,即可达到将缓存切片与偏移后的矢量数据准确叠加的目的。由于没有对conf.xml中的SpatialReference信息进行修改,所以地理坐标依然准确(与偏移后保持一致)。注:修改conf.xml中的参数后,需要重启缓存地图服务方可使改动生效。   下图中,绿色的点是原始数据发布的动态地图服务,红色的点是偏移后的数据发布的动态地图服务,多边形底图是经过缓存切片的缓存地图服务。此时未对TileOrigin参数修改。  下图为修改了TileOrigin参数并重启缓存地图服务后的效果。

Portal for ArcGIS多机部署并进行内容目录迁移的简要步骤

  以下内容假设你已经成功在单机环境下部署过下述软件。  目标:在多台机器上分别部署ArcGIS for Server,Portal for ArcGIS,ArcGIS Web Adaptor等软件,达到Portal正常运行,软件角色物理分离,能够投入生产的目的。   具体环境:4台Windows Server 2008 R2 SP1机器,提前设置fully qualified domain name (FQDN), 192.168.220.182 wa.newnaw.com,可通过外网域名访问到该机器。部署ArcGIS Web Adaptor v10.2.1,配置共享存储\waarcgisserver,供ArcGIS for Server使用(config-store,server directories),配置共享存储\waarcgisportal,供Portal for ArcGIS使用,部署PostgreSQL v9.2.2,供建立SDE Geodatabase,作为ArcGIS for Server的data store使用。注:若硬件资源允许,理论上上述两个共享存储位置及SDE GDB应设置在独立的机器上; 192.168.220.183 portal.esrichinacp.com,内网机器。部署Portal for ArcGIS v10.2.1; 192.168.220.184 ags1.esrichinacp.com,内网机器。部署ArcGIS for Server v10.2.1; 192.168.220.185 ags2.esrichinacp.com,内网机器。部署ArcGIS for Server v10.2.1;   此次部署四台机器的防火墙均为开启状态。简便起见,也可将183,184,185三台只能内网访问的机器防火墙关闭,免去设置端口例外的麻烦。   部署完成后,可在外网通过wa.newnaw.com域名访问Portal for ArcGIS门户网站,并可发布托管服务到hosting server site(184,185集群)上;Portal运行或处理请求过程中,183,184,185的机器ip及域名对最终用户均透明不可见。   大致步骤: 在wa机器上安装postgresql 9.2.2; 在wa机器上建立c:arcgisserver文件夹,创建用户arcgis/arcgis。并共享c:arcgisserver,网络和ntfs权限里均赋予arcgis用户对该文件夹的完全控制权限; 在ags1,ags2上安装arcgis 10.2.1 for server,系统用户为arcgis/arcgis。ags1,ags2两台机器上防火墙均开启,均添加6080,6443,4000-4004端口为例外;在两台机器上均安装pgsql的64位客户端。注:config-store和directories目录填写时用的都是ip的unc地址,并且加入已有站点时,填的也是ags1的ip:6080; 给ags站点添加managed database。利用arcmap的gp工具,在wa机器(防火墙开5432端口,修改pg_hba.conf文件重启服务允许任何客户端连接,拷贝st_geometry到lib目录下)上创建sde geodatabase;在ags1,ags2的site的data store中添加该sde作为managed … Continue reading Portal for ArcGIS多机部署并进行内容目录迁移的简要步骤 »

在startssl.com申请免费的ssl证书并导入IIS进行使用

  如果网站需要提供https加密访问方式,那么必须拥有一个有效的ssl证书来向客户端证明自己的身份。而ssl证书通常由第三方机构签发,有Domain Validation (DV), Organisation Validation (OV) 和 Extended Validation (EV)三种级别,分别对应由低到高的三种认证级别,DV比较宽松,EV最严格。认证方式不同,价格也不同。比如DV级别的证书,StartSSL可免费申请一年,GeoTrust是149$每年,Godaddy是69.99$每年,我国的万网价格是4200¥每年。个人使用当然是StartSSL提供的证书性价比最高,虽然免费,但依然在Chrome,Firefox,IE等主流浏览器的内置受信任根证书颁发机构里面,如果是商业或机构使用,可选择顶级的证书颁发机构(当然不包括万网之流),彰显身份。下面就说明如何在startssl.com上申请免费证书,并部署到IIS上进行使用的步骤。 1. 首先需要在startssl.com上进行注册。该网站采用的是客户端证书认证方式,所以注册的过程就是填写自己的资料,邮件接收验证码,之后获得并在浏览器中安装StartSSL生成的一个客户端证书。这样以后以自己身份登录startssl.com时,就需要从安装了上述步骤证书的浏览器里直接访问startssl.com,而不需要输入用户名密码了。这个身份验证证书丢失后,只能重新注册,所以建议将该证书备份,具体步骤见How do I backup my client certificates。备份好后,可将该证书安装到其他计算机或浏览器,便于登陆startssl.com。 2. 注册之后,若要给某个域名申请证书,需要对域名进行验证,证明你是这个域名的拥有者才行。StartSSL采用的是域名拥有者邮箱验证,所以在Validations Wizard里选择Domain Name Validation,按照向导完成验证即可。 3. 接下来就是给通过验证的域名申请ssl证书。在Certificates Wizard中选择Web Server SSL/TLS Certificate,然后会进入创建私钥(Generate Private Key)步骤。   由于SSL/TLS采用的是非对称加密,所以必须私钥和公钥配合才能建立正确的安全连接。私钥由服务器端持有,保密,私有;公钥包含在客户端访问https网站时看到的证书内,公开,当客户端访问时即获得之。公钥和私钥正确配对后方可建立安全连接。填入对私钥文件保护的10位以上密码,继续,   即可得到一段加密文本,将该文本保存为.key的文件,比如privatekey.key,作为私钥保存好。这里你也可以预先利用openssl工具或IIS向导来生成包含自己额外信息,并且包含私钥的证书申请(.csr文件),这样就可以跳过Generate Private Key这步了。之后选择要为哪个域名创建证书,并且输入一个子域名,最终申请的证书会作用在这个子域名上。   StartSSL的免费证书只能给一个子域名用,若想为多个子域名申请证书或申请通配符形式的证书,则需要掏钱购买他们提供的class2级证书了。继续下一步,确认之后,可以得到一段文本,该文本便是StartSSL颁发给你网站的经过签名的证书,将其另存为.crt文件,比如ssl.crt(此证书即是网站客户端访问https连接时能够得到的文件,实质是包含了公钥,服务器名称,CA认证签名及其他信息的文件)。此外在该界面上最好根据提示,保存下来一个中间(intermediate)证书文件sub.class1.server.ca.pem,有的地方可能会用到。   到此,我们得到了一个privatekey.key的私钥文件,一个ssl.crt的证书文件(包含公钥),一个sub.class1.server.ca.pem中间证书文件。在给自己的网站配置ssl.crt公有证书文件之前,我们还需生成两个在其他地方可能会用到的文件。第一个是经过解密的私钥文件(decrypted private key),比如在Nginx部署证书时需要用到。此步骤可通过openssl工具或startssl.com网站提供的Toolbox–>Decrypt Private Key工具完成,将结果保存为decryptedprivatekey.key。第二个是PKCS#12存档文件(*.pfx或*.p12),实质是包含了.crt证书文件所有内容,私钥以及加密信息的文件,而在IIS中部署时就需要用到此文件。可利用startssl.com网站提供的Toolbox–>Create PKCS#12 (PFX) File工具,传入私钥文件privatekey.key及证书文件ssl.crt后,生成之,保存为pfxarchive.p12。 4. 在域名所对应的计算机上部署该证书,此处以IIS为例。操作过程很简单,在IIS根节点的服务器证书功能中,右键,导入,根据向导输入刚才得到的pfxarchive.p12文件即可,   最后,在IIS网站绑定中,指定443端口使用我们导入的证书即可。   这样,在以https访问此网站时,就能够看到我们申请的证书了。 参考文章: 向StartSSL申请个人域名SSL证书 申请startssl免费一年ssl证书 Difference between .pfx and .cert certificates

在Portal for ArcGIS中设置Federated Servers时请求报500错误的解决办法

  Portal for ArcGIS 10.2版本开始,可在Portal的组织管理中设置Federated Servers即联合服务器,从而通过Portal for ArcGIS来托管与之联合的ArcGIS for Server站点的安全性,使得两者的单点登录,以及后续使联合服务器变成Hosting Server(托管服务器),并在其上发布托管服务成为可能。关于两者的介绍和具体操作步骤请参考相关文档。这里说一下设置联合服务器时一个常见问题的解决办法。  在Portal的组织管理页面中,添加联合服务器时,有可能会出现如下错误:   具体请求是Portal的代理页面通过https方式访问要关联的ArcGIS for Server站点token服务时服务器端报500 internal error。  直接通过https方式访问上述token服务地址:  发现此证书不受信任,有安全警告;而如果通过https方式访问Portal,   证书是已经导入机器的受信任根证书颁发机构的,所以证书可信,没有安全警告。你可能还发现,上面两个证书的颁发者,颁发对象均不一样,说明这是两个完全不同的证书。这是因为第一个没有受信的证书是ArcGIS for Server自带的tomcat中6443端口使用的证书,此证书是在安装完ArcGIS for Server后,第一次创建站点时就会自动生成的,存放在config-store中该机器文件夹下的key stroe中;而后面的证书是我在IIS中自己创建的域证书,是IIS中的443端口使用的证书。如果你在联合服务器时遇到同样错误,很可能会发现两个证书的颁发者和颁发对象是同名的(大小写不一样),这是通常情况,我这里不同名是因为装完ArcGIS for Server之后,安装Portal之前修改了机器名。修改机器名为full qualified domain name步骤是必须的,应该在装ArcGIS for Server之前完成。  经过与同事讨论及实验得知,最初那个500错误是因为ArcGIS for Server站点6443端口安全证书不受信任引起的。所以解决办法有以下几种: 同Portal的443端口(其实Portal是7443端口,通过443是Web Adaptor的端口)所使用证书的处理办法一样,将6443端口的证书也导入机器的受信区域。如果导入成功,浏览器访问ArcGIS for Server的6443端口应该不再有警告信息,如此在Portal中联合服务器时就不会报500错误了; 既然IIS中自己创建的证书已经设为可信了,那么可以指定ArcGIS for Server的6443端口使用同样的证书,则通过https访问6443端口时自然也不会报警告信息。大致步骤是,从iis中导出证书,在ArcGIS for Server中通过admin rest api将证书导入到机器中,然后编辑机器资源,指定该机器使用该证书。具体可参考相关的admin api帮助。   此处我遇到的错误是通过第二个办法解决的。补充:如果你和我一样,6443使用的证书的颁发对象与当前机器名不同,建议使用admin rest api,重新生成一个颁发对象与当前机器名相同的自签名证书,之后再将其导入机器的受信区域。