<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://www.itecfun.com/extern.php?action=feed&amp;fid=21&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[个人知识管理站 / web开发]]></title>
		<link>http://www.itecfun.com/index.php</link>
		<description><![CDATA[个人知识管理站 最近发表的主题。]]></description>
		<lastBuildDate>Sun, 29 Dec 2019 11:54:15 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[基于CentOS7+Geoserver2.16.0+Tomcat8.5搭建地图服务器环境]]></title>
			<link>http://www.itecfun.com/viewtopic.php?id=3414&amp;action=new</link>
			<description><![CDATA[<p>基于CentOS7+Geoserver2.16.0+Tomcat8.5搭建地图服务器环境<br />目 录<br />1.简介<br />2.搭建环境</p><p>(1)、安装jdk-8u231环境</p><p>(2)、安装 Tomcat</p><p>(3)、安装geoserver</p><p>(4) centos7 中 Tomcat 开机自动启动</p><p>(5)、安装PostgreSQL</p><p>3.安装过程中的相关问题</p><p>(1)、关闭默认防火墙</p><p>(2)、查看磁盘空间大小</p><p>(3)、扩展虚拟机vmware中centos7磁盘空间</p><p>(4)、VMware中centos7无法共享文件夹的问题</p><p>(5)、cannot change directory to /home/geoweb_cache: Permission denied</p><p>(6) phpPgAdmin登陆时提示Login disallowed for security reasons</p><p>1.简介<br />地图服务器软件环境，分为四部分： Tomcat 作为geoserver发布的容器， geoserver作为地图服务器， PostgresSQL数据库 PostGIS数据库插件，浏览器等， 可以说是开源WebGIS绝配，比较适合中小项目的地图环境搭建。 如果单单是做简单的地图服务器研究，一个Geoserver就够了。</p><p>jdk -8u231：Tomcat和Geoserver的运行都需要java环境的支持，需要安装对应的版本的jdk jdk 官网下载地址</p><p>Tomcat: Tomcat是Geoserver的容器，安装Tomcat之前一定要确定jdk已经安装成功 Tomcat官网下载地址</p><p>Geoserver： Geoserver是运行在浏览器端的地图服务器，用来发布地图服务，支持WMS、WFS、WPS等OGC标准服务。 Geoserver官网下载地址</p><p>PostgreSQL： PostgreSQL是开源数据库，用来承载我们用于构成地图的地理数据。虽然Geoserver支持直接将Shp数据发布成地图服务，但是在项目应用中，应尽量采用数据库形式来管理和存储地理数据。 PostgresSQL官方下载地址</p><p>PostGIS： PostGIS是一个PostgreSQL数据库插件，安装了PostGIS插件的pg数据库，将支持存储地理数据，支持各种空间运行操作。 PostGIS官方下载地址</p><p>浏览器： 发布地图服务，当然离不开浏览器。使用Geoserver作为地图服务器时，推荐使用谷歌浏览器。</p><p>2.搭建环境<br />搭建环境前，首先要了解自己的服务器系统配置，然后去各软件官网找到系统对于的版本下载。</p><p>本次搭建环境的软件信息如下：</p><p>centos 7<br />jdk-8u231<br />apache-tomcat-8.5.50<br />geoserver-2.16.0（war)<br />postgresql10<br />postgis30_10<br />(0)、CentOS 7<br />本GeoServer服务器采用CentOS 7 进行部署，系统通过vmware 虚拟机进行安装，由于CentOS7系统和Geoserver服务已经安装好了，只需将整个虚拟机相关文件拷贝到新的目录下，通过安装Vmare-workstation-12.1.1版本，添加现有虚拟机即可。 添加虚拟机之后，对于虚拟机的网路需要重新配置下，如下图所示：</p><p>先删除现有的vmnet8(NAT共享网络）</p><br /><br /><p>然后重新添加vmnet8 NAT共享网络</p><br /><br /><p>进行如下设置即可</p><br /><br /><p>配置完成网络之后，通过命令 systemctl restart network 重启网络服务即可</p><p>如果启动失败，可能是网络配置文件中的网卡mac地址与虚拟机新配置的网卡mac不一致，需要将配置文件中的mac地址改过来</p><p>查看： vi /etc/sysconfig/network-script/ifcfg-eno16777736 配置文件中的HWADD地址</p><br /><br /><p>再通过命令 ifconfig -a 查看网卡信息，找到eno16777736对应的mac地址，</p><br /><br /><p>将配置文件中的地址改为eno1677736对应的mac地址,通过命令 systemctl start network启动网络服务即可。</p><p>(1)、安装jdk-8u231环境<br />设置Java环境变量，注意：geoserver对Java版本有要求，安装Java前先看Geoserver官方文档中，你的Geoserver版本要求的Java版本。</p><p>参考：CentOS7下安装JDK1.8详细过程</p><p>(2)、安装 Tomcat<br />下载地址：https://tomcat.apache.org/download-80.cgi</p><br /><br /><p>下载之后解压缩到 CentOS7 系统的&quot;/opt/tomcat9/&quot;目录下，</p><p>配置server.xml文件中web访问的端口为8000，因为默认的8080端口已被占用。</p><p>进入/opt/tomcat9/bin/目录下，运行命令：</p><p># ./startup.sh<br />运行结果如下图所示：</p><br /><br /><p>表示tomcat已经启动成功，访问下地址：http://localhost:8000</p><br /><br /><p>表示tomcat8.5 已经安装成功。</p><p>(3)、安装geoserver<br />首先，在geoserver官网：http://geoserver.org/ 选择适当的软件版本，目前最新的是2.16.1，但一般不建议选择最新版本。 geoserver可以以jar包形式部署在toacat下，非常方便，我选择的是2.16.0版本，如下图所示：</p><br /><br /><p>进行下载页面，geoserver官网一般提供了三种软件包：</p><br /><br /><p>我选择Web Archive，下载文件是geoserer.war</p><p>将geoserver.war直接拷贝到tomcat/webapps/目录系安即可</p><p>重新启动tomcat，可以看到tomcat/webapps/目录下多了geoserver文件了</p><p>Alt text</p><p>这样，geoserver就可以作为一个Web应用程序，当启动Tomcat时，Geoserver服务将随之启动。 安装完geoserver后，如果你Java设置也没问题，启动geoserver服务，在浏览器中输入： http://localhost:8000/geoserver/web 就可以来到地图服务器首页了。使用默认用户名和密码登录后，即可发布在线地图服务。</p><p>Alt text</p><p>Geoserver集成的gwc切片处理<br />&#160; &#160; </p><p>(4)、centos7 中 Tomcat 开机自动启动<br />1、安装tomcat</p><p># cd /opt <br /># tar -zxvf apache-tomcat-8.5.50.tar.gz<br />安装包会被解压到/opt/apache-tomcat-8.5.50.tar.gz,将目录重命名为tomcat9</p><p># mv /opt/apache-tomcat-8.5.50.tar.gz /opt/tomcat9<br />配置tomcat9启动环境</p><p># vi /etc/profile.d/tomcat9.sh<br />export CATALINA_HOME=/usr/local/tomcat9<br />export PATH=$TOMCAT_HOME/bin:$PATH<br /># source /etc/profile.d/tomcat9.sh<br />使用systemd管理tomcat9服务</p><p># cat /usr/lib/systemd/system/tomcat9.service <br />[Unit]<br />Description=Apache Tomcat 9<br />After=syslog.target network.target remote-fs.target nss-lookup.target</p><p>[Service]<br />Type=forking<br />PIDFile=/opt/tomcat9/tomcat9.pid<br />ExecStart=/opt/tomcat9/bin/catalina.sh start -DEFOREGRAND<br />ExecReload=/bin/kill -s HUP $MAINPID<br />ExecStop=/bin/kill -s QUIT $MAINPID<br />RemainAfterExit=yes</p><p>[Install]<br />WantedBy=multi-user.target<br />2、配置tomcat9开机启动</p><p>在/usr/lib/systemd/system目录下增加tomcat9.service文件，内容如下：</p><p>[Unit]<br />Description=Tomcat<br />After=syslog.target network.target remote-fs.target nss-lookup.target</p><p>[Service]<br />Type=oneshot<br />ExecStart=/opt/tomcat9/bin/startup.sh<br />ExecStop=/opt/tomcat9/bin/shutdown.sh<br />ExecReload=/bin/kill -s HUP $MAINPID<br />RemainAfterExit=yes</p><p>[Install]<br />WantedBy=multi-user.target<br />退出并保存，执行systemctl enable tomcat使tomcat9随开机启动</p><p>#systemctl enable tomcat9.service<br />另外命令</p><p>systemctl start tomcat9.service&#160; &#160; 启动tomcat</p><p>systemctl stop tomcat9.service&#160; &#160; 关闭tomcat</p><p>systemctl restart tomcat9.service&#160; &#160; 重启tomcat<br />当然启动和结束tomcat也可以到tomcat的安装目录的bin目录下执行shutdown.sh startup.sh来完成</p><p>3、验证安装是否成功</p><p>输入 http://localhost:8000/</p><p>如果能出现熟悉的tomcat主页，就表示安装成功了，请确保服务器8000端口已经放开</p><p>(5)、安装PostgreSQL<br />参考文档</p><p>查看postgresql源</p><p>yum list | grep postgresql</p><br /><br /><p>选择对应的安装版本，运行如下命令：</p><p>yum install postgresql10.x86_64</p><p>安装phpPgAdmin:<br />yum install phpPgAdmin httpd</p><p>注意phpPgAdmin区分大小写，要准确使用上面所示的大小写！</p><p>若要远程访问需要继续：</p><p>编辑文件 /etc/httpd/conf.d/phpPgAdmin.conf</p><p>vi /etc/httpd/conf.d/phpPgAdmin.conf<br />修改如下加粗的部分：</p><p>Alias /phpPgAdmin /usr/share/phpPgAdmin</p><p>&lt;Location /phpPgAdmin&gt;<br />&#160; &lt;IfModule mod_authz_core.c&gt;<br />&#160; &#160; # Apache 2.4<br />&#160; &#160; Require all granted&#160; &#160;#改成这个<br />&#160; &#160; #Require host example.com<br />&lt;/IfModule&gt;<br />&#160; &lt;IfModule !mod_authz_core.c&gt;<br />&#160; &#160; &#160; &#160; # Apache 2.2<br />&#160; &#160; &#160; &#160; Order deny,allow&#160; &#160;#改成这个<br />&#160; &#160; &#160; &#160; Allow from all&#160; &#160; &#160;#改成这个<br />&#160; &#160; &#160; &#160; # Allow from .example.com<br />&#160; &#160; &lt;/IfModule&gt;<br />&lt;/Location&gt;<br />重启httpd服务</p><p>systemctl enable httpd</p><p>systemctl start httpd</p><p>默认使用http://localhost/phpPgAdmin 访问phpPgAdmin</p><p>Configuration error: Copy conf/config.inc.php-dist to conf/config.inc.php and edit appropriately.<br />[root@localhost ~]# find / -name config.inc.php-dist<br />/etc/phpPgAdmin/config.inc.php-dist<br />/usr/share/phpPgAdmin/conf/config.inc.php-dist<br />[root@localhost ~]# <br />[root@localhost ~]# cp /etc/phpPgAdmin/config.inc.php-dist<br />(6)、安装PostGIS。<br />安装配置官网资料</p><p>查看postgresql源</p><p>yum list | grep postgis</p><br /><br /><p>选择已安装的postsql版本 对应的postgis版本进行安装</p><p>yum install postgis30_10.x86_64</p><p>安装完成后，需要在对应的数据库中执行脚本</p><p>-- Enable PostGIS (as of 3.0 contains just geometry/geography)<br />CREATE EXTENSION postgis;<br />-- enable raster support (for 3+)<br />CREATE EXTENSION postgis_raster;<br />-- Enable Topology<br />CREATE EXTENSION postgis_topology;<br />-- Enable PostGIS Advanced 3D<br />-- and other geoprocessing algorithms<br />-- sfcgal not available with all distributions<br />CREATE EXTENSION postgis_sfcgal;<br />-- fuzzy matching needed for Tiger<br />CREATE EXTENSION fuzzystrmatch;<br />-- rule based standardizer<br />CREATE EXTENSION address_standardizer;<br />-- example rule data set<br />CREATE EXTENSION address_standardizer_data_us;<br />-- Enable US Tiger Geocoder<br />CREATE EXTENSION postgis_tiger_geocoder;<br />PostGIS安装后，自带了将Shp数据导入Postgres数据库的工具，可以用来向数据库导入你的GIS数据。在导入之前，先要创建一个数据库。我这里建的postgis数据库，使用pgAdmin4网页版，通过Tools&gt;Query Tool 打开Query Editor</p><p>将上面脚本拷贝到编辑器中执行 结果如下图所示：</p><br /><br /><p>3.安装过程中的相关问题<br />(1)、关闭默认防火墙<br />查看防火墙状态</p><p>firewall-cmd --state</p><p>停止firewall</p><p>systemctl stop firewalld.service</p><p>禁止firewall开机启动</p><p>systemctl disable firewalld.service</p><p>关闭selinux</p><p>进入到 /etc/selinux/config 文件</p><p>vi /etc/selinux/config<br />将 SELINUX=enforcing改为 SELINUX=disabled</p><p>(2) 查看磁盘空间大小<br />命令：</p><p># df -hl<br />显示：</p><p>文件系统 容量 已用 可用 已用% 挂载点</p><p>Filesystem Size Used Avail Use% Mounted on</p><p>/dev/hda2 45G 19G 24G 44% / /dev/hda1 494</p><p>其他磁盘相关命令：</p><p>df -hl 查看磁盘剩余空间&#160; &#160; &#160;<br />df -h 查看每个根路径的分区大小&#160; &#160; &#160;<br />du -sh [目录名] 返回该目录的大小&#160; &#160; &#160;<br />du -sm [文件夹] 返回该文件夹总M数&#160; &#160; &#160;<br />du -h [目录名] 查看指定文件夹下的所有文件大小（包含子文件夹）</p><p>查看硬盘的分区 #sudo fdisk -l&#160; &#160; &#160;<br />查看IDE硬盘信息 #sudo hdparm -i /dev/hda&#160; &#160; &#160;<br />查看STAT硬盘信息 #sudo hdparm -I /dev/sda 或 #sudo apt-get install blktool #sudo blktool /dev/sda id&#160; &#160; &#160;<br />查看硬盘剩余空间 #df -h #df -H&#160; &#160; &#160;<br />查看目录占用空间 #du -hs 目录名<br />(3)、扩展虚拟机vmware中centos7磁盘空间<br />0、思路</p><p>创建一个新的逻辑分区，将新的逻辑分区格式化ext3（或其他类型）的文件系统，mount到磁盘空间不够的文件系统，就跟原来的分区/文件系统一样的使用</p><p>1、准备</p><p>1.1 注意使用VMware自带的Expand功能不能有Snapshot存在，所以在expand之前先把所有的Snapshot删掉了</p><p>1.2 为了以防万一，把VMware虚拟机copy了一份备用。</p><p>2、查看挂载点</p><p>[root@geoserver py_user]# df -hl <br />文件系统&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;容量&#160; 已用&#160; 可用 已用% 挂载点<br />devtmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;1.4G&#160; &#160; &#160;0&#160; 1.4G&#160; &#160; 0% /dev<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 1.4G&#160; 8.0K&#160; 1.4G&#160; &#160; 1% /dev/shm<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 1.4G&#160; &#160;11M&#160; 1.4G&#160; &#160; 1% /run<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 1.4G&#160; &#160; &#160;0&#160; 1.4G&#160; &#160; 0% /sys/fs/cgroup<br />/dev/mapper/centos-root&#160; &#160;18G&#160; &#160;18G&#160; &#160;32K&#160; 100% /<br />/dev/sda1&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 497M&#160; 296M&#160; 202M&#160; &#160;60% /boot<br />shm&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;64M&#160; &#160; &#160;0&#160; &#160;64M&#160; &#160; 0% /var/lib/docker/containers/fe4541c83afb7864f65bef244ec2bc309674e90e22f1a665575c83fdb7d2c085/mounts/shm<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 283M&#160; &#160; &#160;0&#160; 283M&#160; &#160; 0% /run/user/0<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 283M&#160; 4.0K&#160; 283M&#160; &#160; 1% /run/user/42<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 283M&#160; &#160;20K&#160; 283M&#160; &#160; 1% /run/user/1000<br />[root@geoserver py_user]#<br />3、扩展磁盘空间</p><p>扩展VMWare硬盘空间</p><p>3.1 关闭Vmware 的 Linux系统</p><p>3.2 在VMWare菜单中设置：</p><p>VM -&gt; Settings… -&gt; Hardware -&gt; Hard Disk -&gt; Utilities -&gt; Expand</p><p>输入你想要扩展到多少G，假设新增加了 40G</p><br /><br /><p>4、对新增加的硬盘进行分区</p><p>执行步骤：</p><p>执行“fdisk /dev/sda”，进入到fdisk<br />输入p指令，查看已分区数量（有两个 /dev/sda1 /dev/sda2）<br />输入 n {new partition}指令，新增加一个分区<br />输入p {primary partition}，分区类型选择为主分区<br />输入分区号 3 {partition number} ，分区号选3（上面显示我已经有2个分区了）<br />回车 默认（起始扇区）<br />回车 默认（结束扇区）<br />输入t {change partition id}指令，修改分区类型<br />按提示输入刚才的分区号3<br />输入分区类型 8e {Linux LVM partition}<br />输入w指令，将以上改动写入分区表<br />最后完成，退出fdisk命令<br />[root@vnode1 ~]# fdisk /dev/sda<br />欢迎使用 fdisk (util-linux 2.23.2)。 <br />更改将停留在内存中，直到您决定将更改写入磁盘。<br />使用写入命令前请三思。 <br />命令(输入 m 获取帮助)：p<br />设备 Boot&#160; &#160; &#160; Start&#160; &#160; &#160; &#160; &#160;End&#160; &#160; &#160; Blocks&#160; &#160;Id&#160; System<br />/dev/sda1&#160; &#160;*&#160; &#160; &#160; &#160; 2048&#160; &#160; &#160;1026047&#160; &#160; &#160; 512000&#160; &#160;83&#160; Linux<br />/dev/sda2&#160; &#160; &#160; &#160; &#160;1026048&#160; &#160; 83886079&#160; &#160; 41430016&#160; &#160;8e&#160; Linux LVM<br />命令(输入 m 获取帮助)：n<br />Partition type:<br />&#160; &#160;p&#160; &#160;primary (2 primary, 0 extended, 2 free)<br />&#160; &#160;e&#160; &#160;extended<br />Select (default p): p<br />分区号 (3,4，默认 3)：3<br />起始 扇区 (83886080-167772159，默认为 83886080)：<br />将使用默认值 83886080<br />Last 扇区, +扇区 or +size{K,M,G} (83886080-167772159，默认为 167772159)：<br />将使用默认值 167772159<br />分区 3 已设置为 Linux 类型，大小设为 40 GiB<br />命令(输入 m 获取帮助)：t<br />分区号 (1-3，默认 3)：3<br />Hex 代码(输入 L 列出所有代码)：8e<br />已将分区“Linux”的类型更改为“Linux LVM”<br />命令(输入 m 获取帮助)：w<br />The partition table has been altered!<br />Calling ioctl() to re-read partition table.<br />WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.<br />The kernel still uses the old table. The new table will be used at<br />the next reboot or after you run partprobe(8) or kpartx(8)<br />正在同步磁盘。<br />重启系统:</p><p>[root@vnode1 ~]# reboot<br />5、对新增加的硬盘格式化</p><p>[root@vnode1 ~]# mkfs.ext3 /dev/sda3<br />mke2fs 1.42.9 (28-Dec-2013)<br />文件系统标签=<br />OS type: Linux<br />块大小=4096 (log=2)<br />分块大小=4096 (log=2)<br />Stride=0 blocks, Stripe width=0 blocks<br />2621440 inodes, 10485760 blocks<br />524288 blocks (5.00%) reserved for the super user<br />第一个数据块=0<br />Maximum filesystem blocks=4294967296<br />320 block groups<br />32768 blocks per group, 32768 fragments per group<br />8192 inodes per group<br />Superblock backups stored on blocks: <br />&#160; &#160; 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, <br />&#160; &#160; 4096000, 7962624</p><p>Allocating group tables: 完成&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <br />正在写入inode表: 完成&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <br />Creating journal (32768 blocks): 完成<br />Writing superblocks and filesystem accounting information: 完成<br />6、添加新LVM到已有的LVM组，实现扩容</p><p>lvm&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 进入lvm管理&#160; <br />lvm&gt; pvcreate /dev/sda3&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 这是初始化刚才的分区，必须的&#160; <br />lvm&gt;vgextend centos /dev/sda3&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 将初始化过的分区加入到虚拟卷组vg_dc01<br />lvm&gt;lvextend -L +39.9G /dev/mapper/centos-root&#160; 扩展已有卷的容量<br />lvm&gt;pvdisplay&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;查看卷容量，这时你会看到一个很大的卷了<br />lvm&gt;quit&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 退出<br />[root@vnode1 ~]# lvm<br />lvm&gt; pvcreate /dev/sda3<br />WARNING: ext3 signature detected on /dev/sda3 at offset 1080. Wipe it? [y/n]: y<br />&#160; Wiping ext3 signature on /dev/sda3.<br />&#160; Physical volume &quot;/dev/sda3&quot; successfully created<br />lvm&gt; vgextend centos /dev/sda3 <br />&#160; Volume group &quot;centos&quot; successfully extended<br />lvm&gt; lvextend -L +39.9G /dev/mapper/centos-root<br />&#160; Rounding size to boundary between physical extents: 39.90 GiB<br />&#160; Size of logical volume centos/root changed from 35.47 GiB (9080 extents) to 75.37 GiB (19295 extents).<br />&#160; Logical volume root successfully resized.<br />lvm&gt; pvdisplay<br />&#160; --- Physical volume ---<br />&#160; PV Name&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;/dev/sda2<br />&#160; VG Name&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;centos<br />&#160; PV Size&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;39.51 GiB / not usable 3.00 MiB<br />&#160; Allocatable&#160; &#160; &#160; &#160; &#160; &#160;yes (but full)<br />&#160; PE Size&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;4.00 MiB<br />&#160; Total PE&#160; &#160; &#160; &#160; &#160; &#160; &#160; 10114<br />&#160; Free PE&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;0<br />&#160; Allocated PE&#160; &#160; &#160; &#160; &#160; 10114<br />&#160; PV UUID&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;vtNvX3-b1yw-ePoh-YGHQ-tDhL-x0ru-mfts3k</p><p>&#160; --- Physical volume ---<br />&#160; PV Name&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;/dev/sda3<br />&#160; VG Name&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;centos<br />&#160; PV Size&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;40.00 GiB / not usable 4.00 MiB<br />&#160; Allocatable&#160; &#160; &#160; &#160; &#160; &#160;yes <br />&#160; PE Size&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;4.00 MiB<br />&#160; Total PE&#160; &#160; &#160; &#160; &#160; &#160; &#160; 10239<br />&#160; Free PE&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;34<br />&#160; Allocated PE&#160; &#160; &#160; &#160; &#160; 10205<br />&#160; PV UUID&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;jWqvcF-R53u-ZeAy-zO2L-PbtI-51VP-yHNZ1g</p><p>lvm&gt; quit<br />&#160; Exiting.<br />[root@vnode1 ~]#<br />7.以上只是卷扩容了，下面是文件系统的真正扩容，输入以下命令：</p><p>[root@vnode1 ~]# resize2fs /dev/mapper/centos-root<br />resize2fs 1.42.9 (28-Dec-2013)<br />resize2fs: Bad magic number in super-block 当尝试打开 /dev/mapper/centos-root 时<br />找不到有效的文件系统超级块.<br />报错：当尝试打开 /dev/mapper/centos-root 时 找不到有效的文件系统超级块</p><p>因为我的centos7的某些分区用的是xfs的文件系统（使用df -T查看即可知道）</p><p>[root@vnode1 ~]# df -T<br />文件系统&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 类型&#160; &#160; &#160; &#160; 1K-块&#160; &#160; 已用&#160; &#160; &#160;可用 已用% 挂载点<br />/dev/mapper/centos-root xfs&#160; &#160; &#160; 37173520 5574340 31599180&#160; &#160;15% /<br />devtmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; devtmpfs&#160; 3987400&#160; &#160; &#160; &#160;0&#160; 3987400&#160; &#160; 0% /dev<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;tmpfs&#160; &#160; &#160;3997856&#160; &#160; &#160; &#160;0&#160; 3997856&#160; &#160; 0% /dev/shm<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;tmpfs&#160; &#160; &#160;3997856&#160; &#160; 8628&#160; 3989228&#160; &#160; 1% /run<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;tmpfs&#160; &#160; &#160;3997856&#160; &#160; &#160; &#160;0&#160; 3997856&#160; &#160; 0% /sys/fs/cgroup<br />/dev/sda1&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;xfs&#160; &#160; &#160; &#160; 508588&#160; 127152&#160; &#160;381436&#160; &#160;26% /boot<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;tmpfs&#160; &#160; &#160; 799572&#160; &#160; &#160; &#160;0&#160; &#160;799572&#160; &#160; 0% /run/user/0<br />[root@vnode1 ~]#<br />将resize2fs替换为xfs_growfs，重新执行一遍即可，如下：</p><p>[root@vnode1 ~]# xfs_growfs /dev/mapper/centos-root<br />meta-data=/dev/mapper/centos-root isize=256&#160; &#160; agcount=4, agsize=2324480 blks<br />&#160; &#160; &#160; &#160; &#160;=&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;sectsz=512&#160; &#160;attr=2, projid32bit=1<br />&#160; &#160; &#160; &#160; &#160;=&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;crc=0&#160; &#160; &#160; &#160; finobt=0<br />data&#160; &#160; &#160;=&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;bsize=4096&#160; &#160;blocks=9297920, imaxpct=25<br />&#160; &#160; &#160; &#160; &#160;=&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;sunit=0&#160; &#160; &#160; swidth=0 blks<br />naming&#160; &#160;=version 2&#160; &#160; &#160; &#160; &#160; &#160; &#160; bsize=4096&#160; &#160;ascii-ci=0 ftype=0<br />log&#160; &#160; &#160; =internal&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;bsize=4096&#160; &#160;blocks=4540, version=2<br />&#160; &#160; &#160; &#160; &#160;=&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;sectsz=512&#160; &#160;sunit=0 blks, lazy-count=1<br />realtime =none&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;extsz=4096&#160; &#160;blocks=0, rtextents=0<br />data blocks changed from 9297920 to 19758080<br />最后再运行下：df -h</p><p>即可看到扩容后的磁盘空间</p><p>[root@vnode1 ~]# df -h<br />文件系统&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;容量&#160; 已用&#160; 可用 已用% 挂载点<br />/dev/mapper/centos-root&#160; &#160;76G&#160; 5.4G&#160; &#160;71G&#160; &#160; 8% /<br />devtmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;3.9G&#160; &#160; &#160;0&#160; 3.9G&#160; &#160; 0% /dev<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 3.9G&#160; &#160; &#160;0&#160; 3.9G&#160; &#160; 0% /dev/shm<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 3.9G&#160; 8.5M&#160; 3.9G&#160; &#160; 1% /run<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 3.9G&#160; &#160; &#160;0&#160; 3.9G&#160; &#160; 0% /sys/fs/cgroup<br />/dev/sda1&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 497M&#160; 125M&#160; 373M&#160; &#160;26% /boot<br />tmpfs&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 781M&#160; &#160; &#160;0&#160; 781M&#160; &#160; 0% /run/user/0<br />(4)、VMware中centos7无法共享文件夹的问题<br />在安装虚拟机VMware之后安装系统想要把windows的目录共享在centos下面,但是我们按照centos6的挂在方法发现不管用.在网上找了半天才知道centos7的VMware tools和centos6的不一样,需要重新再安装一次,用yum安装,而不是在VMware软件里面安装!!</p><p>1.先安装VMware软件里VMwareTools</p><br /><br /><p>没安装过的,点击安装,我的已经安装过了</p><p>然后挂载镜像</p><p>[root@centos7 ~]# mkdir /dvd<br />[root@centos7 ~]# mount /dev/cdrom /dvd<br />mount: /dev/sr0 is write-protected, mounting read-only<br />[root@centos7 ~]# cd /dvd/<br />[root@centos7 dvd]# ls<br />manifest.txt&#160; run_upgrader.sh&#160; VMwareTools-10.2.5-8068393.tar.gz&#160; vmware-tools-upgrader-32&#160; vmware-tools-upgrader-64<br />[root@centos7 dvd]# cp&#160; VMwareTools-10.2.5-8068393.tar.gz /root/<br />[root@centos7 dvd]# cd /root/<br />[root@centos7 ~]# tar xf VMwareTools-10.2.5-8068393.tar.gz<br />[root@centos7 ~]# cd vmware-tools-distrib/<br />[root@centos7 vmware-tools-distrib]# ./vmware-install.pl<br />然后一直回车就行</p><p>2.系统下安装vmtools:</p><p>安装相关软件包</p><p>yum install open-vm-tools *headers perl gcc make kernel-devel -y<br />安装完成就关闭系统,配置共享文件夹</p><p>3.配置VMware</p><p>右击虚拟机,点击配置,点击选项,如图所示:</p><br /><br /><p>点击浏览,选择你要共享的文件夹,然后下一步就完成了</p><br /><br /><p>4.配置完成了,启动系统就可以看到共享的文件夹/mnt/hgfs</p><p>记住:/mnt/hgfs这个文件夹不是手动创建的,是安装完成vmtools后产生的! 我们进入这个文件夹,但是并没有我们想要的共享文件夹,hgfs是空的,这是应为我们没有挂载.这里不像是centos6,给我们自动挂载的! 这可能是mnt缺少共享支持，打开terminal输入mount -t vmhgfs .host:/py_script /mnt/hgfs挂载该共享文件夹 我们可以用命令查看共享的文件夹</p><p>vmware-hgfsclient<br />5.然后挂载就可以使用了</p><p>mount -t vmhgfs .host:/share /mnt/hgfs<br />如果出现：Error: cannot mount filesystem: No such device这样的报错</p><p>则再运行</p><p>vmhgfs-fuse .host:/share /mnt/hgfs<br />往往就成功了（前提是VMware Tools安装已成功）</p><p>到此为止，可以正常使用共享文件夹了，但每次都要重新mount挂载一次，所以设置为启动后自动挂载：</p><p>进入/mnt/hgfs下面就有文件了</p><p>6.fuse: mountpoint is not empty</p><p>一定要加allow_other选项，不然之后的hgfs文件普通用户不能访问</p><p>如果之前没有加-o allow_other，已经使得文件hgfs在普通用户环境下不可访问，也就是提示了</p><p>fuse: mountpoint is not empty<br />fuse: if you are sure this is safe, use the &#039;nonempty&#039; mount option<br />可将nonempty选项加到里面去</p><p>sudo vmhgfs-fuse .host:/share /mnt/hgfs -o nonempty -o allow_other<br />重新执行命令即可.</p><p>7.开机自动挂载共享</p><p>为确保开机自动挂载共享文件夹，将命令写入/etc/rc.d/rc.local 并赋权限：</p><p>echo &quot;mount -t vmhgfs .host:/share /mnt/hgfs&quot; &gt;&gt; /etc/rc.d/rc.local<br />echo &quot;vmhgfs-fuse .host:/share /mnt/hgfs&quot; &gt;&gt; /etc/rc.d/rc.local<br />echo &quot;vmhgfs-fuse .host:/py_script /mnt/hgfs&quot; &gt;&gt; /etc/rc.d/rc.local</p><p>chmod 750 /etc/rc.d/rc.local<br />(5)、cannot change directory to /home/oracle: Permission denied<br />su: /bin/bash: Permission denied 带来的疑惑<br />在root用户下，su到一个普通用户oracle，得到如下错误:</p><p>[root@localhost ~]# su -root<br />su: warning: cannot change directory to /home/geoweb_cache: Permission denied<br />su: /bin/bash: Permission denied<br />而root用户也无法通过直接登录，出现同样错误。</p><p>这是一个非常奇怪的问题，到底是什么导致的呢？思路如下：</p><p>1，程序执行权限问题<br />2，程序依赖的共享库权限问题<br />3，目录权限问题<br />4，根空间问题。<br />检查/bin/bash，权限正确，检查/home/root权限正确，检查/lib/ld-***.so，权限也正确。</p><p>继续调试，检查/etc/passwd，将root的home设置为/tmp，把/tmp设置为777，这个权限应该是最宽松的。 而su出现同样的错误。</p><p>也就是root用户无法访问777权限的/tmp。</p><p>问题到底出现在哪里呢？</p><p>最后通过star命令，看到了问题根本，</p><p>[root@localhost ~]#stat /<br />输出如下：因为你ls是看不到的。<br />File: “/”&gt;<br />Size: 1024&#160; &#160; &#160; &#160; &#160; &#160; Blocks: 2&#160; &#160; &#160; &#160; &#160; IO Block: 1024&#160; &#160;目录<br />Device: 803h/2051d&#160; &#160; &#160; Inode: 2&#160; &#160; &#160; &#160; &#160; &#160;Links: 22<br />Access: (0666/drw-rw-rw-) Uid: (&#160; &#160; 0/&#160; &#160; root)&#160; &#160;Gid: (&#160; &#160; 0/&#160; &#160; root)<br />Access: 2007-12-01 22:28:48.000000000 +0800<br />Modify: 2007-12-01 22:28:34.000000000 +0800<br />Change: 2007-12-01 23:17:35.000000000 +0800<br />问题出来了，这里的权限是错误的，X权限的丢失造成的。</p><p>[root@localhost ~]#chmod 755 /<br />修改后,问题消失。</p><p>产生上述问题的方法： 第一种，chmod 666 /，可以导致。 或者， 第二种，chmod 700 /lib/ld-xxxx.so，也可以导致su失败。 有兴趣可以自己试一下。</p><p>/ 权限的丢失对于各种运行在自己用户身份上的daemon也存在同样的影响。</p><p>2.修改默认数据目录</p><p>Postgresql默认的数据目录是/var/lib/pgsql/版本号/data目录，这要求你在/var下有足够的存储空间，我们这里将其换掉，假设/home的空间很大。</p><p>首先在/home下创建一个Postgresql的数据目录，指定所有者postgres同时分配权限</p><p>mkdir /home/psql_data<br />chown postgres:postgres /home/psql_data<br />chmod 750 /home/psql_data</p><p>- 注意：修改数据目录之后，如果需要允许远程访问，需要重新设置 <br />- /home/postgresql_data/pg_hba.conf<br />- /home/postgresql_data/postgresql.conf<br />两个文件的相关参数</p><p>设置环境变量</p><p>export PATH=/usr/pgsql-10/bin:$PATH<br />export LD_LIBRARY_PATH=/usr/pgsql-10/lib<br />export PGDATA=/home/postgresql_data<br />切换到postgres用户，使用initdb初始化数据库，这样在/home/postgresql_data下会增加很多东西，</p><p>(6) phpPgAdmin登陆时提示Login disallowed for security reasons<br />find / -name config.inc.php <br />vi /etc/phpPgAdmin/config.inc.php<br />修改</p><p>$conf[&#039;extra_login_security&#039;] = true;<br />为</p><p>$conf[&#039;extra_login_security&#039;] = false;<br />重启postgresql服务</p><p>systemctl restart postgresql-10.service</p><p>重新访问即可。</p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Sun, 29 Dec 2019 11:54:15 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?id=3414&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[利用 Bootstrap 进行快速 Web 开发]]></title>
			<link>http://www.itecfun.com/viewtopic.php?id=3177&amp;action=new</link>
			<description><![CDATA[<p><a href="http://www.emberjs.cn/guides/" rel="nofollow">EMBER.JS指南</a></p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Wed, 01 Jul 2015 07:06:05 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?id=3177&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[ISO 2 Letter Language Codes]]></title>
			<link>http://www.itecfun.com/viewtopic.php?id=3178&amp;action=new</link>
			<description><![CDATA[<p>The codes below, which are sorted alphabetically by language (not language code) are to be used with the core lang attribute to identify the language contained inside the element that the lang attribute is applied to.</p><p>Table 1. Language Codes<br />Language&#160; &#160; Code<br />Abkhazian&#160; &#160; AB<br />Afar&#160; &#160; AA<br />Afrikaans&#160; &#160; AF<br />Albanian&#160; &#160; SQ<br />Amharic&#160; &#160; AM<br />Arabic&#160; &#160; &#160; &#160; &#160; &#160; AR<br />Armenian&#160; &#160; &#160; &#160; HY<br />Assamese&#160; &#160; &#160; &#160; AS<br />Aymara&#160; &#160; &#160; &#160; &#160; &#160; AY<br />Azerbaijani&#160; &#160; &#160; &#160; AZ<br />Bashkir&#160; &#160; &#160; &#160; &#160; &#160; BA<br />Basque&#160; &#160; &#160; &#160; &#160; &#160; EU<br />Bengali, Bangla&#160; &#160; BN<br />Bhutani&#160; &#160; &#160; &#160; &#160; &#160; DZ<br />Bihari&#160; &#160; &#160; &#160; &#160; &#160; BH<br />Bislama&#160; &#160; &#160; &#160; &#160; &#160; BI<br />Breton&#160; &#160; &#160; &#160; &#160; &#160; BR<br />Bulgarian&#160; &#160; &#160; &#160; BG<br />Burmese&#160; &#160; &#160; &#160; &#160; &#160; MY<br />Byelorussian&#160; &#160; BE<br />Cambodian&#160; &#160; &#160; &#160; KM<br />Catalan&#160; &#160; &#160; &#160; &#160; &#160; CA<br />Chinese&#160; &#160; &#160; &#160; &#160; &#160; ZH<br />Corsican&#160; &#160; &#160; &#160; CO<br />Croatian&#160; &#160; &#160; &#160; HR<br />Czech&#160; &#160; &#160; &#160; &#160; &#160; CS<br />Danish&#160; &#160; &#160; &#160; &#160; &#160; DA<br />Dutch&#160; &#160; &#160; &#160; &#160; &#160; NL<br />English, American&#160; &#160; EN<br />Esperanto&#160; &#160; &#160; &#160; EO<br />Estonian&#160; &#160; &#160; &#160; ET<br />Faeroese&#160; &#160; &#160; &#160; FO<br />Fiji&#160; &#160; &#160; &#160; &#160; &#160; FJ<br />Finnish&#160; &#160; &#160; &#160; &#160; &#160; FI<br />French&#160; &#160; &#160; &#160; &#160; &#160; FR<br />Frisian&#160; &#160; &#160; &#160; &#160; &#160; FY<br />Gaelic (Scots Gaelic)&#160; &#160; GD<br />Galician&#160; &#160; &#160; &#160; GL<br />Georgian&#160; &#160; &#160; &#160; KA<br />German&#160; &#160; &#160; &#160; &#160; &#160; DE<br />Greek&#160; &#160; &#160; &#160; &#160; &#160; EL<br />Greenlandic&#160; &#160; &#160; &#160; KL<br />Guarani&#160; &#160; &#160; &#160; &#160; &#160; GN<br />Gujarati&#160; &#160; &#160; &#160; GU<br />Hausa&#160; &#160; &#160; &#160; &#160; &#160; HA<br />Hebrew&#160; &#160; &#160; &#160; &#160; &#160; IW<br />Hindi&#160; &#160; &#160; &#160; &#160; &#160; HI<br />Hungarian&#160; &#160; &#160; &#160; HU<br />Icelandic&#160; &#160; &#160; &#160; IS<br />Indonesian&#160; &#160; &#160; &#160; IN<br />Interlingua&#160; &#160; &#160; &#160; IA<br />Interlingue&#160; &#160; &#160; &#160; IE<br />Inupiak&#160; &#160; &#160; &#160; &#160; &#160; IK<br />Irish&#160; &#160; &#160; &#160; &#160; &#160; GA<br />Italian&#160; &#160; &#160; &#160; &#160; &#160; IT<br />Japanese&#160; &#160; &#160; &#160; JA<br />Javanese&#160; &#160; &#160; &#160; JW<br />Kannada&#160; &#160; &#160; &#160; &#160; &#160; KN<br />Kashmiri&#160; &#160; &#160; &#160; KS<br />Kazakh&#160; &#160; &#160; &#160; &#160; &#160; KK<br />Kinyarwanda&#160; &#160; &#160; &#160; RW<br />Kirghiz&#160; &#160; &#160; &#160; &#160; &#160; KY<br />Kirundi&#160; &#160; &#160; &#160; &#160; &#160; RN<br />Korean&#160; &#160; &#160; &#160; &#160; &#160; KO<br />Kurdish&#160; &#160; &#160; &#160; &#160; &#160; KU<br />Laothian&#160; &#160; &#160; &#160; LO<br />Latin&#160; &#160; &#160; &#160; &#160; &#160; LA<br />Latvian, Lettish&#160; &#160; LV<br />Lingala&#160; &#160; &#160; &#160; &#160; &#160; LN<br />Lithuanian&#160; &#160; &#160; &#160; LT<br />Macedonian&#160; &#160; &#160; &#160; MK<br />Malagasy&#160; &#160; &#160; &#160; MG<br />Malay&#160; &#160; &#160; &#160; &#160; &#160; MS<br />Malayalam&#160; &#160; &#160; &#160; ML<br />Maltese&#160; &#160; &#160; &#160; &#160; &#160; MT<br />Maori&#160; &#160; &#160; &#160; &#160; &#160; MI<br />Marathi&#160; &#160; &#160; &#160; &#160; &#160; MR<br />Moldavian&#160; &#160; &#160; &#160; MO<br />Mongolian&#160; &#160; &#160; &#160; MN<br />Nauru&#160; &#160; &#160; &#160; &#160; &#160; NA<br />Nepali&#160; &#160; &#160; &#160; &#160; &#160; NE<br />Norwegian&#160; &#160; &#160; &#160; NO<br />Occitan&#160; &#160; &#160; &#160; &#160; &#160; OC<br />Oriya&#160; &#160; &#160; &#160; &#160; &#160; OR<br />Oromo, Afan&#160; &#160; &#160; &#160; OM<br />Pashto, Pushto&#160; &#160; PS<br />Persian&#160; &#160; &#160; &#160; &#160; &#160; FA<br />Polish&#160; &#160; &#160; &#160; &#160; &#160; PL<br />Portuguese&#160; &#160; &#160; &#160; PT<br />Punjabi&#160; &#160; &#160; &#160; &#160; &#160; PA<br />Quechua&#160; &#160; &#160; &#160; &#160; &#160; QU<br />Rhaeto-Romance&#160; &#160; RM<br />Romanian&#160; &#160; &#160; &#160; RO<br />Russian&#160; &#160; &#160; &#160; &#160; &#160; RU<br />Samoan&#160; &#160; &#160; &#160; &#160; &#160; SM<br />Sangro&#160; &#160; &#160; &#160; &#160; &#160; SG<br />Sanskrit&#160; &#160; &#160; &#160; SA<br />Serbian&#160; &#160; &#160; &#160; &#160; &#160; SR<br />Serbo-Croatian&#160; &#160; SH<br />Sesotho&#160; &#160; &#160; &#160; &#160; &#160; ST<br />Setswana&#160; &#160; &#160; &#160; TN<br />Shona&#160; &#160; &#160; &#160; &#160; &#160; SN<br />Sindhi&#160; &#160; &#160; &#160; &#160; &#160; SD<br />Singhalese&#160; &#160; &#160; &#160; SI<br />Siswati&#160; &#160; &#160; &#160; &#160; &#160; SS<br />Slovak&#160; &#160; &#160; &#160; &#160; &#160; SK<br />Slovenian&#160; &#160; &#160; &#160; SL<br />Somali&#160; &#160; &#160; &#160; &#160; &#160; SO<br />Spanish&#160; &#160; &#160; &#160; &#160; &#160; ES<br />Sudanese&#160; &#160; &#160; &#160; SU<br />Swahili&#160; &#160; &#160; &#160; &#160; &#160; SW<br />Swedish&#160; &#160; &#160; &#160; &#160; &#160; SV<br />Tagalog&#160; &#160; &#160; &#160; &#160; &#160; TL<br />Tajik&#160; &#160; &#160; &#160; &#160; &#160; TG<br />Tamil&#160; &#160; &#160; &#160; &#160; &#160; TA<br />Tatar&#160; &#160; &#160; &#160; &#160; &#160; TT<br />Tegulu&#160; &#160; &#160; &#160; &#160; &#160; TE<br />Thai&#160; &#160; &#160; &#160; &#160; &#160; TH<br />Tibetan&#160; &#160; &#160; &#160; &#160; &#160; BO<br />Tigrinya&#160; &#160; &#160; &#160; TI<br />Tonga&#160; &#160; &#160; &#160; &#160; &#160; TO<br />Tsonga&#160; &#160; &#160; &#160; &#160; &#160; TS<br />Turkish&#160; &#160; &#160; &#160; &#160; &#160; TR<br />Turkmen&#160; &#160; &#160; &#160; &#160; &#160; TK<br />Twi&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; TW<br />Ukrainian&#160; &#160; &#160; &#160; UK<br />Urdu&#160; &#160; &#160; &#160; &#160; &#160; UR<br />Uzbek&#160; &#160; &#160; &#160; &#160; &#160; UZ<br />Vietnamese&#160; &#160; &#160; &#160; VI<br />Volapuk&#160; &#160; &#160; &#160; &#160; &#160; VO<br />Welsh&#160; &#160; &#160; &#160; &#160; &#160; CY<br />Wolof&#160; &#160; &#160; &#160; &#160; &#160; WO<br />Xhosa&#160; &#160; &#160; &#160; &#160; &#160; XH<br />Yiddish&#160; &#160; &#160; &#160; &#160; &#160; JI<br />Yoruba&#160; &#160; &#160; &#160; &#160; &#160; YO<br />Zulu&#160; &#160; &#160; &#160;&#160; &#160; &#160;ZU</p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Mon, 29 Jun 2015 07:49:22 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?id=3178&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[WebSocket 实战 [转]]]></title>
			<link>http://www.itecfun.com/viewtopic.php?id=3160&amp;action=new</link>
			<description><![CDATA[<p>详情参考：<a href="http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/index.html" rel="nofollow">WebSocket 实战</a></p><p>摘录<br />WebSocket 服务端 API 及客户端 API<br /><strong>WebSocket 服务端 API</strong><br />WebSocket 服务端在各个主流应用服务器厂商中已基本获得符合 JEE JSR356 标准规范 API 的支持（详见JSR356 WebSocket API 规范），以下列举了部分常见的商用及开源应用服务器对 WebSocket Server 端的支持情况：</p><p><strong>表 1.WebSocket 服务端支持</strong><br />厂商&#160; &#160;&#160; &#160; &#160; &#160; 应用服务器&#160; &#160; 备注<br />IBM&#160; &#160;&#160; &#160; &#160; &#160;WebSphere&#160; &#160; WebSphere 8.0 以上版本支持，7.X 之前版本结合 MQTT 支持类似的 HTTP 长连接<br />甲骨文&#160; &#160;&#160; &#160; &#160; &#160;WebLogic&#160; &#160; WebLogic 12c 支持，11g 及 10g 版本通过 HTTP Publish 支持类似的 HTTP 长连接<br />微软&#160; &#160;&#160; &#160; &#160; &#160; &#160; IIS&#160; &#160;&#160; &#160; &#160; &#160; &#160; IIS 7.0+支持<br />Apache&#160; &#160; &#160; Tomcat&#160; &#160; Tomcat 7.0.5＋支持，7.0.2X 及 7.0.3X 通过自定义 API 支持<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Jetty&#160; &#160;&#160; &#160; &#160; &#160; &#160; Jetty 7.0＋支持</p><p>JSR356 的 WebSocket 规范使用 javax.websocket.*的 API，可以将一个普通 Java 对象（POJO）使用 @ServerEndpoint 注释作为 WebSocket 服务器的端点，</p><br /><p><strong>WebSocket 客户端 API</strong><br />对于 WebSocket 客户端，主流的浏览器（包括 PC 和移动终端）现已都支持标准的 HTML5 的 WebSocket API，这意味着客户端的 WebSocket JavaScirpt 脚本具备良好的一致性和跨平台特性，以下列举了常见的浏览器厂商对 WebSocket 的支持情况：<br /><strong>表 2.WebSocket 客户端支持</strong><br />浏览器&#160; &#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 支持情况<br />Chrome&#160; &#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;Chrome version 4+支持<br />Firefox&#160; &#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;Firefox version 5+支持<br />IE&#160; &#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;IE version 10+支持<br />Safari&#160; &#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;IOS 5+支持<br />Android&#160; Brower&#160; &#160;&#160; &#160; &#160; &#160;Android 4.5+支持</p><p>客户端 WebSocket API 基本上已经在各个主流浏览器厂商中实现了统一，因此使用标准 HTML5 定义的 WebSocket 客户端的 JavaScript API 即可，<strong>当然也可以使用业界满足 WebSocket 标准规范的开源框架，如 Socket.io</strong>。</p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Wed, 10 Jun 2015 10:04:31 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?id=3160&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[好牛B的一个webserver]]></title>
			<link>http://www.itecfun.com/viewtopic.php?id=3135&amp;action=new</link>
			<description><![CDATA[<p>一个技术牛人的博客连接<a href="http://www.cnblogs.com/skynet/" rel="nofollow">http://www.cnblogs.com/skynet/</a></p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Tue, 19 May 2015 07:47:13 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?id=3135&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[web开发工具]]></title>
			<link>http://www.itecfun.com/viewtopic.php?id=3125&amp;action=new</link>
			<description><![CDATA[<p><a href="http://www.websocket.org/echo.html" rel="nofollow">websocket</a><br /><a href="http://tomcat.apache.org/download-60.cgi" rel="nofollow">Tomcat</a><br /><a href="http://www.eclipsetotale.com/tomcatPlugin.html" rel="nofollow">Tomcatplugin</a></p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Tue, 05 May 2015 09:59:39 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?id=3125&amp;action=new</guid>
		</item>
	</channel>
</rss>
