AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-173513

jww's questions

Martin Hope
jww
Asked: 2019-12-25 17:58:45 +0800 CST

Como tirar um timer systemd do status n/a?

  • 14

Estou tentando configurar um cronômetro systemd para executar duas vezes por dia durante uma semana de trabalho. Uma vez é às 7h00 e uma vez às 13h00. Os arquivos *.timer e *.service estão abaixo.

Eu os instalo e habilito, e está tudo OK:

cp callboot-update.service /etc/systemd/system
cp callboot-update.timer /etc/systemd/system

if ! systemctl enable callboot-update.service; then
    echo "Failed to enable callboot-update.service"
    exit 1
fi

if ! systemctl enable callboot-update.timer; then
    echo "Failed to enable callboot-update.timer"
    exit 1
fi

E recarregue o daemon. Mais uma vez está tudo bem:

if ! systemctl daemon-reload; then
    echo "Failed to daemon-reload"
fi

if ! systemctl reset-failed; then
    echo "Failed to reset-failed"
fi

No entanto, verificar o status mostra que o cronômetro está no status n/a e não está programado para ser executado:

$ systemctl list-timers --all

NEXT                         LEFT        LAST                         PASSED        UNIT                         ACTIVATES
Wed 2019-12-25 03:02:08 EST  6h left     Tue 2019-12-24 03:02:05 EST  17h ago       system-update.timer          system-update.service
Wed 2019-12-25 04:02:07 EST  7h left     Tue 2019-12-24 04:09:05 EST  16h ago       auto-update.timer            auto-update.service
Wed 2019-12-25 06:46:46 EST  9h left     Tue 2019-12-24 06:39:05 EST  14h ago       apt-daily-upgrade.timer      apt-daily-upgrade.service
Wed 2019-12-25 06:50:27 EST  9h left     Tue 2019-12-24 18:30:05 EST  2h 23min ago  apt-daily.timer              apt-daily.service
Wed 2019-12-25 10:55:43 EST  14h left    Tue 2019-12-24 13:22:24 EST  7h ago        motd-news.timer              motd-news.service
Wed 2019-12-25 16:46:06 EST  19h left    Tue 2019-12-24 16:46:06 EST  4h 7min ago   systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2019-12-30 00:00:00 EST  5 days left Mon 2019-12-23 00:00:11 EST  1 day 20h ago fstrim.timer                 fstrim.service
n/a                          n/a         n/a                          n/a           callboot-update.timer        callboot-update.service

Como faço para tirar o cronômetro do status n/a para que ele comece a funcionar conforme o esperado?


$ ls -Al /etc/systemd/system/callboot-*
-rw-r--r-- 1 root root 234 Dec 24 20:38 /etc/systemd/system/callboot-update.service
-rw-r--r-- 1 root root 222 Dec 24 20:38 /etc/systemd/system/callboot-update.timer
$ cat callboot-update.timer
[Unit]
Description=Run Callboot update.service

[Timer]
OnCalendar=Mon..Fri *-*-* 07:00:00
OnCalendar=Mon..Fri *-*-* 13:00:00
RandomizedDelaySec=3000
Persistent=true

[Install]
WantedBy=timers.target
$ cat callboot-update.service
[Unit]
Description=Update Callboot without user prompts

[Service]
Type=oneshot
ExecStart=/usr/sbin/callboot-update

[Install]
WantedBy=multi-user.target
linux systemd
  • 2 respostas
  • 5470 Views
Martin Hope
jww
Asked: 2019-12-04 13:50:25 +0800 CST

Coringa correspondente durante a remoção do zypper?

  • 5

Estou tentando remover um kernel antigo do openSUSE. A versão openSUSE é Tumbleweed (20191128), e o antigo kernel é 5.1.16.

A página de manual do Zypper está aqui . Parece que o Zypper oferece suporte a curingas (se eu estiver analisando a página de manual corretamente), mas não estou obtendo a sintaxe correta. Não tenho certeza de como dizer ao gerenciador de pacotes para corresponder ao curinga durante a remoção.

Como digo ao Zypper para remover os pacotes correspondentes *5.1.16*?


> ls /boot/
boot.readme                  sysctl.conf-5.1.16-1-default
config-5.1.16-1-default      sysctl.conf-5.3.12-1-default
config-5.3.12-1-default      System.map-5.1.16-1-default
grub2                        System.map-5.3.12-1-default
initrd                       vmlinux-5.1.16-1-default.gz
initrd-5.1.16-1-default      vmlinux-5.3.12-1-default.gz
initrd-5.3.12-1-default      vmlinuz
symvers-5.1.16-1-default.gz  vmlinuz-5.1.16-1-default
symvers-5.3.12-1-default.gz  vmlinuz-5.3.12-1-default

> sudo zypper remove *5.1.16*
Loading repository data...
Warning: No repositories defined. Operating only with the installed resolvables. Nothing can be installed.
Reading installed packages...
'*5.1.16*' not found in package names. Trying capabilities.
No provider of '*5.1.16*' found.
Resolving package dependencies...

Nothing to do.

> sudo zypper remove '*5.1.16*'
Loading repository data...
Warning: No repositories defined. Operating only with the installed resolvables. Nothing can be installed.
Reading installed packages...
'*5.1.16*' not found in package names. Trying capabilities.
No provider of '*5.1.16*' found.
Resolving package dependencies...

Nothing to do.
package-management opensuse
  • 1 respostas
  • 410 Views
Martin Hope
jww
Asked: 2019-11-25 17:09:20 +0800 CST

Qual dispositivo o NetBSD usa para um modem USB?

  • 6

Estou testando alguns softwares no NetBSD 8.1 x86_64. O software abre um modem USB e emite comandos AT. O software testou OK no Debian, Fedora, OS X e OpenBSD. O software está tendo problemas no NetBSD.

Programas do NetBSD dmesg:

umodem0 at uhub1 port 1 configuration 2 interface 0
umodem0: U.S.Robotics (0xbaf) USB Modem (0x303), rev 2.00/2.00, addr 2, iclass 2/2
umodem0: data interface 1, has CM over data, has break
umodem0: status change notification available
ucom0 at umodem0

Se eu estiver analisando as páginas de manual do NetBSD corretamente (o que pode não ser o caso), devo conseguir acessar o modem via /dev/ucom0. Veja também UMODEM(4)a página man .

O usuário de teste faz parte do dialergrupo. O software não conseguiu abrir /dev/ucom0, /dev/umodem0ou . Todos os resultados abertos em . Além disso, não há ou dispositivos.ucom0umodem0No such file or directory/dev/ttyACMn/dev/cuaUn

Como faço para acessar o modem no NetBSD?

networking usb
  • 1 respostas
  • 190 Views
Martin Hope
jww
Asked: 2019-10-03 00:57:53 +0800 CST

BER decodifica SubjectAltName e CHOICE?

  • 5

Estou tendo problemas para entender a sintaxe ao decodificar um SubjectAltName em um certificado TLS autoassinado. Eu acredito que o certificado está bem formado. O problema é que não entendo como decodificar arquivos CHOICE.

Primeiro, o SAN tem quatro nomes:

DNS.1  = example.com
DNS.2  = www.example.com
DNS.3  = mail.example.com
DNS.4  = ftp.example.com

Em seguida, RFC 5280, p. 127 diz:

SubjectAltName ::= GeneralNames

GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName

GeneralName ::= CHOICE {
     otherName                 [0]  AnotherName,
     rfc822Name                [1]  IA5String,
     dNSName                   [2]  IA5String,
     x400Address               [3]  ORAddress,
     directoryName             [4]  Name,
     ediPartyName              [5]  EDIPartyName,
     uniformResourceIdentifier [6]  IA5String,
     iPAddress                 [7]  OCTET STRING,
     registeredID              [8]  OBJECT IDENTIFIER }

E, finalmente, uma string codificada em hexadecimal começando em SEQUENCE:

3041820B6578616D706C652E636F6D820F7777772E6578616D706C652E636F6D82106D61696C2E6578616D706C652E636F6D820F6674702E6578616D706C652E636F6D

Eu entendo 30é a etiqueta e 41é o comprimento. Quando separo os valores, vejo:

820B6578616D706C652E636F6D
820F7777772E6578616D706C652E636F6D
82106D61696C2E6578616D706C652E636F6D
820F6674702E6578616D706C652E636F6D

Parece que 82é CHOICE, seguido pelo comprimento do valor e, em seguida, pelo valor. E todos os valores são concatenados juntos.

Minha pergunta é, como se 82tornou CHOICE? Não me lembro de tê-lo encontrado antes em ASN.1. Como faço para lidar com a decodificação?

encoding tls
  • 1 respostas
  • 125 Views
Martin Hope
jww
Asked: 2019-09-01 02:48:46 +0800 CST

Formato de arquivo de chave pública OpenSSH?

  • 15

Estou tendo problemas para analisar um arquivo de chave pública OpenSSH. Acredito (mas não tenho certeza) que o formato está detalhado no RFC 4253, Seção 6.6 do protocolo da camada de transporte Secure Shell (SSH) , Algoritmos de chave pública.

No caso de uma chave RSA, o RFC diz:

O formato de chave "ssh-rsa" tem a seguinte codificação específica:

string    "ssh-rsa"
mpint     e
mpint     n

Aqui, os parâmetros 'e' e 'n' formam o blob de chave de assinatura.

Aqui é onde os problemas começam. O documento não fornece uma gramática e não define o que stringe mpintsão. O que leva a:

$ cat rsa.ssh.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSNM6RVVmwN3y0NurIQnmZgjcx5K5zzZu9nDqopW4J
In/mr8OYZI3heSJShnIM8EThvwVGXXXyyJVRQAvRHYFO4DxS6bufSNWr3BxBGaGYlYxI9mgvQnT6+MzE
3oZyEMdQNPlV5VfbileXlrPoAk1TkGdVdhwdLJMI2B4KUyMf+Q== jwalton@test

E depois:

$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSNM6RVVmwN3y0NurIQnmZgjcx5K5zzZu9nDqopW4
JIn/mr8OYZI3heSJShnIM8EThvwVGXXXyyJVRQAvRHYFO4DxS6bufSNWr3BxBGaGYlYxI9mgvQnT6+M
zE3oZyEMdQNPlV5VfbileXlrPoAk1TkGdVdhwdLJMI2B4KUyMf+Q==' | base64 -d > rsa.bin

E finalmente:

$ hexdump -C rsa.bin
00000000  00 00 00 07 73 73 68 2d  72 73 61 00 00 00 03 01  |....ssh-rsa.....|
00000010  00 01 00 00 00 81 00 d2  34 ce 91 55 59 b0 37 7c  |........4..UY.7||
00000020  b4 36 ea c8 42 79 99 82  37 31 e4 ae 73 cd 9b bd  |.6..By..71..s...|
00000030  9c 3a a8 a5 6e 09 22 7f  e6 af c3 98 64 8d e1 79  |.:..n.".....d..y|
00000040  22 52 86 72 0c f0 44 e1  bf 05 46 5d 75 f2 c8 95  |"R.r..D...F]u...|
00000050  51 40 0b d1 1d 81 4e e0  3c 52 e9 bb 9f 48 d5 ab  |[email protected].<R...H..|
00000060  dc 1c 41 19 a1 98 95 8c  48 f6 68 2f 42 74 fa f8  |..A.....H.h/Bt..|
00000070  cc c4 de 86 72 10 c7 50  34 f9 55 e5 57 db 8a 57  |....r..P4.U.W..W|
00000080  97 96 b3 e8 02 4d 53 90  67 55 76 1c 1d 2c 93 08  |.....MS.gUv..,..|
00000090  d8 1e 0a 53 23 1f f9                              |...S#..|
00000097

Portanto, parece haver campos não documentados no arquivo de chave pública. A RFC não parece se referir a outros documentos para as definições dos campos. O RFC também não documenta o arquivo de chave privada. Estou parado no momento.

Onde o OpenSSH define os campos usados ​​em seus arquivos de chave?

public-key openssh
  • 1 respostas
  • 16448 Views
Martin Hope
jww
Asked: 2019-07-30 14:47:38 +0800 CST

Atualizar UEFI em uma máquina Dell sem Windows?

  • 6

Comprei um novo XPS 8930 . É vendido com o Windows 10 Pro.

Depois de consultar o contrato de licenciamento, decidi que não concordo. Vou vender minha cópia do Windows 10 Pro no mercado aberto. Também vou instalar o Linux (verifiquei que inicializa a máquina).

A máquina tem uma atualização UEFI urgente. É chamado XPS8930_1.1.7.exe. Parece ser um programa do Windows. Não quero usar minha cópia do Windows e contaminá-la para o próximo proprietário.

Pesquisei no site da Dell um procedimento para atualizar o UEFI usando Linux. Não consegui localizá-lo. Não tenho certeza se existe.

Minha pergunta é: como atualizo o UEFI sem usar o Windows ou contaminar a cópia do Windows nesta máquina?

windows-10 uefi
  • 1 respostas
  • 132 Views
Martin Hope
jww
Asked: 2019-07-15 20:33:46 +0800 CST

ssh-keygen e escrever certificado de usuário no formato X.509?

  • 7

Preciso criar um certificado SSH codificado como X.509 por RFC 6187, Certificados X.509v3 para autenticação Secure Shell . Com base na ssh-keygen (1)página do manual e em alguns tutoriais online, estou no ponto em que posso criar a CA, assinar uma identidade de usuário e salvá-la no formato de certificado OpenSSH.

Aqui estão as instruções:

  1. Criar chave CA

    ssh-keygen -b 4096 -t rsa -f example-com-ca -C "CA key for example.com"

  2. Criar chave de usuário

    ssh-keygen -b 2048 -t rsa -f id_rsa -C [email protected]

  3. Criar certificado de usuário

    ssh-keygen -s example-com-ca -n [email protected] -V +52w -I example.com-user ./id_rsa.pub

O certificado resultante é o formato OpenSSH:

$ cat id_rsa-cert.pub
[email protected] AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg0Ta
5nRrxKSB3k5sqCMH27W715uEUB54FKH44mBUMlCkAAAADAQABAAABAQDw8XuWbvSGsxyUdBY+KCfSRRz
G525MUN9/nbshWdl60ozMc4KU/Td44J8jKVq/hNHuyO7kqTaaeiO61FQmRPz3/vpmwUGEWkdhdQ5ujBj
1+X2/acnV+8Q2mXzxnvMvkcPh4T2jSXEMTJ8v5WG6cJkih+rJEbHHJF0tpxRSyxiNKfenDRRmGiyABd1
JDmkLLaNFLSSo4WeCFQ82nMi4Lod4QQMlakPgd76s6GNFflRklFWuhRadCdxrnz5e9ZMV8vDeAi+8IS8
9z+hWotYC4TVAb8is72Un6/1rwNQgWX5NcX3O1ocboJuEanFIh2QJTYq/UBwSQobH2+fXq06Qm4efAAA
AAAAAAAAAAAABAAAAEGV4YW1wbGUuY29tLXVzZXIAAAAUAAAAEGpkb2VAZXhhbXBsZS5jb20AAAAAXSv
+tAAAAABfC+ETAAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWd
lbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB
0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAhcAAAAHc3NoLXJzYQAAAAMBAAEAAAIBAMG
bEpcMRTnu5ewWWytcQqzcnSDZbF5yRYpEyQsKTLrQmSux104OOsXQ/5ba30/li4uewK0sL7Qqb79ZCVh
9pH4dnZf6KYIEtkTV2mj4d11ZsRYMXAcBSpuua+O6CTdEGMtmWrQZ3mVUMvCy8UFqcePE/QjxgvUBYZN
jRxx+nPtbYf88AWF1/I6uwKODaPspwpwh07TTqNjmIMpvc6gTWx0RO1avzTveOEvTnapgJI0mRjUmyGX
vvncE9U0WC65kugIkZcjI/kkXBVrgYVfhDssF8bvX2cO7NQt4QH5yANWgm0HraGqmNRAPXd84vomI0gF
8W4xwC9gnfJzjheeXLUEzSXOwiZSU2ElF1kGUlYRtM59VUjsTvFxjrXA9pPtGO5RopXot1GB3Y7vxnkj
blDzSdMAeLms0jv8Um6ty9uDzmW8o5GHZudatL8CAEP6HIvLrI6zQeI8iIlLmCsNjxE8p7annldcrNsX
f8hpNeG7RPtgcU1pMmc/fc3UPBvToqnMVfjKi1n2kGYrhOiNbfcpW7nZUSfLcSZGryIYMb7IlTjsXm6v
E1rCzJKukcMuI8U3qUwRzRS/xgLF5msSOiJ9qFM/FERGa6zYvdgTV2aq/07fDedqleChMreCiYPxPp1n
DLJOBcC+nvx7tIGj05z9BJvuCfOQWVnjIjZc0tUitAAACDwAAAAdzc2gtcnNhAAACALBk/Z4b3Z4O35H
NpC91oLWJExk39tkjdgJBC7YelzfH7apA4em/rk8G219EIJ8elKifJzLze1t3bfWOx/dwUHuTfqZ/e1h
j6Q/iNDQ9Q/2ijWso1E6alSIapdGogWHCQ4IDBlWaF8xzlCACbo82js2uvSYmbbcMlXPKqLbPJwiNJt8
AhDz3/JqRqedN7tObDMgUz0O0PGkYwUXjVV77EaVpRZF3ffTvnBBw9vHSwriVOZgOk4l2iXbZU51A+QB
l8bgFj4QCGvobMul/0AV+QsQ20AqUQ/nEIM1rXuH+ki0PYVpKkXPhKf2ODkLZdmpuKZX5lM9FumkFf/s
VVPa5GsonJG5s2VVEz7L+Ed6KBaJ+kFQrXu4hDxwEUCd/y/gYSicOb7B7N0jkPaVwRoR6tb0mAXGKE44
tumvptu/AJjlB23QOgIIToARgqampzmPwAm8jbU2AU3RtWx+RZGPnJKsJPtADMZ7ByJnGY/mPoNpGqQc
H8h+tClb1Ihxhbh1RQSuJNdgNlNGJbSdsonS9/8fxyxt7ok06Z05N6dy3PLwTuub1EzKmeSwQhHLHWXA
SKILcUaMosak1ybQZz8kMMrsMMUA2ubjrtGA8oe5skhc9gbAurebO1iGg+asUSNycDXZypwl20wpMlzL
VkxXSGHIz6Cd9QsfmJtuQh4QXfFrE [email protected]

É aqui que estou tendo problemas. Não vejo a ssh-keygen (1)opção de escrever o certificado no formato X.509. Prefiro codificação PEM, mas provavelmente posso trabalhar com codificação ASN.1/DER.

Como escrever o certificado no formato X.509?

Uma questão relacionada está em Alternatives to SSH x509 logon .

ssh linux
  • 2 respostas
  • 5178 Views
Martin Hope
jww
Asked: 2019-06-02 16:59:43 +0800 CST

Onde o Solaris inicia o sshd?

  • 7

Estou trabalhando em uma máquina Solaris 11.3 i86pc. Solaris envia uma versão antiga de OpenSSH e SunSSH, e eles só podem usar RSA. Estou tentando atualizar o OpenSSH.

Eu construí e instalei uma versão moderna em /opt/ssh. Agora estou tentando dizer ao Solaris para usá-lo. O problema é que não encontrei onde o Solaris inicia o daemon OpenSSH. Espero que haja um arquivo de configuração ou script que chama, sshdmas não consegui localizá-lo.

Onde o Solaris inicia o daemon sshd?


Ele não parece ser iniciado a partir de um rc.*arquivo (por script de inicialização não executado após a reinicialização no Solaris ):

# /usr/gnu/bin/grep -IR sshd /etc/rc*
#

E não consigo fazer o meu grepof /etcconcluir:

# /usr/gnu/bin/grep -IR --exclude-dir=dev sshd /etc
/etc/ssh/sshd_config:# Configuration file for sshd(1m) (see also sshd_config(4))
/etc/ssh/sshd_config:# This file is used for the SunSSH and the OpenSSH versions of the sshd(1m)
...
/etc/ssh/sshd_config:# Are root logins permitted using sshd.
/etc/ssh/sshd_config:# Note that sshd uses pam_authenticate(3PAM) so the root (or any other) user
<hang here>
boot openssh
  • 1 respostas
  • 363 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve