Ubuntu 22.04搭建TimeMachine

  • 创建一个目录,作为 TimeMachine 保存数据的目录。
$ sudo mkdir /home/data/.timemachine
  • 安装 netatalk 服务和 avahi-daemon 服务。
$ sudo apt install netatalk avahi-daemon
  • 编辑 netatalk 的配置文件:
$ sudo nano /etc/netatalk/afp.conf
  • 在该文件原来的基础上,或新增以下配置:
[TimeCapsule]

path = /home/data/.timemachine

time machine = yes

; 关闭spotlight索引,这个在Centos6上是不能开的,缺依赖,7上面可以开,但是不建议,吃资源
spotlight = no

; 指定某用户有读写权限
rwlist = senra

; 强制指定用户
force user = senra

; 限制TM存储容量,单位为MB
vol size limit = 100000
  • 重启服务。
$ sudo service netatalk restart

现在,你在 TimeMachine 上应该可以看到这个备份服务了,选择该备份服务就可以开始你的第一次备份了。

注意: Debian 12.5 系统上不能安装 netatalk ,原因是这个项目已经长时间没人维护了,后续建议直接使用 SMB 建立 TimeMachine 的备份服务器。

参考链接


使用HP Service Pack for ProLiant Gen8.1升级HP ProLiant MicroServer Gen8固件

家里使用了`HP Gen8`作为`NAS`服务器,对于iLO/BIOS来说,可以直接通过控制台升级。但是网卡/磁盘阵列的固件升级需要使用`HP Service Pack for ProLiant(HP SSP)`来升级。具体升级过程如下:

继续阅读使用HP Service Pack for ProLiant Gen8.1升级HP ProLiant MicroServer Gen8固件

HP ProLiant MicroServer Gen8升级BIOS

注意,升级BIOS,不需要创建启动U盘,更不需要安装Windows系统,只需要网页端通过iLO操作即可实现。

iLO 当前的版本分为硬件版本软件版本

  • 硬件版本目前主要是 iLO 4 和 iLO 5,后者是 Gen10 在使用。登录 iLO 管理后台页面的头部会提示你 iLO4/5。
  • 软件版本目前 iLO 4 的最新版本是 2.73.2,iLO 5 因为用不上没有做了解。在 iLO 管理后台登录界面上会有一行小字提示。

可以根据 升级 HP MicroServer Gen8 iLO 秘笈 的介绍,从HPE官网搜索并下载BIOS文件(官网建议下载Windows 版本的升级包,里面文件解压缩后最少),也可以从本站下载BIOS固件 iLO2.5 或者 HP Gen8 BIOS 20190404

iLO2.5 解压缩完成后,其中的cp031064 gen8 bios 2015.11.02.exe就是我们需要升级的BIOS固件。

HP Gen8 BIOS 20190404 解压缩出来的`cp039540.exe`也是我们需要升级的BIOS固件,这个是目前最新的版本

我们用7z等解压缩软件,解压缩出里面的文件,iLO 2.5中的`CPQJ0612.F62` 或者 HP Gen8 BIOS 20190404 中的`CPQJ0613.684` 就是我们的升级文件,两者都可以,一般建议用最新的 HP Gen8 BIOS 20190404  里面的文件。

继续阅读HP ProLiant MicroServer Gen8升级BIOS

HP ProLiant MicroServer Gen8升级到iLO4 2.54/2.73/2.82.5

iLOIntegrated Ligths-out的简称,是HP服务器上集成的远程管理端口,它是一组芯片内部集成vxWorks嵌入式操作系统,通过一个标准RJ45接口连接到工作环境的交换机。只要将服务器接入网络并且没有断开服务器的电源,不管HP服务器的处于何种状态(开机、关机、重启),都可以允许用户通过网络进行远程管理。简单来说,iLO是高级别的远程KVM系统,可以将服务器的显示信息显示在本地,并且使用本地的键盘鼠标控制、操作服务器,并可以将本地的光盘镜像、文件夹作为虚拟光驱映射并加载到服务器中。使用iLO,可以完成低层的BIOS设置、磁盘RAID配置、操作系统的安装等底层的工作,并且可以在完成系统安装后实现系统的远程控制与管理。

iLO 当前的版本分为硬件版本软件版本

  • 硬件版本目前主要是 iLO4 和 iLO 5,后者是 Gen10 在使用。登录 iLO 管理后台页面的头部会提示你 iLO4/5。
  • 软件版本目前 iLO4 的最新版本是 2.73.2,iLO5 因为用不上没有做了解。在 iLO 管理后台登录界面上会有一行小字提示。

iLO 2.73版本新增了基于`HTML5`的远程控制台,比以前方便多了,建议升级这个版本。

可惜HP官网上并没有在明显的位置找到iLO的升级文件下载的地方,可参考 升级 HP MicroServer Gen8 iLO 秘笈 的介绍,自己搜索下载需要的版本。也可依赖网友们共享已经下载完成的更新文件。

继续阅读HP ProLiant MicroServer Gen8升级到iLO4 2.54/2.73/2.82.5

Ubuntu 16.04运行iLO-jirc.jnlp(.jnlp格式文件)

HP Gen8的远程控制支持.Net,Java Web Start,Java Applet三种控制方式,如下图所示:

hp_ilo_html
Windows下面首选是.Net方式,简单,快速,比较坑的就是必须在IE浏览器下面点击链接,在FireFox,Chrome中点击这个链接都是无效的。那么如何在Ubuntu 16.04下面运行远程控制呢?答案就是使用Java Web Start。但是Java Web Start下载下来的是iLO-jirc.jnlp这个文件,那么如何运行这个文件呢?如下方式即可:

$ sudo apt install icedtea-netx
$ javaws iLO-jirc.jnlp

HP ProLiant MicroServer Gen8使用Super GRUB2 Disk从TF卡启动光驱位安装的Debian 8.3

简介


MicroServer Gen8属于HPE(Hewlett Packard Enterprise,惠普企业级产品)而不是HP,MicroServer Gen8的支持页面(如驱动下载)在HPE,官网首页是http://www.hpe.com,不是http://www.hp.com

HPE大约从2015年起变更了服务支持策略,普通驱动可以无限制下载,但是BIOS、SPP更新等可能需要用主机序列号注册、且在主机质保期内方能下载,超期就只能等待别人搬运分享了。

MicroServer Gen8在AHCI模式时,五个SATA和普通主板的功能一样,唯一不同的是MS G8的BIOS不能选择用哪个硬盘启动。
它会尝试从SATA1引导,如果SATA1没有连接硬盘,则尝试从SATA2引导,以此类推。
可是SATA1~4是硬盘笼子;通常人们都是将4个3.5寸仓库盘放到笼子里面;然后通过SATA5连接一个2.5寸硬盘(放置在9.5mm光驱位置)做系统盘。当五个硬盘都连接时,BIOS仅尝试从SATA1引导,结果出现引导失败。

解决方法就是通过安装一个U盘或MicroSD卡,从而间接引导SATA5接口上的系统盘。

网上给出的方法都是引导Windows系统的,而我们安装的如果是Linux系统的话,则无法简单的使用这些方法来引导系统的。
自己探索了一下,通过使用Rufus来使用并且修改Super GRUB2 Disk的方式来启动Debian的方法。

解决方法


1.安装Debian Linux系统

只插上光驱位置上的硬盘,然后安装Debian Linux系统,只有这样,才能正常安装系统,否则会出现无法安装到正确的磁盘上面。

2.开启SATA AHCI模式

通过 Intelligent Provisioning安装根本就找不到 tf卡(在 bios中可以把默认的 Dynamic HP Smart Array改成 SATA AHCI模式后就可以顺利安装了,但这样 raid功能也没了)

sata-mode-in-bios

3.下载必须的软件

下载Super GRUB2 Disk最新的镜像文件,官网为http://www.supergrubdisk.org/,一定要下载hybrid版本。
下载Rufus最新的版本,官网地址为https://rufus.akeo.ie/
也可以在本网站下载我使用的版本Super GRUB2 Diskrufus-3.10

4.安装Super GRUB2 Disk到SD卡

按照下图的步骤处理:

如果使用2.8.x版本,参考下图(注意,如果使用最新的2.0.4版本的Super GRUB2 Disk,只能使用3.11.x版本的Rufus

Rufus-ISO-Select
Rufus 2.8.886

只有如下选项才能保证可以在Windows中可以正常访问修改Super GRUB2 Disk已经安装到SD卡上的内容。

Rufus-ISO-Select-ISOHybrid

如果使用3.10.x版本(已知`Rufus 3.11.1678`写入的数据无法引导系统,只能使用`3.10.x`版本),参考下图

Rufus 3.10.1647

只有如下选项才能保证可以在`Windows`中可以正常访问修改`Super GRUB2 Disk`已经安装到`SD`卡上的内容。

5.增加Gen8的启动配置文件

在刻录好的SD卡的`\boot\grub\`(Super GRUB2 Disk 2.02)或者`\boot\grub\sgd`(Super GRUB2 Disk 2.04)目录下创建一个名为Gen8.cfg的配置文件,内容如下:

# Super Grub Disk - Gen8.cfg

set option_title=$"Gen8"

function run_option {
  echo "Starting Gen8 ..."
  # for uuid
  #search --set=root --fs-uuid 763A-9CB6
  # for file 
  search --set=root --file /boot/grub/grubenv
  # debian 12.5 for file 
  #search --set=root --file /boot/grub/unicode.pf2
  set prefix=(${root})/boot/grub
  normal
}

一般建议是通过指定磁盘的uuid的方法来启动系统,如果能够确定系统磁盘上存在一个唯一的文件,也可以通过简单的指定文件的方法来让GRUB2来搜索的方式找到启动磁盘。

对于 Super GRUB2 Disk 2.02
修改\boot\grub\main.cfg,在
process_main_option "${prefix}/language_select.cfg"
这行代码下面增加
process_enable "${prefix}/Gen8.cfg" rootmenu

对于 Super GRUB2 Disk 2.04
修改\boot\grub\sgd\main.cfg,在
process_main_option "${sg2d_directory}/language_select.cfg"
这行代码下面增加
process_enable "${sg2d_directory}/Gen8.cfg" rootmenu

并且打开被注释掉的set timeout=10项目,让系统自动启动,否则需要手工点击一下回车。
修改后的内容如下:

# Super Grub Disk Main Configuration file
# Copyright (C) 2009,2010,2011,2012,2013,2014,2015  Adrian Gibanel Lopez.
#
# Super Grub Disk is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Super Grub Disk is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Super Grub Disk.  If not, see <http://www.gnu.org/licenses/>.

# Configure gfxterm, but allow it to be disabled by holding shift during boot.
# gfxterm is required to display non-ASCII translations.

loadfont "$prefix/unifont.pf2"
if keystatus --shift; then
  disable_gfxterm=true
  # export disable_gfxterm is needed so that the setting will persist even after
  # a "configfile /boot/grub/main.cfg" (which is what language_select.cfg does after
  # you select a new language)
  export disable_gfxterm

  # The following strings are intentionally not made translateable.
  echo "It has been detected that the shift key was held down. Because of this SG2D"
  echo "will use VGA text mode rather than gfxterm. This will cause display problems"
  echo "when using some non-English translations."
  echo
  echo "Press escape to continue to the main menu"
  sleep --interruptible 9999
fi

if [ "$disable_gfxterm" != true ]; then
  insmod all_video
  gfxmode=640x480
  if terminal_output --append gfxterm
  then
      terminal_output --remove console
  fi
fi

# Export the variables so that they persist when loading a new menu.
export menu_color_normal
export menu_color_highlight
export menu_color_background
export bwcolor

function set_sgd_colors {
  if [ "$bwcolor" = "yes" ]; then
    menu_color_normal=white/black
    menu_color_highlight=black/white
    menu_color_background=black/white
  else
    menu_color_normal=white/brown
    menu_color_highlight=white/blue
    menu_color_background=yellow/cyan
  fi
}

set_sgd_colors

# Set secondary_locale_dir to the directory containing SG2D specific mo files.
# This makes grub aware of translations for SG2D specific strings.
secondary_locale_dir="${prefix}/sgd_locale/"

insmod part_acorn
insmod part_amiga
insmod part_apple
insmod part_bsd
insmod part_gpt
insmod part_msdos
insmod part_sun
insmod part_sunpc

function process_main_option {

  set option_cfg="$1"
  source "${option_cfg}"
  menuentry "${option_title}" "${option_cfg}" {
    set chosen=""
    export chosen
    set sourced_cfgs="${2}"
    export sourced_cfgs
    configfile "${prefix}/processoption.cfg"
  }

}

function process_option {

  set option_cfg="$1"
  source "${option_cfg}"
  menuentry "${finaloption_tab_str}${option_title}" "${option_cfg}" {
    set chosen=""
    export chosen
    set sourced_cfgs="${2}"
    export sourced_cfgs
    configfile "${prefix}/processoption.cfg"
  }

}

function process_enable {

  set option_cfg="$1"
  set forced_prefix="$2"
  if [ "$forced_prefix" = "rootmenu" ]; then
    menu_prefix_str=""
  else
    menu_prefix_str="${finaloption_tab_str}"
  fi
  source "${option_cfg}"
  menuentry "${menu_prefix_str}${option_title}" "${option_cfg}" {
    set chosen=""
    export chosen
    set sourced_cfgs="${2}"
    export sourced_cfgs
    configfile "${prefix}/processenable.cfg"
  }

}

function submenu_title {

  menuentry "${secondoption_prefixtab_str}${chosen}${secondoption_postfixtab_str}" {
    sleep 1s
  }

}

# Timeout for menu
set timeout=10

# Set default boot entry as Entry number 2 (counting from 0)
set default=2

# Init Super Grub2 Disk variables
insmod regexp
regexp -s "sg2d_dev_name" '^\((.*)\).*$' "$prefix"
rmmod regexp
export sg2d_dev_name

# Get the version number for this Super GRUB2 Disk release
source "${prefix}/version.cfg"

# Get design variables
source "${prefix}/design.cfg"

menuentry "               ====---==- Super Grub2 Disk $sgrub_version  -==---==== " {
  # Set pager=1 so ls output doesn't scroll past the top of the screen
  # but restore $pager to its previous value when finished
  set oldpager="${pager}"
  set pager=1

  cat /boot/grub/AUTHORS
  cat /boot/grub/COPYING

  set pager="${oldpager}"
  unset oldpager
  echo $"Press escape to return to the main menu"
  sleep --interruptible 9999
}

process_main_option "${prefix}/language_select.cfg"

process_enable "${prefix}/gen8.cfg" rootmenu

# Everything
menuentry $"Detect and show boot methods" {
  configfile "${prefix}/everything.cfg"
}

process_enable "${prefix}/enableraidlvm.cfg" rootmenu

process_enable "${prefix}/enablenative.cfg" rootmenu

submenu $"Boot manually""${three_dots_str}" {

  submenu_title

  process_option "${prefix}/osdetect.cfg"

  process_option "${prefix}/cfgextract.cfg"

  process_option "${prefix}/cfgdetect.cfg"

  process_option "${prefix}/menulstdetect.cfg"

  process_option "${prefix}/grubdetect.cfg"

  process_option "${prefix}/diskpartchainboot.cfg"

  process_option "${prefix}/autoiso.cfg"

  source "${prefix}/return.cfg"

}

submenu $"Extra GRUB2 functionality""${three_dots_str}" {

  submenu_title

  process_enable "${prefix}/enablelvm.cfg"

  process_enable "${prefix}/enableraid.cfg"

  process_enable "${prefix}/enableencrypted.cfg"

  process_enable "${prefix}/enablenative.cfg"

  process_enable "${prefix}/enableserial.cfg"

  process_enable "${prefix}/searchfloppy.cfg"

  process_enable "${prefix}/searchcdrom.cfg"

  process_enable "${prefix}/searchsgd.cfg"

  source "${prefix}/return.cfg"

}
menuentry $"Print devices/partitions" {
  # Set pager=1 so ls output doesn't scroll past the top of the screen
  # but restore $pager to its previous value when finished
  set oldpager="${pager}"
  set pager=1

  ls -l

  set pager="${oldpager}"
  unset oldpager

  echo $"Press escape to return to the main menu"
  sleep --interruptible 9999
}

menuentry $"Color ON/OFF" {
  if [ "$bwcolor" = 'yes' ]; then
    bwcolor=no
  else
    bwcolor=yes
  fi

  set_sgd_colors
}

submenu $"Exit""${three_dots_str}" {

  submenu_title

  process_option "${prefix}/halt.cfg"
  process_option "${prefix}/reboot.cfg"

  source "${prefix}/return.cfg"
}

# If it exists, source $prefix/sgd_custom.cfg. This follows the same idea as
# grub-mkconfig generated grub.cfg files sourcing $prefix/custom.cfg, though
# it's less needed here since one could add custom code to this file directly
# whereas their distro might automatically overwrite /boot/grub/grub.cfg on
# kernel upgrades. The main motivation for adding this was the vmtest script
# which I use heavily during Super GRUB2 Disk development, but this feature
# might also be useful to others.
if [ -e "$prefix/sgd_custom.cfg" ]; then
  source "$prefix/sgd_custom.cfg"
fi

6.插上SD卡,断电,然后冷重启

7.常见问题

注意:如果安装升级的是`ubuntu 20.04.1`,系统启动的时候,会出现`error: symbol 'grub_calloc' not found`。

如下图:

但是奇怪的是,如果在系统启动的时候选择`Detect and show boot methods`,显示出的任何菜单,都可以正常启动系统,如下:

这个问题是因为`ubuntu 20.04.1`系统使用的是新版本的`grub2`引导系统,启动配置信息需要进行调整,修改我们创建的`\boot\grub\Gen8.cfg`(Super GRUB2 Disk 2.02)或者`\boot\grub\sgd\Gen8.cfg`(Super GRUB2 Disk 2.04),内容调整为如下:

# Super Grub Disk - Gen8.cfg

set option_title=$"Gen8"

function run_option {
  echo "Starting Gen8 ..."
  #for uuid
  #search --set=root --fs-uuid 763A-9CB6
  #for file
  insmod xfs
  search --set=root --file /boot/grub/grubenv
  # debian 12.5 for file 
  #search --set=root --file /boot/grub/unicode.pf2
  configfile /boot/grub/grub.cfg
}

参考链接


  1. 制作HP MicroServer Gen8可用的ESXi 5.x SD/TF卡启动盘
  2. HP ProLiant MicroServer Gen8迷你服务器 汇总贴:降噪、升级、改造
  3. Rescatux & Super Grub2 Disk
  4. Rufus
  5. HP ProLiant MicroServer Gen8 资源:SPP 2016.04、iLO4 2.40
  6. Gen8通过TF卡启动光驱位硬盘的新办法(增减硬盘无需改动)
  7. GRUB
  8. GNU GRUB Manual 2.04
  9. grub boot error : "symbol 'grub_calloc' not found