Wednesday, October 24, 2012

Alfrescoのファイルサーバ機能TIPS(CIFSとかFTPとか) その2

こんにちは!大谷です。

今回は、以前の記事「Alfrescoのファイルサーバ機能TIPS(CIFSとかFTPとか) その1」に続き、CIFSやFTP等のファイルサーバ機能についてのお話をしようと思います。前回はファイルサーバ機能の概要と、アクセス方法、アクセス出来ない場合の確認事項について説明しましたが、今回は、ファイルサーバ機能のコンフィギュレーションについていくつかの例を挙げてその方法を説明したいと思います。
なお、本記事は基本的にWindowsを念頭に置いた内容になっているので、LinuxやMax OSをお使いの方は注意してください(まあ基本的なところはOSに依存しないとは思いますが…)。


どこらへんをいじればいいの?


まず、ファイルサーバ機能の設定に関連するファイルを挙げてみます。どのファイルを参考にしてどのファイルをいじればいいのかという目星をつけましょう。
  • <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers-context.xml
    • ファイルサーバ機能を提供しているFileServersサブシステムの定義ファイル
    • 一部の設定がパラメータ化されており、*.propertiesファイルで設定できるようになっている。
  • <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers.properties
    • 上記定義ファイルのパラメータの値を設定するファイル
  • <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/repositry.properties
    • ファイルサーバ機能関係の一部のパラメータはこちらのファイルで設定されている
  • <tomcat_dir>/shared/classes/alfresco-global.properties 
    • 上記パラメータを変更する場合に設定を記述するファイル
    • 変更したいパラメータとその値をこのファイルに追記することで、file-servers.propertiesやrepository.propertiesにおける設定内容がこのファイルの設定内容で上書きされ、パラメータ値を変更することができる

というわけで、単純な設定変更であれば、file-servers-context.xmlやfile-servers.propertiesを見て変更すべきパラメータを確認し、alfresco-global.propertiesでそのパラメータの値を設定するだけでOKです。
設定項目の詳細については、Alfresco Helpの「Configuring file servers」alfrescowikiの「File Server Subsystem 4.0」あたりが参考になりますので必要に応じて参照してください(両方とも英語ですすいません…)。

では、実際にいくつかの例を見てみましょう。


例1. CIFSアクセス時のサーバ名を変更したい


前回説明したとおり、CIFSでAlfrescoにアクセスする場合は、サーバ名(正確にはNetBIOS名)としてマシン名+Aという名前を利用します(例えばマシン名がferganaの場合は、\\ferganaAにアクセスする必要があります)。この名前はfile-servers.propertiesで以下のように設定されています。
cifs.serverName=${localname}A
これを変更するために、例えば以下のような設定をalfresco-global.propertiesに追記し、オーバーライドします。
cifs.serverName=TestFileServer
設定が終わったらAlfrescoを再起動し、エクスプローラで\\TestFileServer\Alfresco等にアクセスできることを確認します。なお、デフォルトの設定で使われている${localname}というトークンは、PCのホスト名で置換される特別なトークンです。


例2. Alfrescoフォルダのマップ先を変更したい


デフォルトの設定では、CIFSやFTPでアクセスするとAlfrescoフォルダとAVMフォルダの2フォルダが存在します。さらに、Alfrescoフォルダを開くと、手動インストールだとAlfrescoのCompany_Home以下が、自動インストールだとCompany_Home/Sites以下が表示されます。
このAlfrescoフォルダのマップ先を特定のフォルダに設定するためには、filesystem.rootPathというプロパティをalfresco-global.propertiesでオーバーライドする必要があります。例えば、Alfrescoにログインしてルートフォルダ直下にtestフォルダを作成していくつかファイルをアップロードしておき、alfresco-global.propertiesに以下の行を追加します。
filesystem.rootPath=/app:company_home/cm:test
設定が終わったらAlfrescoを再起動してCIFSやFTPでAlfrescoフォルダにアクセスし、以下のようにAlfrescoフォルダのマップ先が変更されることを確認します。


例3. AVMフォルダを表示したくない、もしくは別のフォルダを追加したい


先ほど話した通り、デフォルトではAlfrescoフォルダとAVMフォルダが存在します。このうちAVMフォルダはWebコンテンツ管理に関連するものなので、表示する必要がないかもしれません。そんな場合は以下の手順でAVMフォルダの設定を抜くことができます。

1. <tomcat_dir>/shared/classes/alfresco/extension以下に、ディレクトリsubsystems/fileServers/default/defaultを作成します。

2. <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers-context.xmlを、custom-file-servers-context.xmlという名前で1.で作成したディレクトリにコピーします。

3. custom-file-servers-context.xmlをテキストエディタで開き、filesystemContextsビーン以外の設定を削除し、さらにAVMフォルダの設定も削除します(Alfresco 4.0.dだと以下のようになります)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
   <bean id="filesystemContexts" class="org.springframework.beans.factory.config.ListFactoryBean">
      <property name="sourceList">
         <list>
            <!-- Alfresco repository access shared filesystem -->
            <bean class="org.alfresco.filesys.repo.ContentContext">
               <property name="sysAdminParams">
                  <ref bean="sysAdminParams" />
               </property>
               <property name="deviceName">
                  <value>${filesystem.name}</value>
               </property>
               <property name="storeName">
                  <value>${protocols.storeName}</value>
               </property>
               <property name="rootPath">
                  <value>${filesystem.rootPath}</value>
               </property>
               <property name="renameShufflePattern">
                  <value>${filesystem.renameShufflePattern}</value>
               </property>
               
               <!-- Mark locked files as offline -->
               <property name="offlineFiles">
                  <value>true</value>
               </property>
               
               <!-- Enable the quota manager -->
               <property name="quotaManager">
                  <ref bean="filesystemQuotaManager" />
               </property>
               
               <!--  Enables and disables pseudo files - cifs DesktopActions and URL shortcuts. -->
               <property name="pseudoFilesEnabled">
                  <value>${cifs.pseudoFiles.enabled}</value>
               </property>
               
               <!-- Add a pseudo links back to the alfresco explorer -->
               <property name="alfrescoURLEnabled">
                  <value>${cifs.pseudoFiles.explorerURL.enabled}</value>
               </property>
               <property name="URLFileName">
                  <value>${cifs.pseudoFiles.explorerURL.fileName}</value>
               </property>
               
               <!-- Add a pseudo links back to the alfresco share -->
               <property name="shareURLEnabled">
                  <value>${cifs.pseudoFiles.shareURL.enabled}</value>
               </property>
               <property name="shareURLFileName">
                  <value>${cifs.pseudoFiles.shareURL.fileName}</value>
               </property>
               
               <!-- Desktop actions -->
               <!-- Uses a client-side application to trigger a server-side action                         -->
               <!--   Echo - displays a message echoed from the server                                     -->
               <!--   URL  - launches a URL via the Windows shell                                          -->
               <!--   CmdLine - launches the Notepad application                                           -->
               <!--   CheckInOut - checks files in/out, drag and drop files onto the application           -->
               <!--   JavaScript - run a server-side script                                                -->
               <!--   JavaScriptURL - server-side script that generates a URL to the folder using a ticket -->
               <!--                   to avoid having to logon                                             -->
               <property name="globalDesktopActionConfig">
                  <bean class="org.alfresco.filesys.config.GlobalDesktopActionConfigBean">
                     <property name="path">
                        <value>alfresco/desktop/Alfresco.exe</value>
                     </property>
                  </bean>
               </property>
               <property name="desktopActionList">
                  <list>
                     <bean class="org.alfresco.filesys.repo.desk.CheckInOutDesktopAction">
                        <property name="name">
                           <value>CheckInOut</value>
                        </property>
                        <property name="filename">
                           <value>__CheckInOut.exe</value>
                        </property>
                     </bean>
                     <bean class="org.alfresco.filesys.repo.desk.JavaScriptDesktopAction">
                        <property name="name">
                           <value>JavaScriptURL</value>
                        </property>
                        <property name="filename">
                           <value>__ShowDetails.exe</value>
                        </property>
                        <property name="scriptName">
                           <value>alfresco/desktop/showDetails.js</value>
                        </property>
                        <property name="attributeList">
                           <value>anyFiles</value>
                        </property>
                        <property name="preprocess">
                           <value>copyToTarget</value>
                        </property>
                     </bean>
                     <!-- Other desktop actions which may be enabled -->
                     <!--
                        <bean class="org.alfresco.filesys.repo.desk.EchoDesktopAction"> <property name="name">
                        <value>Echo</value> </property> <property name="filename"> <value>__AlfrescoEcho.exe</value>
                        </property> </bean> <bean class="org.alfresco.filesys.repo.desk.URLDesktopAction"> <property
                        name="name"> <value>URL</value> </property> <property name="filename">
                        <value>__AlfrescoURL.exe</value> </property> </bean> <bean
                        class="org.alfresco.filesys.repo.desk.CmdLineDesktopAction"> <property name="name">
                        <value>CmdLine</value> </property> <property name="filename"> <value>__AlfrescoCmd.exe</value>
                        </property> </bean> <bean class="org.alfresco.filesys.repo.desk.JavaScriptDesktopAction">
                        <property name="name"> <value>JavaScript</value> </property> <property name="filename">
                        <value>__AlfrescoScript.exe</value> </property> <property name="scriptName">
                        <value>alfresco/desktop/dumpRequest.js</value> </property> <property name="attributeList">
                        <value>anyFiles, multiplePaths, allowNoParams</value> </property> <property name="preprocess">
                        <value>confirm, copyToTarget</value> </property> </bean>
                     -->
                  </list>
               </property>
               <!-- Additional access control of the filesystem -->
               <!-- Access type of 'none' will stop the filesystem from showing up for that user/address/protocol -->
               <!--
                  <property name="accessControl"> <bean class="org.alfresco.filesys.config.acl.AccessControlListBean">
                  <property name="defaultAccessLevel"> <value>Write</value> </property> </bean> </property>
               -->
            </bean>
         </list>
      </property>
   </bean>
</beans>

4. Alfrescoを再起動し、ftp://<サーバIP>にアクセスします。以下のように、AVMフォルダが表示されなくなっていることを確認します。

上記の手順では、FileServersサブシステムの設定を上書きすることでAVMフォルダを表示しないようにしていますが、同様の手順で、他に必要なフォルダを追加することも可能ですので是非チャレンジしてみてください。
また、サブシステム上書きについては、Alfresco Subsystems - alfrescowikiで詳しく説明されているので、必要に応じて参照してください。


今回は、以上になります。2回に分けて、ファイルサーバ機能の使い方、うまくアクセス出来ない時の対処法、いくつかのコンフィギュレーション例を説明してきました。
この機能はエンドユーザにファイルサーバと同様の使用感のUIを提供するとともに、他システムとの連携の際に相手先のシステムが標準で連携できる(可能性の高い)プロトコルを提供するものですので、実際にAlfrescoの利用を検討している方は、ファイルサーバ機能の利用も検討してみてはいかがでしょうか。

No comments: