Skip to content
cccskills
FreePublished on GitHub

dell-fw-download

Dell ファームウェアダウンロード。Playwright で dl.dell.com から BIN を取得し firmimg.d7 を抽出する。

The English summary is being prepared. Showing the original description.

Works withPlaywright

Run score Not tested

See how to install

Files included (1)

  • SKILL.md7.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Dell FW Download スキル

Playwright で Dell サポートサイトから FW BIN ファイルをダウンロードし、iDRAC 用の firmimg.d7 を抽出する。

概要

項目値
ダウンロード元dl.dell.com (Akamai CDN)
ツールPlaywright (headless Chromium)
出力形式firmimg.d7 (iDRAC FW イメージ)
前提スキルplaywright

前提

  • Playwright がセットアップ済みであること (playwright スキル参照)
  • .venv/bin/python が利用可能であること

Dell ドライバページ URL パターン

https://www.dell.com/support/home/en-us/drivers/driversdetails?driverid=<DRIVER-ID>

iDRAC7 FW の Driver ID

バージョンDriver IDファイル名
1.66.65992WYiDRAC-with-Lifecycle-Controller_Firmware_VV01T_LN_1.66.65_A00.BIN
2.20.20.204P5PFiDRAC-with-Lifecycle-Controller_Firmware_XTPX4_LN_2.20.20.20_A00.BIN
2.65.65.65Y9YPNiDRAC-with-Lifecycle-Controller_Firmware_0JKKT_LN_2.65.65.65_A00.BIN

ダウンロードスクリプトテンプレート

tmp/<session-id>/dell-download.py として保存:

import os, sys, time
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', '.venv', 'lib'))

from playwright.sync_api import sync_playwright

DRIVER_ID = sys.argv[1]         # e.g. "Y9YPN"
SAVE_DIR = sys.argv[2]          # e.g. "tmp/<session-id>"
DRIVER_URL = f"https://www.dell.com/support/home/en-us/drivers/driversdetails?driverid={DRIVER_ID}"

with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=True,
        args=["--no-sandbox", "--disable-gpu"],
    )
    context = browser.new_context(
        accept_downloads=True,
        locale="en-US",
        extra_http_headers={"Accept-Language": "en-US,en;q=0.9"},
        user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
                   "(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
    )
    page = context.new_page()
    page.add_init_script(
        "Object.defineProperty(navigator, 'webdriver', {get: () => undefined});"
    )

    # Dell ドライバページを訪問してセッション確立
    # 注意: GEO IP により日本語ページにリダイレクトされることがある
    # en-us URL を強制し、cookie 同意バナーがあれば閉じる
    print(f"Visiting driver page: {DRIVER_URL}", file=sys.stderr)
    page.goto(DRIVER_URL, wait_until="domcontentloaded", timeout=60000)
    time.sleep(3)

    # Cookie 同意バナーを閉じる (表示されている場合)
    try:
        reject_btn = page.locator('button:has-text("Reject"), button:has-text("すべて拒否")')
        if reject_btn.count() > 0:
            reject_btn.first.click()
            time.sleep(1)
    except Exception:
        pass

    # GEO リダイレクトで日本語ページになった場合、en-us URL に再アクセス
    if "/en-us/" not in page.url:
        print(f"Redirected to {page.url}, forcing en-us URL", file=sys.stderr)
        page.goto(DRIVER_URL, wait_until="domcontentloaded", timeout=60000)
        time.sleep(3)

    # ダウンロードボタンをクリック
    dl_btn = page.locator('a:has-text("Download")')
    if dl_btn.count() > 0:
        with page.expect_download(timeout=300000) as download_info:
            dl_btn.first.click()
        download = download_info.value
        save_path = os.path.join(SAVE_DIR, download.suggested_filename)
        download.save_as(save_path)
        print(f"Downloaded: {save_path}")
    else:
        # 直接 DL URL パターン
        dl_url = f"https://dl.dell.com/FOLDER00000000/{DRIVER_ID}.BIN"
        with page.expect_download(timeout=300000) as download_info:
            page.goto(dl_url)
        download = download_info.value
        save_path = os.path.join(SAVE_DIR, download.suggested_filename)
        download.save_as(save_path)
        print(f"Downloaded: {save_path}")

    browser.close()

実行:

.venv/bin/python tmp/<session-id>/dell-download.py <DRIVER-ID> tmp/<session-id>

注意: Dell CDN は curl 直接ダウンロードを Akamai ボット検知でブロック (403 Access Denied) する。必ず Playwright 経由でダウンロードすること。

BIN 展開手順

Dell の Linux BIN ファイルは自己展開型シェルスクリプト。内部に #####Startofarchive##### マーカーがあり、その後に gzip tar アーカイブが続く。

展開スクリプトテンプレート

tmp/<session-id>/extract-bin.py として保存:

import gzip
import io
import os
import sys
import tarfile

bin_path = sys.argv[1]          # e.g. "tmp/<session-id>/firmware.BIN"
output_dir = sys.argv[2]        # e.g. "tmp/<session-id>/fw-extracted"

MARKER = b"#####Startofarchive#####"

with open(bin_path, "rb") as f:
    data = f.read()

idx = data.find(MARKER)
if idx == -1:
    print("ERROR: Archive marker not found", file=sys.stderr)
    sys.exit(1)

# マーカー行の次の改行以降がアーカイブ
archive_start = data.index(b"\n", idx) + 1
archive_data = data[archive_start:]

print(f"Archive found at offset {archive_start} ({len(archive_data)} bytes)")

os.makedirs(output_dir, exist_ok=True)

gz = gzip.GzipFile(fileobj=io.BytesIO(archive_data))
tar = tarfile.open(fileobj=gz, mode="r:")
tar.extractall(path=output_dir)
tar.close()

# firmimg.d7 の場所を表示
for root, dirs, files in os.walk(output_dir):
    for name in files:
        if name == "firmimg.d7":
            fpath = os.path.join(root, name)
            fsize = os.path.getsize(fpath)
            print(f"Found: {fpath} ({fsize} bytes)")

実行:

python3 tmp/<session-id>/extract-bin.py tmp/<session-id>/firmware.BIN tmp/<session-id>/fw-extracted

展開後のディレクトリ構造

fw-extracted/
  payload/
    firmimg.d7          ← iDRAC FW アップデートで使用するファイル
    package.xml
    ...

全体フロー

  1. ダウンロード: .venv/bin/python tmp/<session-id>/dell-download.py <DRIVER-ID> tmp/<session-id>
  2. 展開: python3 tmp/<session-id>/extract-bin.py tmp/<session-id>/<BIN-file> tmp/<session-id>/fw-extracted
  3. パーミッション修正: chmod 644 tmp/<session-id>/fw-extracted/payload/firmimg.d7
  4. TFTP サーバに配置 (tftp-server スキル参照)

注意事項

  • curl は使用不可: Akamai CDN がボット検知で 403 を返す。Playwright 必須
  • GEO IP リダイレクト: 日本の IP からアクセスすると日本語ページ (/ja-jp/) にリダイレクトされ「ドライバーはご利用いただけません」と表示されることがある。locale="en-US" + Accept-Language ヘッダ + cookie 同意バナー閉じ + en-us URL 強制で対処する
  • BIN ファイルサイズ: 数十 MB 〜 100 MB 程度。ダウンロードに数分かかる場合がある
  • マーカーの位置: #####Startofarchive##### はファイルによって位置が異なる。バイナリ検索で動的に検出する
  • firmimg.d7 の配置: TFTP サーバで配信する際は chmod 644 を忘れないこと (tftp-server スキル参照)

参照

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Supermicro X11DPU/X10DRT-P BIOS Setup 操作。KVM スクリーンショット + キーストロークで BIOS メニューを操作する。BIOS 設定変更、確認、保存を行う。4-6号機 + 10号機対応。

The English summary is being prepared. Showing the original description.

miminashi/pvese19Updated Jul 6, 2026

Mellanox SX6036 InfiniBand スイッチのシリアルコンソール操作。ステータス確認、show コマンド、IB 設定、FW 管理を行う。

The English summary is being prepared. Showing the original description.

miminashi/pvese19Updated Jul 6, 2026

idrac7

Free

iDRAC7 基本操作。SSH 経由で racadm コマンドを実行し、サーバ管理を行う。

The English summary is being prepared. Showing the original description.

miminashi/pvese19Updated Jul 6, 2026

iDRAC7 ファームウェアアップデート。段階的アップグレードパスに従い TFTP 経由で適用する。

The English summary is being prepared. Showing the original description.

miminashi/pvese19Updated Jul 6, 2026

Fujitsu iRMC S4 (TX1320 M3 等) の電源・BIOS・RAID 操作 + BIOS 設定リファレンス。Redfish (HTTPS + SECLEVEL=0) 経由の電源/ブート操作 + iRMC Web UI/KVM 経由の手動 BIOS/RAID 操作手順 + 全 BIOS 設定項目の網羅リファレンス (bios/)。training-tx1320 対応。

The English summary is being prepared. Showing the original description.

miminashi/pvese19Updated Jul 6, 2026

LINSTOR/DRBD ストレージベンチマーク。VM上でfioを実行し、thin/thick-stripe構成の性能を計測する。

The English summary is being prepared. Showing the original description.

miminashi/pvese19Updated Jul 6, 2026

See all skills by miminashi

Report a problem with this skill