分类: Linux

  • Esxi 8 虚拟机Ubuntu apt安装Jellyfin如何开启Nvidia硬解码 非Docker方式的安装过程

    Esxi 8 虚拟机Ubuntu apt安装Jellyfin如何开启Nvidia硬解码 非Docker方式的安装过程

    随着网上下载下来的视频质量和体积的增加,视频的码率和编码也越发激进。HEVC编码的视频越来越多,AV1的也多了起来。视频播放卡顿的额原因应该有很多,如果你只对Jellyfin的硬解码感兴趣,那就直接跳到 Jellyfin开启显卡硬解码能力的部分,不过这里主要讨论nVidia显卡的硬解码方式。Intel和AMD GPU暂未仔细研究,但应该类似。

    Jellyfin的安装环境

    技术奇客ITGeeker.net之前使用Esxi 8虚拟了一个Minimal Ubuntu 22.04版本,给了4核CPU, 16G内存。

    然后apt直接安装了Jellyfin, NFS挂载视频盘之后就用上了,一切正常。

    CPU用的XEON 2699A V4, 22核44线程,虽然不带核显,但播放视频都没问题,CPU占有率也从来不是问题。

    使用Ubuntu minimum是为了节省资源,毕竟只要播放视频而已。后来发现VMware自家为Esxi还专门推出过一个精简的Photon系统,官方有OVA版本,安装那是一个简便,而且更节省空间。不过Photon是兼容CentOS Yum的,我比较熟悉apt就没有采用了。

    缘起卡顿

    最近发现通过网络下载的视频,在播放的时候老是有卡顿现象。查看后发现视频都比较大,动不动就10-20G一部影片,编码是HEVC的4K, 至少8bit的。虽然还不是AV1这类的,但对于没有显卡的虚拟机还是显得有点吃力了。

    处理方式一 – 选用Jellyfin的LibVLC播放

    更换Jellyfin的首选播放器为LibVLC, 其实这基本还是解决了卡顿的问题,但是从视频质量来看的确降低了不少,从实际效益来讲,我们下载了高质量的4K视频,购买了高清晰的4K电视机,结果降级使用,没道理啊,果断放弃!

    处理方式二 – 采用Kodi或者VLC等外部播放器

    1. 先说VLC,播放效果一流,而且现在的界面做的还是不错的,还有收藏文件夹等功能。但是搭建Jellyfin,Emby或者Plex流媒体服务的,不就是为了那漂亮的海报界面吗?搜刮了那么多的媒体信息就无用武之地了,果断放弃!但考虑作为第三备用,实在没办法的情况下还是可以的,而且VLC也支持字幕。
    2. Kodi在安装了Jellyfin的插件后,可以把Jellyfin的视频库(电影,电视剧和音乐等)完整的显示到Kodi的界面,而且Kodi的播放效果一流,Jellyfin应该学习借鉴一下才行。但是就是这同步,经常要花费不少时间,尤其当你更新视频库比较频繁的时候,就会发现经常要更新,当然也可能因为我大部分还是使用Jellyfin自己的界面的缘故,如果一直使用Kodi应该没那么明显。

    Kodi已作为备用,凡是Jellyfin不能播放的,就用Kodi播放,而且从没让人失望过。

    by 技术奇客ITGeeker.net

    除了界面没有Jellyfin原生的那么简洁,还有安装Kodi Connect 插件稍显复杂,体验还不错,毕竟Kodi的插件库更丰富,功能更完善。相信这也是为什么Jellyfin和Emby都坚持开发Kodi的插件的原因吧。

    处理方式三 – 更换电视机

    华为v65智慧屏THAL-560和HEGE-560,同为4K电视机,当然前者有HDR和120Hz的刷新率,画面更亮更鲜艳。相同芯片HongHu818,相同内存,HEGE-560可以顺畅播放所有视频,而THAL-560会卡在高清的片子上,不知道是不是其他板块上的芯片有区别。

    还有HEGE-560是HarmonyOS 2,而THAL-560已经升级到HarmonyOS 4.0.0.115了。

    当然换电视是开玩笑,但如果正好要更换电视机,可以多了解一下电视机本身的解码能力。

    处理方式三 – Jellyfin开启显卡硬解码能力

    这是最耗时间的,也是最有科技感的方式。

    by 技术奇客ITGeeker.net

    第一步 先去Jellyfin官方的文档看一下关于硬件加速的内容,写的非常详实

    https://jellyfin.org/docs/general/administration/hardware-acceleration/

    显卡部分有提到NVIDIA GPU,Intel GPU和AMD GPU在Windows, Linux甚至虚拟化平台的显卡加速使用方法。

    • H.264 / AVC 10-bit的解码目前所有显卡都不支持,不用考虑了
    • 核显硬解的话最好使用双通道内存,可以加快速度
    • 缓存或者说Jellyfin最好转到SSD硬盘,m.2速度毕竟快不少

    第二步 查看nVidia官网的解码与编码矩阵图,选择合适的显卡

    Nvidia官方有一个完整的显卡芯片的解码和编码矩阵图,可以清晰的查询各类型号新卡的支持能力。选择一个对的显卡,那么你的视频硬解码也就成功了一半。

    https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new

    消费级的GeForce GTX 1660以上查i能支持所有编码包括AV1, 专业级的也要NVIDIA T400起。手里的是一张华硕的GT1030-SL-2G-BRK的无风扇显卡,399元入手全新的。闲鱼200左右可以入手。好处是无噪音,不好的消息是:正好是Jellyfin官方不推荐的低能显卡。不过解码Decode还可以,不支持的有

        – vp8

        – H.265 (HEVC) 4:4:4

        – AV1

    其它都支持,但编码Encode能力就非常差了,几乎都不支持。以下安装都以这个GT 1030显卡为例

    Most NVIDIA GPUs come with NVENC/NVDEC support but some low-end and mobile models (e.g. GT1030 and MX450) are exceptions.

    by Jellyfin
    硬解码显卡选择 技术奇客ITGeeker.net的几个建议:
    1. nVidia消费级显卡选择GeForce GTX 1660以上为佳,GT1030 and MX450避开不要选择。
    2. Intel核显是Jellyfin优先推荐的,最好是10代以上的CPU核显,也就是核显630以上。
    3. AMD显卡解码能力限制少,比较强,除了RX 6400/6500系列没有编码能力的要避开。

    第三步 开整,安装nVidia显卡的Linux驱动

    平台:Esxi 8;操作系统:Ubuntu22.04.4 64位,显卡:华硕GT1030-SL-2G-BRK直通

    1. 查看当前虚拟机已安装的显卡

    显卡要先直通,虚拟机添加直通的PCI设备后,重启即可查看到NVIDIA Corporation GP108 [GeForce GT 1030]已被添加

    lspci -nn | grep -Ei "3d|display|vga"
    
    00:0f.0 VGA compatible controller [0300]: VMware SVGA II Adapter [15ad:0405]
    03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP108 [GeForce GT 1030] [10de:1d01] (rev a1)

    2. 安装显卡驱动

    Jellyfin 10.8 所需的最低 NVIDIA 驱动程序版本为 470.57.02。

    具体可常看Ubuntu官方的nVidia驱动安装介绍:https://ubuntu.com/server/docs/nvidia-drivers-installation

    查看当前可安装的Linux版本驱动版本

    sudo ubuntu-drivers list --gpgpu

    然后选择你需要的版本号进行安装,我这里选的是545版本

    sudo apt install -y libnvidia-decode-545 libnvidia-encode-545
    
    # 其他安装Linux nVidia显卡驱动的方法
    sudo apt-get install dkms
    sudo dkms install -m nvidia -v 545.29.06
    # 或者
    sudo add-apt-repository ppa:graphics-drivers/ppa --yes
    sudo apt install nvidia-driver-545

    这里还有可以防止更新Linux内核的后显卡驱动失效的命令可以使用

    dpkg-query -W --showformat='${Package} ${Status}\n' | grep -v deinstall | awk '{ print $1 }' | \
        grep -E 'nvidia.*-[0-9]+$' | \
        xargs -r -L 1 sudo apt-mark hold

    查看已安装的驱动版本,验证一下是否成功安装。

    cat /proc/driver/nvidia/version
    
    NVRM version: NVIDIA UNIX x86_64 Kernel Module  545.29.06  Thu Nov 16 01:59:08 UTC 2023
    GCC version:  gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) 
    
    # 或者使用
    ls /usr/src | grep nvidia
    nvidia-545.29.06
    

    然后nvidia-smi-检查当前驱动的状态

    最后一步在 Jellyfin 中启用 NVENC 并取消选中不支持的编解码器。大功告成!!!

    就这么简单吗?就这么简单。但是你可能会碰到的几个问题,技术奇客ITGeeker.net都踩过坑了,这里提供给大家参考,可以避坑。

    没法和nVidia驱动沟通,其实这里需要安装CUDA编译驱动,可以用nvcc -V查验一下

    nvcc -V
    
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2021 NVIDIA Corporation
    Built on Thu_Nov_18_09:45:30_PST_2021
    Cuda compilation tools, release 11.5, V11.5.119
    Build cuda_11.5.r11.5/compiler.30672275_0

    如果不能运行nvcc -V,可以先安装

    apt install nvidia-cuda-toolkit

    然后安装CUDA,这里有nVidia的官方文档:https://developer.nvidia.com/cuda-downloads

    首先下载CUDA Toolkit for Linux Ubuntu 22.04 x86_64, 我这里采用runfile的方式:

    wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
    sudo sh cuda_12.4.0_550.54.14_linux.run

    然后是稍微有些长的等待,而且没有错误就没有显示。静静的等待一下。。。

    这是因为磁盘空间不够引起的,CUDA ToolKit需要将近10G的磁盘空间,所以空间要留足。技术奇客ITGeeker.net之前给Ubuntu的空间太小,只好进行虚拟机硬盘空间的扩展,又是一番折腾。可以参看技术奇客ITGeeker.net的博客: https://www.itgeeker.net/esxi-8-vm-machine-how-to-expand-disk-space-for-ubuntu-lvm

    扩容后,再运行run,空间足够了就不会出现这个问题。

    运行man man命令的时候会提醒你

    This system has been minimized by removing packages and content that are
    not required on a system that users do not log into.
    
    To restore this content, including manpages, you can run the 'unminimize'
    command. You will still need to ensure the 'man-db' package is installed.

    因为Ubuntu安装的时候采用了minimize最小化安装,所以有些命令缺失。解决方法也很简单

    unminimize

    这里等待的时间会久一点,如果以后要安装Jellyfin,不要选择minimize就对了。

    因为你采用了不同的包来安装驱动,建议你移除后再重新安装CUDA,这里可以不用移除,直接使用命令覆盖

    sudo sh cuda_12.4.0_550.54.14_linux.run --toolkit --silent --override

    基本这个时候就不会有任何信息输出,Linux没有错误即成功。

    卸载并全部重新安装

    如果你碰到错误1里的error NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.但都无法解决的话,或者碰到其他安装问题无法解决,那么考虑移除所有驱动及工具,从头再来吧

    sudo apt-get remove --purge '^nvidia-.*'
    sudo apt-get remove --purge '^libnvidia-.*'
    sudo apt-get remove --purge '^cuda-.*'
    
    sudo apt-get install linux-headers-$(uname -r)

    然后先装nVidia的驱动,再装CUDA ToolsKit就可以了。

    最后,附上成功转码HEVC到H264的截图。

  • 如何将Xshell的会话导入到WindTerm

    如何将Xshell的会话导入到WindTerm

    Xshell虽然是商业软件,但是家庭和学校版还是免费的,所以也用了挺长的时间,积累了不少的连接(会话)和快速命令。

    放弃Xshell转投WindTerm的几个理由

    1. 总感觉Xshell的比较占用资源,启动速度有点慢,尤其多开的时候感觉非常耗资源。
    2. 虽然可以创建很多的快捷命令,但是无法同时开启两个快捷命令栏,不停的切换又太麻烦,导致快捷命令重复的太多。
    3. Xshell还不能跨平台使用,Windows里使用的没法在Linux里头同步使用。
    4. Xshell 7 后面的版本据说会有启动弹窗广告,不过ITGeeker技术奇客至今还没碰到。
    5. Xshell 6版本以后,免费版每个窗口限制最多开4个标签页
    6. Xshell启动的窗口大小经常无法记忆,也没找到地方设置。
    7. Xshell右键粘贴命令时常会有乱码。
    8. Xshell tail日志的时候没法停止查看
    9. 用的太久了,想尝试新的工具。
    10. WindTerm是开源的,完全免费用于商业和非商业用途。资源消耗、性能方面相比要好很多;Windows版本免安装解压即可便携用。
    11. WindTerm配置文件修改方便,可随意打包保存。同步多台设备的配置可使用git方式。

    WindTerm开源地址:https://github.com/kingToolbox/WindTerm/releases 当前Fork1.3K,Star 16.4K

    WindTerm作者博客地址,有很多功能介绍及教学等:https://kingtoolbox.github.io/

    依据凡事都要有备份方案的原则,觉得不应只依赖一个软件,而且Xshell的跨平台使用的确是个问题,所以打算启用第二个SSH的客户端。国内有蛮多人推荐的客户端叫FinalShell, 但是它的官方主页(http://www.hostbuf.com/t/988.html)让人感觉有点点没那么大气,所以还是选择了这个纯开源的WindTerm.

    Xshell转投WindTerm的数据导入导出问题

    如何将Xshell的会话导入到WindTerm?

    不知不觉的,你会发现你的链接的数量可能至少有几十个,甚至上百个。如何快速地将这些会话导入到WindTerm就成了非常重要的问题。

    网上搜了一圈似乎没有直接将Xshell导入到WindTerm的工具,WindTerm官方也讲了因为Xshell是一个商业软件,所以他们不会提供从Xshell导入到WindTerm的工具。这里ITGeeker技术奇客在网上找到了一个SH脚本,可以将Xshell的会话先导入到Putty,然后再在WindTerm里直接导入就可以了。虽然是2019年的脚本,只需修改PATH_XSH参数为正确的路径,亲测可以正常使用。

    Xshell 7 会话默认路径: C:\Users\你的用户名\文档\NetSarang Computer\7\Xshell\Sessions

    第一步:如何将Xshell会话导入到Putty当中

    在Windows本地创建好SH脚本后,打开CMD运行窗口,运行两个命令:

    • wsl bash xshell2putty_config.sh
    • reg import tmp_xshell2putty_config.reg

    这里应该要安装Windows子系统Linux,ITGeeker技术奇客的Windows之前已经安装过的。

    第二步:打开Putty,确认会话已成功导入

    Putty Windows应用官方链接 https://apps.microsoft.com/store/detail/putty/XPFNZKSKLBP7RJ

    这里从Xshell导入的链接可能会有少许是错误的,但基本都可用。

    第三步:在WindTerm的的会话窗口空白处,右键点击并选择导入即可完成

    如果你的Xshell会话包含子目录,那就需要多次运行,每次设定不同PATH_XSH才行。或者改一下脚本,让它支持遍历各个子目录也行。

    by itgeeker.net

    如何将Xshell的快速命令导入到WindTerm?请参考ITGeeker技术奇客的原创的转换脚本。

    xshell2putty_config.sh脚本参考

    脚本原始地址:https://gist.github.com/timedcy/a9da42ec66710e9a28535f769dcee694

    #!/bin/bash
    
    # convert to and import putty config from xshell's
    # author: timedcy
    # date: 2019-12-04
    # usage:
    # In Windows 10 cmd, execute commands
    # wsl bash xshell2putty_config.sh
    # reg import tmp_xshell2putty_config.reg
    
    # set vars bellow first
    PATH_XSH="/mnt/d/conf/XShellSessions/Links"
    PublicKeyFile="D:\\conf\\UserKeys\\keydcy_4096.ppk"
    
    
    fn_tmp_reg=./tmp_xshell2putty_config.reg
    
    proc_list() {
      echo "Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Software\SimonTatham]
    
    [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY]
    
    [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions]
    " >${fn_tmp_reg}
    
      for xsh in $(ls "${PATH_XSH}"/*xsh); do
        proc_xsh $xsh
      done
    }
    
    extr() { iconv -f utf-16 -t utf-8 $filepath | sed -nr "s#(^${1}=)([^\r]+)#\2#gp" | tr -d '\r'; }
    
    proc_xsh() {
      filename="${1##*/}"
      name=${filename%.*}
      filepath="${PATH_XSH}/$filename"
      HostName=$(extr Host)
      PortNumber=$(extr Port)
      UserName=$(extr UserName)
      PortNumber="dword:$(printf '%08x\n' ${PortNumber})"
      WinTitle="${UserName}@: ${name}~"
      FwdReqCount=$(extr FwdReqCount)
      PortForwardings=""
      if [[ "$FwdReqCount" -gt 0 ]]; then
        for ((x = 0; x < $FwdReqCount; x++)); do
          Port=$(extr "FwdReq_${x}_Port")
          Host=$(extr "FwdReq_${x}_Host")
          HostPort=$(extr "FwdReq_${x}_HostPort")
          PortForwardings+="L${Port}=${Host}:${HostPort},"
        done
        PortForwardings="${PortForwardings%,*}"
      fi
      echo
      echo filepath: $filepath
      echo HostName: $HostName
      echo PortNumber: $PortNumber
      echo UserName: $UserName
      echo ${PortForwardings}
      echo WinTitle: $WinTitle
      echo PublicKeyFile: $PublicKeyFile
      echo fn_tmp_reg: $fn_tmp_reg
    
      echo "
    [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\\${name}]
    \"HostName\"=\"${HostName}\"
    \"PortNumber\"="${PortNumber}"
    \"UserName\"=\"${UserName}\"
    \"PublicKeyFile\"=\"${PublicKeyFile}\"
    \"PortForwardings\"=\"${PortForwardings}\"
    \"WinTitle\"=\"${WinTitle}\"
    \"AgentFwd\"=dword:00000001
    \"Protocol\"=\"ssh\"
    \"FullScreenOnAltEnter\"=dword:00000001
    \"LineCodePage\"=\"UTF-8\"
    \"TCPNoDelay\"=dword:00000001
    \"TCPKeepalives\"=dword:00000001
    \"Font\"=\"DejaVu Sans Mono\"
    \"FontIsBold\"=dword:00000000
    \"FontCharSet\"=dword:00000000
    \"FontHeight\"=dword:00000012
    \"FontVTMode\"=dword:00000004
    " >>${fn_tmp_reg}
    
    }
    
    proc_list
  • 因为低配高价,放弃升级群晖NAS的想法 转而 来玩玩ESXi 8.0吧

    因为低配高价,放弃升级群晖NAS的想法 转而 来玩玩ESXi 8.0吧

    家里有个群晖的DS418play NAS, 搜了一下购买订单,是2017年11月11日买的,到现在已整整5年了。当时配了5块希捷的酷狼4T硬盘,1块备用,结果到现在都没罢过工,是个踏实的机子。

    当年的折后价格是7905.56元,加上加配的内存319.58元,还有APC的UPS电源430.86元,总共:8656元

    2017年11月11日NAS订单
    UPS和增加的内存

    现在的升级版应该是Synology群晖DS420+了,价格还是和当年的DS418Play差不多,增加了两个NVMe,CPU从Intel Celeron J3355升级到了J4025。

    一样的内存2G

    一样的网络1GX2

    感觉比牙膏厂还要爱挤牙膏!

    by itgeeker.net

    DSM7不让使用Docker了

    还有一个主要的原因:DSM升级到7.1之后,之前能使用的Docker在我的DS418play上面就再也不能使用了,网上搜了好多人也是这个情况,试了很多方法,反正就是不让用了。群晖官方本来就没说DS418play支持Docker使用,也只好哑巴吃黄连-有苦难言了。

    虽然还是可以安装VMM,当系统资源的占用极高,速度那叫一个煎熬。

    硬盘空间有些吃紧了

    对ITGeeker技术奇客来说,NAS最常用的功能主要有:

    1. Emby电影服务器,自带的Video Station不太好用禁用了。
    2. Download Station下载电影,通过Chrome浏览器插件比aria2还方便。
    3. Synology Photo手机,PAD照片自动备份
    4. Synology Drive文件同步,外网实在是慢。没法和Nextcloud比的。
    5. SAN Manager iSCSI分享给Windows做硬盘用。比Samba和NFS方便许多。
    6. Cloud Sync同步Onedrive和百度云
    7. Git Server同步代码,也配置了计划任务定时备份外围的git资源
    8. 安装Syncthing同步各个设备的文件
    9. 备份各种文件,软件,游戏等等。

    也用过Audio Station,Calendar,Contact等。Docker后来不能玩了,VMM太慢了也不用了。

    硬盘空间,4个4T的酷狼,用了群晖自带推荐的Synology Hybrid RAID (SHR),空间总共有10.5T,空间使用率一度达到85%以上,碰上疫情在家,整理了一番后,使用率降到了70%。当平常用Emby看完电影,要经常删掉一些才行,否则有些吃紧了。

    放弃购买NAS

    想来想去,NAS配置太低,价格又贵,手里还有个酷冷至尊的ATX大机箱和电源,自己装一个吧。

    ITGeeker 2022 ESXi主机开销

    在购买这个主机之前,折腾了好多省钱的方法,有兴趣可以看看我的之前的博客:

    折腾了一周的硬盘Raid计划 主机始终点不亮故障分析 原来是华硕主板的显卡Bug

    这是最终为这个ESXi主机所购买的设备和价格:

    2022 ESXi主机

    用的英特尔10代主板和CPU-i310105, 华硕Z490-A的硬核主板,内存48G,NVMe三星980 1TB,希捷16T企业级氦气硬盘2个,外加原先使用过的SSD硬盘3个。

    网卡现在很贵,买了一个全新的INTEL千兆网卡I350X1两口的,等价格低了再考虑4口吧。本想再海鲜市场淘一个的,有了之前折腾的经历,想着还是简单点吧

    I350X1能被ESXI8.0自动识别,还是SR-IOV挺方便:

    用的都是好品牌的东西,安装一切的都很顺利。价格也就和NAS差不多。相比NAS,机箱有点大,能耗可能会更高些,但配置和可玩度不可同日而语吧。

    一上来就建了7个虚拟机,日后跟大家慢慢分享ESXi的折腾情况吧。

  • Win 10和Ubuntu 18.04安装在同一个硬盘并实现GRUB界面双系统启动

    Win 10和Ubuntu 18.04安装在同一个硬盘并实现GRUB界面双系统启动

    原先在自己的华为Matebook X Pro上直接用Ubuntu的启动U盘安装,选择与windows共存,一切非常顺利。这次在PC机上安装也成功,就是不出现GRUB启动界面,直接到grub>恢复界面。但是,如果用BIOS的UEFI启动,也就是按F8选择启动盘,win10和ubuntu18都能顺利启动。

    我想可能是安装不太成功,于是用DiskGenius删除掉Ubuntu的分区,重新安装,结果就再也不会有选择与Windows共存的选项,然后各种尝试/boot分区,主盘和逻辑盘、启动设置分区选择都未能成功过,甚至删了EFI分区的Ubuntu目录,也不再出现与Windows共存的安装选项,而选择其他方式,网上的那些都方法都没有成功过。

    有看到一篇用grub恢复命令来恢复GRUB启动界面的,但命令太多,而且只能key in没去尝试,ITGeeker技术奇客觉得技术不带这样欺负人的。

    于是选择了Ubuntu启动盘的试用Ubuntu,安装工具boot-repair尝试修复:

    sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
    
    sudo apt-get install -y boot-repair && boot-repair

    据说好多人选择自动修复都成功了,但是ITGeeker技术奇客不太幸运没有成功,错误提示:

    The current session is in Legacy mode. Please reboot the computer, and use this software in an EFI session. This will enable this feature. For example, use a live-USB of Boot-Repair-Disk-64bit (www.sourceforge.net/p/boot-repair-cd), after making sure your BIOS is set up to boot USB in EFI mode.

    Please write on a paper the following URL:
    http://paste.ubuntu.com/p/MQ8dPKFdZ3/

    If you are experiencing boot issues, indicate this URL to people who help you. For example on forums or via email.

    当时ITGeeker想想这个也太折腾人,所以没有去尝试,而且手上有个Sandisk Cruzer Blade 8G,红色的那个,用RUFU写了Ubuntu安装盘之后用UEFI启动就没成功过,想想可能这U盘不知道此UEFI启动,所以又尝试了各种安装方法,包括工具EasyUEFI,BOOTICEx64.exe等,都还是未能成功,总结出来,不管选主分区还是逻辑盘,什么/boot, /home之类都没啥关系,最终选择安装方法,除了一个biosgrub保留分区(Ubuntu提示必须的)+ /根分区,其他一概不设置了,安装完后还是不能找到Ubuntu的启动盘符。

    翌日,ITGeeker那个Sony U盘,按照上面的反馈,去http:// www.sourceforge.net/p/boot-repair-cd下载了维修工具,乖乖708M之大,黔驴技穷,只好试试了。

    使用UEFI启动维修硬盘,实际就是个Ubuntu的系统加工具,但比试用Ubuntu时安装的要多一些内容,然后经过十几分钟的修理,中间还要根据提示,在Terminal输入相关命令来配合维修,终于GRUB的菜单恢复了,里面多了几个启动的杂项,但Win10和Ubuntu 18都能顺利启动。

    ITGeeker技术奇客中间还考虑过自行修改efi文件,但据说这东西要用C语言编写,然后编译,太过复杂。也希望Linux能在多系统启动方面都些方便,这样使用Linux的人自然会越来越多。

  • Odoo timezone时差调整 方法 时区调整

    Odoo timezone时差调整 方法 时区调整

    文章最后更新于2023-05-17

    by itgeeker.net

    最近在开发Odoo整合VOIP电话(供应商称为云电话)到奇客大师(GeekerMaster)系统时,返回的log说是时间戳错误。供应商说每次post的url的时效性是1分钟,检查发现后,我们每次发送Post请求的时候都会重新产生一遍,应该不存在时间过期的问题。

    用 _logger.warning打印变量值,发现Odoo服务器发送post的时间和我们当前Asia/Shanghai时区的时间是不同的,比当前电脑时间早了8个小时。而在系统端用date查询时间是正确的。应该是Odoo系统采用UTC时间的问题。

    Odoo系统前端页面显示是当前时区的时间,视图渲染时对datetime类型的字段做了时区调整,但后台数据库记录用的是UTC时间,并没有做时区调整,据说这是解决全球性使用一个系统的时间差问题的最好方法。

    这次ITGeeker技术奇客碰到的问题是国内的云电话供应商用的是北京时间UTC+8时区(Asia/Shanghai),所以只好调整代码来解决这个问题了。

    Odoo调整时差方法一 timedelta(hours=8)

    直接加8个小时,直观又方便。后面的时间格式根据要求可以更改。

    import datetime
    from datetime import timedelta
    
    now = (datetime.datetime.now() + timedelta(hours=8)).strftime("%Y%m%d%H%M%S")

    Odoo调整时差方法二 pytz

    import datetime
    import pytz
    
    user_tz = self.env.user.tz
    # local_tz = pytz.timezone(user_tz)
    now = datetime.datetime.now(pytz.timezone(
                user_tz)).strftime("%Y%m%d%H%M%S")

    Odoo要在”首选项”配置里设置好自己的时区为Asia/Shanghai,否则无法读取到您当前的时区。

    Odoo调整时差方法三 dpkg-reconfigure tzdata

    服务器端,例如Ubuntu使用 dpkg-reconfigure tzdata 设置时区,设置为UTC时区,使得您当前的时间和UTC时间一致。

    这里有个小提示: strftime和 strptime是不同的,一个是输出显示时间的样式,后者是输出时间的格式。

    ITGeeker技术奇客最近也调试了阿里云的短信,阿里用的时间格式就和时差无关,用的GMT时间。分享一下用python实现阿里短信所需要的时间格式:

    import time
    
    now = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())

    UTC确立以后UTC(GMT)=UTC(+0)作为一般提到的世界时,GMT表示零时区的时刻。 … 格林威治时间(GMT)是一个比较模糊的概念。 在1928年,GMT就是世界时。 在UTC被广泛采用后,我们提到的GMT实际上是UTC时间,或者说零时区的标准时。

    所以说用UTC是最好的解决方案。
  • WinSCP代替FileZilla和Xshell

    一直用FileZilla来做SFTP和FTP的工具,它是免费的。

    一直用Xhell来ssh远程登录,因为它针对家庭和学校是免费的。

    今天尝试了WinSCP同时具备这两个功能(SSH调用putty),而且还是开源的。

    FileZilla不能调用Xshell等工具,但WinSCP能方便调用Putty。如果你电脑装有Putty和FileZilla,就可以方便的把它们的配置导入到WinSCP.

    证书格式不同

    WinSCP的证书远程登入的设置没有那么直观,稍有点隐秘,需要去高级配置里选择一下。证书的格式采用putty的格式,和FileZilla的不同,不过它提供即时转换,选择证书后另存一下就可以了。

    比较

    Putty的界面有些简陋,导入导出似乎要用注册表来实现,和xshell不同,只要同步配置文件目录,两台电脑就能看到同样的站点配置。

    WinSCP还没深入使用,回头再更新感受。

奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4