2026年6月12日 星期五

CubeCOS 虛擬機刪除網路介面,且主機內沒有 virtio 驅動程式成為孤島主機時,進行 virtio iso 掛載流程

 # 當 CubeCOS 虛擬機刪除網路介面,且主機內沒有 virtio 驅動程式成為孤島主機時,進行 virtio iso 掛載流程。


# 步驟一:確認目標虛擬機的底層名稱

# 在 Compute Node(計算節點)上列出運行中的 instance,並反查對應的 OpenStack 虛擬機名稱:

# 1. 列出所有運行中的 instance ID 與名稱

virsh list


# 2. 透過 XML 資訊確認哪一台是目標 Windows 主機(以 instance-000000xx 為例)

virsh dumpxml instance-000000xx | grep -i "nova:name"


# 3. 查看虛擬機磁碟掛載狀況

virsh domblklist instance-000000xx



# 步驟二:準備 ISO 檔案(調整存取權限與CubeCOS資料路徑存取權限問題)

# 將已上傳的 virtio iso 移至全域可讀的暫存區

# 1. 將已上傳的 ISO 從 CephFS/Glance 後端複製到 /tmp,或者直接 Client 電腦上傳 virtio iso 到 /tmp/

cp /mnt/cephfs/glance/virtio-win-0.1.285.iso /tmp/


# 2. 賦予全域可讀權限

chmod 644 /tmp/virtio-win-0.1.285.iso



# 步驟三:執行 SCSI 通道熱插拔掛載

# 利用 Q35 架構內建的 Virtio-SCSI 控制器將 ISO 掛載為光碟機。此通道支援免關機熱插拔,Windows 會直接識別為標準 CD-ROM。

# 使用絕對路徑掛載,指定未使用的目標代號(如 sdd)與 scsi 匯流排,避免 libvirtd / qemu 背景帳號因隔離政策顯示 Permission denied 或 No such file or directory。

virsh attach-disk instance-000000xx /tmp/virtio-win-0.1.285.iso sdd --type cdrom --mode readonly --targetbus scsi


# 預期結果:執行後 Windows 內部會立刻跳出一個唯讀的光碟機(如 D 槽或 E 槽),直接顯示驅動內容。



# 步驟四:Windows 內部安裝,進入 Windows VNC Console 後,強烈建議執行完整維運優化,不要只單獨更新網卡:

# 網卡驅動:裝置管理員 -> 乙太網路控制卡 -> 更新驅動程式 -> 指向光碟機中的 NetKVM\2k22\amd64(依 OS 版本選擇)。

# 安裝完整 Guest Tools:直接執行光碟根目錄的 virtio-win-guest-tools.exe。

# 效益:一併補齊 qemu-guest-agent 與 Balloon 驅動,確保未來可透過 CubeCOS 面板執行「正常關機(非強制斷電)」與「精準監控實時記憶體」。



步驟五:環境清理與安全卸載驅動確認無誤、網路連通後,將虛擬光碟機退出,並清理計算節點的暫存空間:

# 1. 在 Compute Node 即時卸載光碟設備

virsh detach-disk instance-000000xx sdd


# 2. 刪除暫存區的 ISO 檔案釋放硬碟空間

rm /tmp/virtio-win-0.1.285.iso


2025年1月23日 星期四

GPO policy 設定預設應用程式﹝設定預設關聯設定檔﹞


建立xml設定檔,並將其啟用

Computer Configuration\Administrative Templates\Windows Components\File Explorer

設定檔內容將會新增到User電腦regedit機碼位址

HKLM\Software\Policies\Microsoft\Windows\System\DefaultAssociationsConfiguration



<?xml version="1.0" encoding="UTF-8"?>

<DefaultAssociations>

  <Association ApplicationName="Google Chrome" ProgId="ChromeHTML" Identifier=".htm"/>

  <Association ApplicationName="Google Chrome" ProgId="ChromeHTML" Identifier=".html"/>

  <Association ApplicationName="Google Chrome" ProgId="ChromeHTML" Identifier="http"/>

  <Association ApplicationName="Google Chrome" ProgId="ChromeHTML" Identifier="https"/>

</DefaultAssociations>

UBUNTU add user Terminal登入,路徑只顯示﹝$﹞提示字元及資料夾無顏色區分

當 UBUNTU 使用 useradd 指令新増帳號 Terminal登入,提示字元及資料夾都無顏色顯示區分。

可以將 /etc/skel/ 資料夾下的 .bashrc、.profile、.bash_logout 複製到該 user 帳號資料夾內。

1.修改檔案擁有者: chown xxxxx:xxxxx .bashrc .profile .bash_logout

2.修改 .bashrc 檔案 #force_color_prompt=yes 為 force_color_prompt=yes

3.user登入只顯示 $ 沒顯示user帳號名稱,修改 /etc/passwd  檔案

   user1:x:1000:1000:user1:/home/user1:/bin/bash

4.重新登入


UBUNTU 22.04 設定NTP校時

安裝 systemd-timesyncd 套件

apt install systemd-timesyncd

timedatectl set-ntp true

systemctl start systemd-timesyncd


檢查服務狀態

systemctl status systemd-timesyncd


修改設定檔 /etc/systemd/timesyncd.conf

vi /etc/systemd/timesyncd.conf

[Time]

NTP=x.x.x.x

#FallbackNTP=ntp.ubuntu.com

#RootDistanceMaxSec=5

#PollIntervalMinSec=32

#PollIntervalMaxSec=2048


重啟 systemd-timesyncd 服務

systemctl restart systemd-timesyncd


驗證設定

timedatectl show-timesync --all


再確認一次服務狀態

systemctl status systemd-timesyncd

應該可以看到己經向NTP server重新校時

2024年5月23日 星期四

Nutanix平台虛擬機(UBUNTU),利用Veeam備份移轉至VMware平台,安裝套件、系統更新出現錯誤

 mount: /var/lib/grub/esp: special device /dev/disk/by-id/scsi-SNUTANIX_VDISK_NFS_4_0_7672_2d41cbaa_025e_4fac_849c_9e620eff5bff-part1 does not exist.
Errors were encountered while processing:
 grub-efi-amd64-signed
 shim-signed

出現上面的訊息,可以試著刪除config.dat cache檔案:

sudo rm /var/cache/debconf/config.dat

再執行 sudo dpkg --configure -a 試試能否解決問題。


移除 nutanix guest tools:

sudo python3 /usr/local/nutanix/ngt/python/bin/uninstall_ngt.py


UBUNTU系統更新 apt update && apt upgrade 出現錯誤訊息:
E: Method https has died unexpectedly!
E: Sub-process https received signal 4.

編輯 .bashrc 檔案,在第1行增加:export  GNUTLS_CPUID_OVERRIDE=0x1


停用VEEAM備份軟體服務:
sudo systemctl stop veeamtransport.service veeamdeployment.service

sudo systemctl disable veeamtransport.service veeamdeployment.service


2023年11月17日 星期五

ManageEngine EventLog Analyzer版本更新步驟



先將下載的更新檔上傳到主機裡,再進行下列動作。

切換到 ManageEngine EventLog Analyzer 安裝目錄:
                                                  cd /opt/ManageEngine/EventLog/bin

接著停止EventLog Analyzer服務:
                                                   sudo ./shutdown.sh

EventLog Analyzer服務停止後,執行:
                                                    sudo ./UpdateManager.sh -c

Press i to  Install
      c to  Import Certificate
      v to  View installed ServicePack versions
      e to  Exit
Choose an Option:i

選擇「i」 輸入更新檔路徑,進行 PPM更新檔安裝程序:
Enter the patch file to install:/home/xxxxx/ManageEngine_EventLog_Analyzer_12_5_3_SP-12_5_3_5.ppm

更新完成,需要重新啟動服務:
                                                       sudo systemctl start eventloganalyzer
確認一下服務是否正常啟動:
                                                       sudo systemctl status eventloganalyzer

2023年10月11日 星期三

GPO 派送 Powershell script 關閉 Windows 10、11 Wi-Fi 「隨機硬體位址」

適用環境:

Wi-Fi 連線需要固定 Mac Address 位址


缺點:

利用 Wi-Fi 連線,送出的 Mac Address 都是實體位址,不會再隨機產生新的 Mac Address。


作法:

電腦開機登入系統時,執行 Powershell script 取得 Wi-Fi 的實體 Mac Address,再將取得的 Mac Address 寫入機碼。


設定 GPO:

1.將 Script 放入 \\AD_Domain\netlogon 裡。

2.設定GPO Policy 


其他 GPO 項目的設定值,可以自行參考作者文章,測試是否需要調整。

參考文章及引用:

1. Script to Disable "Use Random MAC Addresses" for wifi : r/SCCM (reddit.com)

2. Running PowerShell Startup (Logon) Scripts Using GPO | Windows OS Hub (woshub.com)

2023年3月9日 星期四

利用GPO或CMD關閉Windows 11 工具列小圖示

指令方式調整工具列圖示:

搜尋:

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v SearchboxTaskbarMode /t REG_DWORD /d 0 /f

工作檢視:

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v ShowTaskViewButton /t REG_DWORD /d 0 /f

聊天:

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v TaskbarMn /t REG_DWORD /d 0 /f

小工具:

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v TaskbarDa /t REG_DWORD /d 0 /f


GPO方式調整工具列圖示:

將上面的路徑轉換為GPO方式統一派送到使用者電腦



2019年11月19日 星期二

VMWare ESXi 6.5 VLAN 串接 CISCO Port-channel 設定

CISCO Switch 設定
設定 Port-channel 時最好不要接網路線或者把一個 Port shutdown,以免造成 loop
#config terminal
(config)#interface gi1/0/1
(config-if)#channel-group 1 mode on
(config-if)#switchport mode trunk

(config-if)#interface gi1/0/2
(config-if)#channel-group 1 mode on
(config-if)#switchport mode trunk

(config-if)#interface po1
(config-if)#switchport mode trunk

檢查 Switch witch 設定,確認 interface gi1/0/1、interface gi1/0/2 和 Port-channel1 是否為 up
#show ip interface brief

#show etherchannel summary
Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)          -        Gi1/0/1(P)  Gi1/0/2(P)

#show interface po1
Port-channel1 is up, line protocol is up (connected) 
  Hardware is EtherChannel, address is 2222.3333.4444 (bia 2222.3333.4444)
  Description: VM_LAB
  MTU 1500 bytes, BW 2000000 Kbit/sec, DLY 10 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Full-duplex, 1000Mb/s, link type is auto, media type is unknown
  input flow-control is off, output flow-control is unsupported
  Members in this channel: Gi1/0/1 Gi1/0/2


VMware ESXi vSwitch 設定
新增 vSwitch 設定,按【新增上行】可加入多張網路介面到 vSwitch

負載平衡 欄位需選擇【根據 IP 雜湊進行路由】


VMware ESXi  VLAN ID 設定
新增 VLAN 連接群組

要新增多個連接埠,重複上圖步驟即可加入多個VLAN到Trunk_vSwitch裡。

設定好的 VLAN 欄位值



如果沒有其他設備的問題,依上面步驟就可設定好 VMWare ESXi VLAN 串接 CISCO Port-channel

我自己是遇到 CISCO Switch 的 VTP mode 被設定為 Server,找了好久才找到問題!!!!!!!!!




2019年5月16日 星期四

Office 365修改單一使用者的OneDrive儲存空間



1.      下載、安裝SharePoint Online套件


2.      輸入連線指令

$adminUPN="hansen@sample.com.tw"

$orgName="sample"

$userCredential = Get-Credential -UserName $adminUPN -Message "Type the password."

Connect-SPOService -Url https://$orgName-admin.sharepoint.com -Credential $userCredential

3.      開啟 Office 365 管理網頁,切換到【使用者】、【作用中使用者】,選擇要修改OneDrive空間的使用者


4.      設定此一使用者OneDrive空間容量為 1T(1048567) 或 5T(5242880),依訂閱的類型可用的儲存空間也不同。
Set-SPOSite -Identity https://sample-my.sharepoint.com/personal/kings01_sample_com_tw -StorageQuota 5242880


2019年4月5日 星期五

釋放 iPhone 記憶體(RAM)

引用網友的小祕訣:
在 iPhone 快速運作過程中,需要記憶體作為暫時存放程式、指令或資料的地方,用來提昇整體的效能。你可能會發現當你開越多 App 在背景執行 iPhone 會變得越來越卡,就是記憶體不足的關係。

快速釋放記憶體操作方式:
1. 長按電源鍵至滑動關機頁面
2. 接著長按 Home 鍵並等待回復至桌面即可自動釋放記憶體。

2019年1月3日 星期四

Office 2019 離線安裝程式下載

Office 2019 不支援 Windows 7、Windows 8 的作業系統,相信大家早已知道。

另外一變動是大量授權的商業用戶以往要下載安裝程式時,只要登入 VLSC 網頁,就可以下載已購買的軟體 ISO 檔。

但現在商業用戶要下載 Office 2019 的安裝程式,在 VLSC 網頁內只能找到一支 Office 部署工具程式(Microsoft下載中心也能下載Office部署工具)。使用者要離線安裝 Office 2019,就要先自己使用部署工具程式下載 Office 2019 軟體。

從下載的 Office部署工具解壓縮後會看到兩個 xml 配置檔(內容預設是 Office 365 的配置設定)及一支 setup.exe。使用前先修改 xml 配置檔以符合購買的授權版本。

微軟也提供快速產生 XML 配置檔的設定網頁:

這裡有一點要注意,配置檔內最好不要有中文字。
我自己在下載時,配置檔內有中文時依然可以正常下載 Office 2019 程式,
但在安裝時確一直無法成功安裝。

以下是 『Office 2019 Standard 32位元 繁中』的 XML 配置檔內容:
<Configuration>
  <Add OfficeClientEdition="32" Channel="PerpetualVL2019" AllowCdnFallback="FALSE" ForceUpgrade="TRUE">
    <Product ID="Standard2019Volume">
      <Language ID="zh-tw" />
      <ExcludeApp ID="OneNote" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Publisher" />
      <ExcludeApp ID="Outlook" />
    </Product>
  </Add>
  <Property Name="SharedComputerLicensing" Value="0" />
  <Property Name="PinIconsToTaskbar" Value="TRUE" />
  <Property Name="SCLCacheOverride" Value="0" />
  <Property Name="AUTOACTIVATE" Value="0" />
  <Updates Enabled="TRUE" Channel="PerpetualVL2019" />
  <Logging Level="Off" />
</Configuration>

XML 配置檔設定方式可參考下列微軟網站提供的資訊:

修改好 xml 配置檔就可以開始下載 Office 2019 程式:
1.先將 xml 和 setup.exe 存放在同一目錄
2.以「系統管理員身份執行」開啟一個【命令提示字元】視窗
3.切換到該目錄執行下列指令:
setup.exe /download Office2019std_x86.xml
setup.exe /download Office2019std_x64.xml

4.下載後為了方便安裝,可以建立一個簡單的批次執行檔,輸入:
setup.exe /configure Office2019std_x64.xml

這裡要注意的是:
1.安裝程式放在NAS裡時,必需要連線成網路磁碟,才能正常安裝成功
2.安裝時,電腦的網路必需要能正常連線 Internet

Office 2019 for Mac 可直接於微軟網站下載 pkg 檔的安裝程式:


2018年6月5日 星期二

OCS Inventory 匯出資料到 Google 試算表(依電腦設備類型)

OCS Inventory 匯出到 Google 試算表的程式是從網路上其他高手分享出來(參考資料出處),並依個人需求調整。

如要取用請注意,因程式是用 python 寫的,程式段落可能會移位導致無法正常運作。

下列程式調整SELECT電腦設備類型為Notebook寫入試算表分頁。

程式內容:
#coding=utf-8
#-*- coding: utf-8 -*-
import MySQLdb as mysqldb
import sys
import gspread
import string

def DB_return(exec_cmd):
    connection = mysqldb.connect('localhost', 'ocs', 'ocspasswd', 'ocsdb',charset='utf8');
    with connection:
        cursor = connection.cursor()
        cursor.execute(exec_cmd)
        rows_info = cursor.fetchall()
        return rows_info

def GSheet_write(GSpreadSheet,GDriveJSON,tab_data,data,worksheet_name):

    a_list=[]
    for i, element in enumerate(tab_data):
        a_list.append(tab_data[i])
    a_tup = tuple(a_list)

    start_row = 1
    start_letter = 'A'
    end_len = len(data[0]) - 1
    if end_len > 26:
        len_info = end_len - 26
        len_a='A'
    else:
        len_info = end_len
        len_a=''
    end_letter = string.uppercase[len_info]
    end_letter = len_a+end_letter
    end_row = len(data)
    range = "%s%d:%s%d" % (start_letter, start_row+1 , end_letter, end_row+1)
    range_tab =  "%s%d:%s%d" % (start_letter, start_row , end_letter ,start_row)

    from oauth2client.service_account import ServiceAccountCredentials as SAC
    try:
        scope = ['https://spreadsheets.google.com/feeds']
        key = SAC.from_json_keyfile_name(GDriveJSON, scope)
        gc = gspread.authorize(key)
        workbook = gc.open(GSpreadSheet)

        if worksheet_name in [sheet.title for sheet in workbook.worksheets()]:
          workbook.del_worksheet(workbook.worksheet(worksheet_name))
          wks = workbook.add_worksheet(worksheet_name,end_row+1,end_len+1)
        else:
          wks = workbook.add_worksheet(worksheet_name,end_row+1,end_len+1)
    except Exception as ex:
        print('connect google fail ', ex)
        sys.exit(1)

    cell_list = wks.range(range)

    try:
        idx = 0
        for (start_row , rowlist) in enumerate(data):
            for (colnum, value) in enumerate(rowlist):
                cell_list[idx].value = value
                idx += 1
                if idx >= len(cell_list):
                    break
        wks.update_cells(cell_list)
    except:
        print "Exception"


    cell_list_tab = wks.range(range_tab)

    try:
        idx = 0
        for (start_row , value) in enumerate(a_tup):
            cell_list_tab[idx].value = value
            idx += 1
            if idx >= len(cell_list_tab):
                break
        wks.update_cells(cell_list_tab)
    except:
        print "Exception"



GDriveJSON = 'GoogleAuthKey.json'
GSpreadSheet = '試算表檔名'
TYPE = 'Notebook'

rows_item = ['HardwareID', 'UserName', 'Computer', 'Type', 'CPU', 'RAM(MB)', 'Disk(MB)', 'Monitor']
rows_accest = DB_return("SELECT DISTINCT  A.HARDWARE_ID,A.TAG,H.NAME,B.TYPE,H.PROCESSORT,H.MEMORY,S.DISKSIZE,M.CAPTION \
from \
accountinfo as A \
join hardware as H \
join monitors as M \
join storages as S \
join softwares as SF \
join bios as B \
where \
A.HARDWARE_ID=H.ID \
and A.HARDWARE_ID=S.HARDWARE_ID \
and A.HARDWARE_ID=B.HARDWARE_ID \
and S.TYPE='Fixed hard disk media' \
and A.HARDWARE_ID=M.HARDWARE_ID \
and A.HARDWARE_ID=SF.HARDWARE_ID \
and A.HARDWARE_ID=H.ID \
and A.TAG not like '%報廢%' \
and A.TAG not like '%出售%' \
and B.TYPE='" + TYPE + "' GROUP BY A.TAG")

GSheet_write(GSpreadSheet,GDriveJSON,rows_item,rows_accest,TYPE)



OCS Inventory 匯出資料到 Google 試算表(依TAG名稱寫入試算表不同分頁)

OCS Inventory 匯出到 Google 試算表的程式是從網路上其他高手分享出來(參考資料出處),並依個人需求調整。

如要取用請注意,因程式是用 python 寫的,程式段落可能會移位導致無法正常運作。

下列程式調整為依電腦設備寫入同算表不同分頁,過濾掉電腦上所安裝不想列出的系統修補軟體。

程式內容:
#coding=utf-8
#-*- coding: utf-8 -*-
import MySQLdb as mysqldb
import sys
import gspread
import string

def DB_return(exec_cmd):
    connection = mysqldb.connect('localhost', 'ocs', 'ocspasswd', 'ocsdb',charset='utf8');
    with connection:
        cursor = connection.cursor()
        cursor.execute(exec_cmd)
        rows_info = cursor.fetchall()
        return rows_info

def GSheet_write(GSpreadSheet,GDriveJSON,tab_data,data,worksheet_name):
    a_list=[]
    for i, element in enumerate(tab_data):
        a_list.append(tab_data[i])
    a_tup = tuple(a_list)

    start_row = 1
    start_letter = 'A'
    end_len = len(data[0]) - 1
    if end_len > 26:
        len_info = end_len - 26
        len_a='A'
    else:
        len_info = end_len
        len_a=''
    end_letter = string.uppercase[len_info]
    end_letter = len_a+end_letter
    end_row = len(data)
    range = "%s%d:%s%d" % (start_letter, start_row+1 , end_letter, end_row+1)
    range_tab =  "%s%d:%s%d" % (start_letter, start_row , end_letter ,start_row)

    from oauth2client.service_account import ServiceAccountCredentials as SAC
    try:
        scope = ['https://spreadsheets.google.com/feeds']
        key = SAC.from_json_keyfile_name(GDriveJSON, scope)
        gc = gspread.authorize(key)
        workbook = gc.open(GSpreadSheet)
        if worksheet_name in [sheet.title for sheet in workbook.worksheets()]:
          workbook.del_worksheet(workbook.worksheet(worksheet_name))
          wks = workbook.add_worksheet(worksheet_name,end_row+1,end_len+1)
        else:
          wks = workbook.add_worksheet(worksheet_name,end_row+1,end_len+1)
    except Exception as ex:
        print('connect google fail ', ex)
        sys.exit(1)

    cell_list = wks.range(range)

    try:
        idx = 0
        for (start_row , rowlist) in enumerate(data):
            for (colnum, value) in enumerate(rowlist):
                cell_list[idx].value = value
                idx += 1
                if idx >= len(cell_list):
                    break
        wks.update_cells(cell_list)
    except:
        print "Exception"


    cell_list_tab = wks.range(range_tab)

    try:
        idx = 0
        for (start_row , value) in enumerate(a_tup):
            cell_list_tab[idx].value = value
            idx += 1
            if idx >= len(cell_list_tab):
                break
        wks.update_cells(cell_list_tab)
    except:
        print "Exception"



GDriveJSON = 'GoogleAuthKey.json'
GSpreadSheet = '試算表檔名'

rows_item = ['HardwareID', 'UserName', 'Computer', 'CPU', 'RAM(MB)', 'HD_Model', 'HD_Size(MB)', 'Monitor', 'Software']

connection = mysqldb.connect('localhost', 'ocs', 'ocspasswd', 'ocsdb',charset='utf8');
with connection:
    cursor = connection.cursor()
    cursor.execute("select * from accountinfo where TAG not like '%出售%' and TAG not like '%報廢%'")
    numrows = int(cursor.rowcount)

    for i in range(numrows):
        row = cursor.fetchone()
        GsheetName = row[1]

        reload(sys)
        sys.setdefaultencoding('utf-8')

        rows_accest = DB_return("SELECT DISTINCT \
A.HARDWARE_ID,A.TAG,H.NAME,H.PROCESSORT,H.MEMORY,S.NAME,S.DISKSIZE,M.CAPTION,SF.NAME \
from accountinfo as A \
join hardware as H \
join monitors as M \
join storages as S \
join softwares as SF \
where \
A.HARDWARE_ID=H.ID \
and A.HARDWARE_ID=S.HARDWARE_ID \
and S.TYPE='Fixed hard disk media' \
and A.HARDWARE_ID=M.HARDWARE_ID \
and A.HARDWARE_ID=SF.HARDWARE_ID \
and A.HARDWARE_ID=H.ID \
and SF.NAME not like '%Hotfix%' \
and SF.NAME not like '%Update%' \
and SF.NAME not like '%安全性更新%' \
and SF.NAME not like '%更新%' \
and SF.NAME not like '%驅動程式%' \
and A.TAG like '" + GsheetName + "' \
ORDER BY H.NAME")

        GSheet_write(GSpreadSheet,GDriveJSON,rows_item,rows_accest,GsheetName)



2017年9月20日 星期三

OFFICE 表格內的文字消失

微軟9月份的Office軟體更新後會造成表格合併儲存格的文字消失,還沒更新的就先不要更新。

已經安裝的也有解決辦法,將已更新的 KB3213656 或 KB4011039 修正檔移除就可恢復正常了。

2017年8月19日 星期六

OFFICE 365 搭配 Linux BIND DNS 設定

OFFICE 365 DNS網域設定方式(For Linux)

在Zone設定檔裡增加O365 網域 DNS記錄
新增下列DNS記錄:

;o365 SubDomain
$ORIGIN o365.example.com.tw.

;O365用來驗證網域是否歸您所有
o365.example.com.tw. 3600 IN TXT "MS=ms12345678"

增加上面兩列設定就可完成OFFICE 365的網域驗證。

; 將網域的內送郵件傳送到 Office 365 中的 Exchange Online 服務
o365.example.com.tw. 3600 IN MX 5 o365-example-com-tw.mail.protection.outlook.com.

; 防止他人使用您的網域來傳送垃圾郵件或其他惡意電子郵件
o365.example.com.tw. 3600 IN TXT "v=spf1 include:spf.protection.outlook.com -all"

;O365各項服務主機的DNS記錄
;自動導引outlook用戶端與Exchange Online連結
autodiscover.o365.example.com.tw. 3600 IN CNAME autodiscover.outlook.com.

; Lync用戶端會使用它來協助尋找 Lync Online 服務並登入
sip.o365.example.com.tw. 3600 IN CNAME sipdir.online.lync.com.

; Lync 行動用戶端會使用它來協助尋找 Lync Online 服務並登入
lyncdiscover.o365.example.com.tw. 3600 IN CNAME webdir.online.lync.com.

; Office 365 會使用它來將驗證導向正確的身份識別平台
msoid.o365.example.com.tw. 3600 IN CNAME clientconfig.microsoftonline-p.net.

; Office 365 行動裝置管理 (MDM)
enterpriseregistration.o365.example.com.tw. 3600 IN CNAME enterpriseregistration.windows.net.

; Office 365 行動裝置管理 (MDM)
enterpriseenrollment.o365.example.com.tw. 3600 IN CNAME enterpriseenrollment.manage.microsoft.com.

;協調 Lync 用戶端之間的資訊流程
_sip._tls.o365.example.com.tw. 3600 IN SRV 100 1 443 sipdir.online.lync.com.

;藉由啟用 SIP 同盟,讓 Office 365 網域與 Skype 之外的用戶端共用
_sipfederationtls._tcp.o365.example.com.tw. 3600 IN SRV 100 1 5061 sipfed.online.lync.com.

如郵件寄送是使用主網域(example.com.tw)來寄送信件,也需在主網域(example.com.tw)設定上列設定值(注意:網域名需修改為主網域,例: o365.example.com.tw --> example.com.tw)。



2017年7月21日 星期五

iRedMail Server 主機、DB 備份還原


因為發生慘案,先趕快將 iRedMail Server 還原後回想的還原步驟,可能會漏掉還原過程中少數步驟。但有大部份的還原步驟總比沒有好,有機會..................吔!!!!!
希望不會再有機會用到。


安裝時,有可能系統採最小安裝,會缺少某些 compile 工具程式,依提示補上即可。

一、安裝 CentOS 或 Ubuntu、iRedMail
1.安裝 CentOS 或 Ubuntu


2.下載 iRedMail:
請選擇最新版本下載:
https://bitbucket.org/zhb/iredmail/downloads/
tar -xvf iRedMail-x.x.x.tar.bz2
cd iRedMail-x.x.x
bash iRedMail.sh


3.iRedMail 固定的設定畫面,依它的設定步驟提供各項資料設定。
設定過程中要先建立一個 domain(如有多個 Domain 挑一個預設的 Domain)、MySQL 密碼、管理者帳號密碼(帳號預設為:postmaster@domain_name)。


4.安裝 Let’s Encrypt(這篇是講還原,所以沒有安裝後續修改 Apache、nginx 的設定方式)
yum install -y git bc wget


git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt


/opt/letsencrypt/letsencrypt-auto certonly --standalone --email xxx@example.com --agree-tos -d example.com (可利用 -d 加多個Domain)


自動更新 SSL 憑證設定檔:
cp /opt/letsencrypt/examples/cli.ini /usr/local/etc/le-renew-webroot.ini


編輯自訂設定檔(沒備份到):
vi /usr/local/etc/le-renew-webroot.ini
修改(必須和原來申請SSL KEY填的資料一樣,不然就利用上面的步驟重新申請 SSL):
rsa-key-size = 4096
email = xxxxx@example.com
domains = example1.com, example2.com …………..
webroot-path = /opt/www/    #roundcubemail 安裝目錄


下載 SSL 更新程式:
yum install curl
curl -L -o /usr/local/sbin/le-renew-webroot https://gist.githubusercontent.com/thisismitch/e1b603165523df66d5cc/raw/fbffbf358e96110d5566f13677d9bd5f4f65794c/le-renew-webroot


手動執行,測試 shell script 更新憑證 :
/usr/local/sbin/le-renew-webroot


加入 Crontab 排程執行憑證更新 :
crontab -e
設定每個禮拜一的凌晨 2:30 (排程自訂)進行一次憑證的檢查及更新
30 2 * * Mon /usr/local/sbin/le-renew-webroot >> /var/log/le-renewal.log;systemctl restart nginx.service postfix.service dovecot.service
這樣就有了一個半永久的 SSL 憑證


二、還原設定
1.從備份的 etc 資料夾複製  letsencrypt 資料夾到 /etc 下


2.還原 postfix 設定檔:
main.cf(確認 main.cf 裡是否有另外套件的設定資料檔案,如有一併還原)
master.cf


3.還原 dovecot.conf 設定檔(LOG 檔 owner 為:vmail:vmail)


4.還原 nginx.conf、conf.d/default.conf
PS:
連線時出現: 502 bad gateway 有可能是 nginx.conf 裡的
server unix:/var/run/php-fpm.socket 路徑指向錯誤


5.產生新的 DKIM KEY(檔案路徑在 /var/lib/dkim,沒備份到)
amavisd -c /etc/amavisd/amavisd.conf genrsa /var/lib/dkim/example.com.pem 2048
chown amavis:amavis /var/lib/dkim/example.com.pem
chmod 400 /var/lib/dkim/example.com.pem
systemctl restart amavisd


檢查:
amavisd -c /etc/amavisd/amavisd.conf showkeys
amavisd -u amavis -c /etc/amavisd/amavisd.conf debug


記得修改 DNS DKIM 設定。


6.修改 amavisd.conf,增加 Domain (公司有多個網域都要加入,另不要用舊的設定檔,除非版本相同)


7.還原備份的 vmail1 裡的使用者信箱(直接搬移 各個 Domain 資料夾進 /var/vmail/vmail1/)


8.還原 MySQL DB
先解壓縮 iRedMail 備份的 DB:
zip2 -d xxxxxxx

還原 DB:
mysql -uroot -p amavisd < amavisd-2017-07-20-03\:30\:08.sql
mysql -uroot -p iredadmin < iredadmin-2017-07-20-03\:30\:08.sql
mysql -uroot -p iredapd < iredapd-2017-07-20-03\:30\:08.sql
mysql -uroot -p roundcubemail < roundcubemail-2017-07-20-03\:30\:08.sql
mysql -uroot -p vmail < vmail-2017-07-20-03\:30\:08.sql
還回以上的 DB 即可,切勿還原 sql DB。

9.觀察 LOG 看是否有錯誤訊息



2017年6月30日 星期五

ownCloud 掛載 Google Drive、DropBox

Google 端設定:
1.要申請 Google API 認證 key 前,Chrome 先登入要申請的 Gmail 帳號

2.申請 Google API key 網址


3.這裡是申請 ownCloud 讀取 Google Drive 的認證 key

選擇啟用 Google Drive API

出現要建立專案的提示

建立專案

專案成功建立後,再選擇啟用 Google Drive API

建立 憑證




要不要下載 JSON 認證檔案都沒關係,可從網頁內查詢得到

完成的畫面

ownCloud 端設定:

出現錯誤訊息頁面:
表示要先加入 Google 的  Allow Risky Access Permissions By Unreviewed Apps 群組

加入群組後,再回到 ownCloud 按<允許存取>重新連結 Google Drive 一次。
重新連結就會出現:

ownCloud 成功加上 Google Drive 後,就可以退出 Allow Risky Access Permissions By Unreviewed Apps 群組了。

DropBox APPS 認證 KEY 網頁:

DropBox 的作法更簡單,目前 ownCloud v10 只支援 OAuth1 認證。

按 Create app 後,就產生一組認證 KEY & 金鑰


DropBox 二個步驟搞定,再到 ownCloud 儲存區掛載 DropBox 空間。

新增 DropBox 儲存區,輸入 APP key 及 金鑰後,按<允許存取>






2017年6月29日 星期四

ownCloud 安裝 OnlyOffice Plug-in


ownCloud 安裝 OnlyOffice Plug-in:
# cd /var/www/owncloud/apps/
# git clone https://github.com/ONLYOFFICE/onlyoffice-owncloud.git onlyoffice
# chown -R www-data:www-data onlyoffice



切換到 owncloud web 設定:

設定 ownCloud OnlyOffice Plug-in 連結 OnlyOffice Document Server:






2017年6月23日 星期五

Ubuntu 16.04 安裝 OnlyOffice Document Server 整合 ownCloud 雲端硬碟

官網安裝步驟介紹:

在 CentOS 及 Ubuntu 安裝試過,結果 CentOS 怎麼設定都無法正常整合 OnlyOffice。
改用 Ubuntu 裝好後不用調整設定,直接可用。

更新 Ubuntu
# apt-get update && apt-get upgrade && apt-get dist-upgrade
# apt-get install -y curl

新增套件庫來源
# echo "deb http://archive.ubuntu.com/ubuntu xenial main universe multiverse" | tee -a /etc/apt/sources.list

安裝 nodejs 套件
# curl -sL https://deb.nodesource.com/setup_6.x | bash -
# apt-get install -y nodejs

安裝 PostgreSQL
# apt-get install -y postgresql

PostgreSQL 建立 onlyoffice 資料庫及帳號
# sudo -i -u postgres psql -c "CREATE DATABASE onlyoffice;"
# sudo -i -u postgres psql -c "CREATE USER onlyoffice WITH password 'onlyoffice';"
# sudo -i -u postgres psql -c "GRANT ALL privileges ON DATABASE onlyoffice TO onlyoffice;"

安裝 redis
# apt-get install -y redis-server

安裝 RabbitMQ
# apt-get install -y rabbitmq-server

安裝 Document Server
新增 GPG key
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5

新增 Document Server 套件庫
# echo "deb http://download.onlyoffice.com/repo/debian squeeze main" | tee /etc/apt/sources.list.d/onlyoffice.list
# apt-get update
# apt-get install -y onlyoffice-documentserver

新增字型(可不新增字型):
# mkdir /usr/share/fonts/chinese
# cd /usr/share/fonts/chinese
# 上傳字型
# mkfontscale
# mkfontdir
# apt-get install fontconfig
# fc-cache -fv
# documentserver-generate-allfonts.sh

Ubuntu 16.04 安裝 中文字型:
# apt-get install -y cabextract fonts-linuxlibertine ttf-mscorefonts-installer

字型英文名稱:
微軟正黑體:Microsoft JhengHei
標楷體:DFKai-SB
細明體:MingLiU
新細明體:PMingLiU


限制使用 Document Server 的 ownCloud 主機:

# vi /etc/onlyoffice/documentserver/default.json
# systemctl restart supervisor.service



ownCloud 整合 OnlyOffice 設定部份:
ownCloud 安裝 OnlyOffice Client:
# cd /var/www/owncloud/apps/
# git clone https://github.com/ONLYOFFICE/onlyoffice-owncloud.git onlyoffice
# chown -R www-data:www-data onlyoffice

切換到 owncloud web 設定:
啟用 OnlyOffice Plug-in
設定 OnlyOffice Document Server 位址:

備註:
1.如使用 SSL 連線 ownCloud,在開啟文件編輯時,會被擋掉;出現錯誤訊息:
ONLYOFFICE cannot be reached. Please contact admin

原因是: 沒有有效的 SSL 認證

Edge、IE 按 <檢視所有內容> 或 Chrome 按 <載入不安全的指令碼>,就可以啟文件編輯畫面。

2.亂碼問題
將字型放入 Document Server 後,文件檔案裡還是有亂碼出現時,可以試著更改字型。有些亂碼可以借由變更字型獲得解決。





CubeCOS 虛擬機刪除網路介面,且主機內沒有 virtio 驅動程式成為孤島主機時,進行 virtio iso 掛載流程

 # 當 CubeCOS 虛擬機刪除網路介面,且主機內沒有 virtio 驅動程式成為孤島主機時,進行 virtio iso 掛載流程。 # 步驟一:確認目標虛擬機的底層名稱 # 在 Compute Node(計算節點)上列出運行中的 instance,並反查對應的 OpenSt...