WebCenter Portal 12C createSpaceError解决方法

问题描述

Oracle WebCenter Portal 12C创建新Portal时,走完创建向导,门户创建完成,然后报错。

Create Portal

Portal creation completed with errors.
createSpaceError

解决过程

这算是最近折腾WCP比较坑的一个问题,花费了大量的时间与精力解决这个问题。开始时在Oracle Support找答案,发现在WCP 12C早期版本是有这样一个不能创建Portal的bugs,于是下载了所有能找到的系统补丁,用Opatch一一打上去,但是不能创建Portal的问题依旧;

只能回到原点,仔细去看Portal Server的Log。因为我们的门户是自己写的Portal Extension,看见有些Bean有报错,于是把矛头对准了自己的工程代码,好不容易把代码调得完全没有报错,发布到系统上无法创建Portal(在这里不得不吐槽一把O记,11g的Portal Framework方式没有了,现在改写portal只能用extension方式,程序的调试那可叫一个费时间,哥们有一半的工作时间是浪费在等待中)。

看来也不是代码的问题,又乖乖的回去一行行的看Log。还是最后无意在想到,在公司的环境里用Weblogic内置的ldap是没这个问题的,而客户的环境是配置了外部的LDAP做用户身份验证就不能创建门户了,看来问题的症结还是用户权限设置。重新配置了门户的权限设置,最后终于能成功创建门户了。

Windows XP”进程性能计数器已禁用”问题解决办法

一大早接到同学的求救电话,说升级社保管理系统时,系统报“进程性能计数器已禁用”的错误,没法升级。

388689530456590452

心里想着无非是小事一桩,上网搜了搜解决方法,无非是两种方式,把性能进程计数器打开就好。

1.修改注册表,把Disable Performance Counters键参数设置为0

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance

2.在命令行运行lodctr /r

依葫芦画瓢把解决方法告诉同学,结果回复说系统重启后还是报错。只好自己远程登录到同学的电脑上,发现那兄弟还在用着Windows XP系统,自己又照着解决方法试了一遍,问题依旧。

看来是老革命碰上了新问题,为了保全哥在亲友圈中“电脑高手”的名声,只好打开一台XP虚机做试验了,经过一番折腾,总算把问题解决了。

原来同学的System32目录上,两个与性能计数器相关的文件,perfc009.dat与perfh009.dat不知啥原因,分别被改名为perfd009.dat和perfi009.dat了,把这两个文件名字改回去再运行升级程序,顺利完成。

懒得去探究为何文件会被改名了,不过想不明白的是社保系统的升级为毛需要去取性能进程计数器呢?

WebCenter Portal 12.2.1: URI scheme is not “file”错误解决办法

新部署的WebCenter Portal服务器,写了Portal Extension后发布到服务器,门户不能正常运行。找到问题修正后门户能访问,但是发现WebCenter Portal不断抛出一个java.lang.IllegalArgumentException: URI scheme is not “file”的错误,并记录到日志文件。

问题描述

WebCenter Portal不断在日志生成级别为[Warning]的URI scheme is not “file”错误,完整消息如下:

[2016-09-23T11:56:53.293+08:00] [WC_Portal] [WARNING] [] [org.eclipse.persistence.jaxb.BeanValidationHelper] [tid: [ACTIVE].ExecuteThread: ’21’ for queue: ‘weblogic.kernel.Default (self-tuning)’] [userId: weblogic] [ecid: 74e955f6-ec4b-4aa5-8713-c12464770bc1-000002c8,0] [APP: webcenter] [partition-name: DOMAIN] [tenant-name: GLOBAL] [DSID: 0000LTL6BfOFw000jzwkno1Nt9jz000003] Error parsing validation.xml the async way[[
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: URI scheme is not “file”
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.eclipse.persistence.jaxb.BeanValidationHelper.getConstraintsMap(BeanValidationHelper.java:139)
at org.eclipse.persistence.jaxb.BeanValidationHelper.isConstrained(BeanValidationHelper.java:120)
at org.eclipse.persistence.jaxb.JAXBBeanValidator.isConstrainedObject(JAXBBeanValidator.java:255)
at org.eclipse.persistence.jaxb.JAXBBeanValidator.shouldValidate(JAXBBeanValidator.java:206)
at org.eclipse.persistence.jaxb.JAXBMarshaller.validateAndTransformIfNeeded(JAXBMarshaller.java:587)
at org.eclipse.persistence.jaxb.JAXBMarshaller.marshal(JAXBMarshaller.java:481)
at org.glassfish.jersey.jaxb.internal.AbstractRootElementJaxbProvider.writeTo(AbstractRootElementJaxbProvider.java:201)
at org.glassfish.jersey.jaxb.internal.AbstractRootElementJaxbProvider.writeTo(AbstractRootElementJaxbProvider.java:180)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at weblogic.jaxrs.server.internal.ChunkedOutputWriter.aroundWriteTo(ChunkedOutputWriter.java:65)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130)
at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:683)
at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:424)
at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:414)
at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:312)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:292)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:460)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:386)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:334)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.webcenter.content.integration.servlets.ContentServletFilter.doFilter(ContentServletFilter.java:168)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.webcenter.jaxrs.services.portal.controller.swagger.SwaggerApiOriginFilter.doFilter(SwaggerApiOriginFilter.java:44)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.adf.share.http.ServletADFFilter.doFilter(ServletADFFilter.java:77)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.webcenter.portal.context.impl.PortalRequestServletFilter$1.call(PortalRequestServletFilter.java:53)
at oracle.webcenter.portal.context.impl.PortalRequestServletFilter$1.call(PortalRequestServletFilter.java:48)
at oracle.webcenter.portal.context.impl.PortalRequestExecutorImpl.execute(PortalRequestExecutorImpl.java:47)
at oracle.webcenter.portal.context.impl.PortalRequestServletFilter.doFilter(PortalRequestServletFilter.java:47)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:224)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:32)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3654)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3620)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:196)
at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2423)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2280)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2258)
at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1626)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1586)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:617)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:397)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
Caused by: java.lang.IllegalArgumentException: URI scheme is not “file”
at java.io.File.<init>(File.java:421)
at org.eclipse.persistence.jaxb.ValidationXMLReader.parseValidationXML(ValidationXMLReader.java:147)
at org.eclipse.persistence.jaxb.ValidationXMLReader.call(ValidationXMLReader.java:67)
at org.eclipse.persistence.jaxb.ValidationXMLReader.call(ValidationXMLReader.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

原因

一开始以为是自己代码的问题,从头到尾Debug了N遍找问题,但是一发布到WebCenter Portal,问题依旧。这令人不得不怀疑是WebCenter Portal的问题了。Google了一把,发现原来是产品的一个bug,据说O记会在下一个版本修复。

解决方法

虽说这个问题不影响使用,但是做为非典型的强迫症患者,看着这样的消息连写代码都受影响。不能完全解决只能把这个报错信息关掉了。

打开WebCenter Portal所在的服务器EM,找到Portal服务器,选择Log Configuration,在Log Level选项卡下找BeanValidationHelper,把Logging Level从WARNING改为SEVERE,保存更改,这下终于天下太平了。

loglevel

坑爹的O记。

Jdeveloper错误: Deployer:[149140]The task cannot be processed further until the current edit session is activated.

当想把WebCenter Space扩展程序发布至WebCenter Portal 12c时出现这个错误。

[Deployer:149140]The task cannot be processed further until the current edit session is activated.

 

space-error

 

原因

The user is the current owner of the domain configuration edit lock.

解决方法

Activate (or cancel) the edit session. The user can exit the deployer tool without affecting the task.

说成人话就是重启管理服务器或者在开发机器上把Default Domain删除了再重建即可解决。

 

Oracle JET的安装及配置

1. Oracle JET是什么鬼

按官方的说法,Oracle JET是给JavaScript开发者提供云端数据可视化的工具。JET使用了很多第三方的JavaScript库,例如jQuery,jQueryUI,Knockout,RequireJS和Hammer(如果在本地运行,需要Node.js支持)。

按俺的理解,JET就是O记把一堆前端工具整合到一起的大杂汇,让对前端框架不是特别熟的程序猿媛们能有一个快速开发响应式前端页面的路子。JET可以用于WEB页面开发,也可用于APP的开发。

JET的架构是这样的(基于MVVM设计模式)

Architecture

从官方的示例程序来看,JET做出来的页面效果还是不错的。

Workbetter

2. 对Oracle JET的看法

其实,开始的时候俺对Oracle JET的态度本来是抗拒的,认为没必要再重复造一个轮子。

wechatjet

个人对于知乎上这个问题的回答深以为然。

zhihujet

不过最近没有啥新东西玩,加上想在一些项目上看看能否把JET引进来(毕竟还是有些基于O记产品的项目), 于是报了官网上一个在线的JET Training,对着官方的文档安装环境。

 

3. 在Windows系统上安装JET

Oracle官网上的步骤已经很详细,基本上照着示例步骤安装即可完成。JET提供两种安装方式(或者称之为JET应用生成方式),一种是前端狗熟悉的Yeoman生成方式,一是使用Netbeans IDE引入JET包的方式(在这时深深鄙视O记一把,居然不把自家JDeveloper的支持做出来,使得如果要用JET与ADF应用结合的话必须使用两个IDE进行开发)。

3.1 以Yeoman方式安装

1).首先安装Git

下载Git Windows客户端,按提示完成安装。

2). 安装Node.js

前面提过,要在本地上运行JET必须Node.js支持,下载Windows下包含npm的Node.js安装包

downloadnode

进行Node.js的安装。

installnode1

 

installnode2

 

installnode3

稳定版的Node.js带的npm版本过低,我们需要升级npm,运行命令npm install –g npm进行升级。完成后用npm -v确认npm版本。

npmver

3). 安装Yeoman, Grunt, Bower工具包

运行命令npm –g install o bower grunt-cli,安装所需的工具包。

npmtool1

npmtool2

4). 安装JET Yeoman生成器

运行命令npm -g install generator-oraclejet

jetgenerator

5).基于模板生成第一个JET Web应用

运行命令yo oraclejet firstjet  –template=basic生成第一个JET Web应用。

firstjet1

firstjet2

应用生成成功后,用grunt生成并启动应用。

grunt build

grunt serve

firstjet3

访问本地服务地址,可以看到第一个JET应用的界面。

firstjet4

3.2 用Netbeans进行JET应用开发

1).安装Netbeans

Netbeans站点下载合适的安装包,进行Netbeans安装。

downloadnetbeans

netbeans1

 

2).下载Oracle JET压缩包

OTN下载JET压缩包oraclejet.zip并保存。

jetdownload

3)在Netbean创建Oracle JET应用

打开Netbean,新建一个HTML5/JavaScript应用程序。

newproject1

下一步选择项目位置。

newproject2

下一步,选择之前下载的OracleJET压缩包为模板来源,点下一步。选择你所需的工作,点完成,完成OracleJET应用的创建。

newproject4

温馨提示:如果你在天朝,安装支持包时,请注意科学上网

解决升级Ubuntu 16.04LTS后网卡不能启动方法

最近迷上了Docker,偷得两日闲想把Docker与公司的开发流程结合。下午手贱把试验的Ubuntu 14.04的版本升级至16.04LTS,更贱的顺手把公司的文件服务器也同时进行升级。

sudo do-release-upgrade -d

升级完成后提示需要重启,于是当然的

sudo reboot now

结果印证了什么叫No Zuo No Die, 系统报了个错就再也连不上了。

Failed to start reboot.target: Failed to setup environment correctly
See system logs and ‘systemctl status reboot.target’ for details.

u1

这下傻眼了,还有公司的文件服务器也是同样的问题。这SSH连接不上,只好乖乖地起个VMware vSphere Client连到公司的ESX服务器上去查怎么回事。发现原来的网卡eth0不见了,取之是一个名为ens32的网卡,想手工启动这个网卡,但系统报没有权限,用root用户也不行,看来此路不通。把虚拟机的网卡删除再重新安装,重启除了网卡名字变了外,还是然并卵。

u2

傻眼了,肠子都悔青了。自己做的坏事,怎么着也只能自己解决了。查了各种资料、各种折腾,最后总算搞明白是因为ubuntu 15版本的-udev升级,导致出现这个网卡丢失的问题。多种尝试后用以下方法解决。

1.先取得网卡的MAC地址

ip link

u3

由上图可知00:0c:20…..是俺丢掉的宝贝网卡的地址,把此地址记下来。

2. 创建/etc/udev/rules.d/10-network.rules 文件,增加网卡信息。

sudo vim  /etc/udev/rules.d/10-network.rules 

在文件中增加以下一行,保存并退出。

SUBSYSTEM==”net”, ACTION==”add”, ATTR{address}==”00:0c:29:de:d9:c1″, NAME=”eth0″

3.重启系统,可以发现丢失的网卡又回来了。

u4

NND,吓出一身冷汗。:)

Note: If no DNS resolution after upgraded, solve the problem as following code:

sudo rm /etc/resolv.conf
sudo ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
sudo resolvconf -u

俺的解法是简单粗暴直接,删掉了resolv.conf后直接创建一个新的:)。

 

修改固件在TL-WRD3310安装DD-WRT

家里的无线路由已经用了接近10年,加上随着设备的日渐增多,每次访问Google都要翻墙实在是一件麻烦的事情,于是动了自己写个DD-WRT的念头路由器。刚好公司有个TP-LINK的TL-WRD3310旧路由,刚好利用周五下午无心工作的时间做做试验。

上网找了一下,没能找到WRD3310的rom(严重鄙视)。继续Google,得知WRD3310在国外的对应型号是WRD3600,在DD-WRT官网可以找到WRD3600的rom,所以打着用这个rom刷到WRD3310的念头。翻墙下载了最新的Beta rom,连上WRD3310,选择刚下载的rom升级,结果报了一个“上传文件版本与机型不符”的错误,升级自动退出。

上传文件的版本与机型不符

一时卡壳了,但如果这样就认输不弄了,怎么能称爱折腾呢?重新上TP-Link的中国官网,下载了官方固件,用WinHEX打开固件文件,与DD-WRT的固件比较,终于找出通过修改固件写入的办法。

首先,把DD-WRT固件文件开头Offset=0x00000040处把机型从3600改为3100.

3

 

WRD3310

再把Offset=0x0000004C开始的16个字节暂时改为DC D7 3A A5 C3 95 98 FB DD F9 E7 F4 0E AE 47 38,然后保存。

MD5

用Hash计算出修改后固件文件的MD5,并复制下来。

Hash

再次用WinHex打开修改后的固件文件,用上面算出来的MD5替换掉刚才修改过的从Offset=0x0000004C开始的16个字节并保存。

更新MD5

再次通过网页连接WRD3310,用修改后的固件升级,这次顺利升级成功。

Update

升级成功后第一次登录设置路由器的用户名与密码,可以玩DD-WRT的各项设置了,把Shadowshocks写入,就可以实现自动翻墙功能了。同时,设备型号也变成了WRD3600了。

DD-WRT

 

PS: 别说我没提醒你,这个方法适用于所有型号的无线路由写入固件:)

在Vultr的CentOS系统安装NodeJS和Express

最近迷上了基于MEAN的开发,加上寒假在给邱小姐做HTML+CSS+JS的培训,小朋友强烈要求弄一台服务器,使她的学习成果可以在公网上展示给小伙伴们看。想到恰好在Vultr上有一台空余的服务器,于是趁春节前的空闲部署了CentOS并搭建一台测试的Web服务器。不想花太多时间教小朋友后端编程语言,所以打了JavaScript的主意,准备前后端处理都用JS搞掂,所以决定用Express+NodeJS来做Web服务器。

在Vultr上安装NodeJS和Express异常简单,基本上用Yum管理器就可以傻瓜式安装完。

1.下载最新版的Node.js

切换到临时目录,用curl从Joylent直接下载最新版本的Node.js.

 cd /tmp 
curl -sL https://rpm.nodesource.com/setup | bash -

如下图所示:

Download latest Node.js

2. 安装Node.js

按照提示用yum安装Node.js.

yum install -y nodejs

Install Node.js

3.安装NPM包管理工具(可选)

如果你以后想安装Node的addon包,建议安装NPM包管理工具。运行命令:

yum install gcc-c++ openssl-devel make

Install build toolsInstall build tools
4.更新NPM工具(可选)
如果运行NPM时提示NPM版本低,可以选择更新NPM,按提示运行命令:

npm -g install [email protected]

Update NPM tool
5.安装Express

用NPM从仓库中安装Express
npm install -g express-generator

Install Express
6.创建运行服务的非特权用户(建设)

 useradd 用户名 
passwd 用户名

创建后登出系统并用新建的用户名重新登录。

7.创建Express项目
 express expressproject 
cd expressproject 
npm install

Create Express Project
8.运行Express

运行Express,启动服务。

DEBUG=expressproject:* npm start

如果一切正常,会出现以下提示

> [email protected] start /home/用户名/expressproject

> node ./bin/www

 

Start Express

至此,你可用http://IP:3000访问到你的Web服务了,Node.js+Express的环境搭建完成了。

Run Express

解决Windows 10下Vmware桥接网络无法工作问题

系统升级到Windows 10后有一阵子没用Vmware,今天装了个新虚拟机,启动后发现虚拟机用桥接的方式拿不到IP地址。以为是用的Vmware Workstation 10版本过低的原因,重新装了个Vmware Workstation 12,结果更惨,桥接的网络服务压根就安装不成功。看来实在是有问题,只能求助Google,发现还真不少人碰到同样的问题。有微软社区的,也有Vmware社区的。

难道只能采用NAT模式来使用网络。做为一个多年习惯使用Bridge网络模式强迫症患者,让俺去用NAT实在是不能接受。在只要肯折腾,办法总比困难多的信念支持下,试验了接近1个小时,终于找到了把问题克服的方法。既然Windows不让安装程序去修改NIC接口,手动去修改呢?试试果然能行,步骤如下:

1.在Windows打开网络适配器,选择属性,打开属性窗口,点击“安装…”

网络属性

2. 在网络功能类型窗口选择服务,然后点“添加”

网络功能类型

3.选择要安装的网络服务,厂商选择Vmware Inc.,网络服务选择“Vmware Bridge Protocol”,点确定。

选择网络服务

4. 选择Vmware Workstation安装目录下的“vmnetbridge.dll”所在目录。

选择文件来源

5. 返回网络适配器属性窗口,确认Vmware Bridge Protocol已成功安装。

属性

6. 如果虚拟机正在运行,关闭虚拟机。打开虚拟网络编辑器,点击左下角的“还原默认设置”,把网络配置还原到默认值。

还原网络设置

7. 此时应该会显示桥接方式出来。强迫症的人伤不起,俺还是把桥接设置成唯一可选的网络连接方式。

bridge

8.重新启动虚拟机,此时应该可以看到虚拟机已正常连接网络,并成功拿到IP地址。

getip

 

OS X El Capitan创建U盘引导及Bootcamp破解

事先声明,谁再跟俺提说拿Macbook装Windows俺就抽谁。才不会跟你说弄一台破旧硬盘分区损坏导致系统进不去,俺弄了个通宵才搞好。

从来没有想像到过有一天会这样折腾,一个朋友的MBA磁盘分区误操作损坏,没法进入系统。之前电脑买回来后也不知道让人怎么弄,Apple Recovery之类的分区均进不去,想了N多招都不管用,只好出大杀器,重装系统。在网上找啊找资料,发现大部分文章都很傻,写着怎么在Macbook上安装windows均假设OS X系统是完好的,然后在同一台电脑上安装windows,很少有描述在另外一台电脑上安装的。因为朋友的电脑第二天办公要用,只好用笨办法,先安装OS X再安装Windows。

1.制作OS X安装引导U盘

如果没有OS X安装程序,自行到APP Store下载。 Jeet比较好运,自己的MBA上下载了OS X El Capitan的升级程序,但因为忙一直没有升级,所以节省了大量的下载时间。准备一只4GB以上的U盘或移动硬盘,利用createinstallmedia命令创建USB启动引导盘。默认情况下,OS X El Capitan的安装文件位于/Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia目录。

打开终端窗口,运行命令:sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia –volume /Volumes/MyVolume –applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app

创建USB引导盘。注意把/Volumes/MyVolume替换你实际的卷名。提示是否格式化U盘,选是,然后会开始拷贝文件,等待文件复制完成。

2.利用制作好的引导U盘安装OS X

把制作好的U盘插入MBA,开机时按住Option键,选择U盘启动。OS X安装过程省略。

3. 破解OS X El Capitan的Bootcamp

装好OS X El Capitan后,兴冲冲的打开Bootcamp助理,准备安装Windows 7,结果一看傻眼了。

1

明明没有光驱的一MBA,居然提示俺说有光驱,没法制作Windows安装盘。不怕,网上一大堆bootcamp破解的秘技,照着做就是了。但是,在OS X El Capitan中,修改完Info.plist文件后,压根没办法替换Content包中的文件,不管怎么改chmod\chown都不行。天哪,不要这样玩俺啦。

又是一番Google,最后方知道原来是OS X El Capitan系统完整性保护(System Integrity Protection)的关系,导致没去替换Content包中的文件。重新以修复模式进入电脑(开机Command+R),打开终端命令窗口,运行csrutil disable,然后重启电脑。终于可以成功替换Info.plist。再打开终端,运行sudo codesign -fs – /Applications/Utilities/Boot\ Camp\ Assistant.app/ –deep完成bootcamp破解。

再运行Bootcamp助理,终于可以制作Win7安装盘了。

2

4.总结

  • 如非必要,建议不要在MAC上安装Windows,想测试可以用虚拟机。
  • 备一个OS X安装启动盘很有必要。
  • Bootcamp工具的版本跟电脑型号、批次有关系,不同的机器需要不同的bootcamp工具,请仔细核对自己Macbook的版本选择相应的bootcamp工具。

感谢,本文图形来自极限苹果的这篇文章